Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

rtd-acquire

rtd-acquire is a hardware-agnostic acquisition layer for resistance temperature detectors (RTDs). Its job is to obtain the best trustworthy estimate of an RTD element's resistance from real or simulated acquisition hardware and report acquisition-level diagnostics.

It intentionally stops at resistance. RTD characteristic interpretation, resistance-to-temperature conversion, tolerance, model calibration, and model-level uncertainty belong in rtd-sensor.

physical RTD
    ↓
converter / ADC / transmitter / controller
    ↓
rtd-acquire
    ↓
resistance + acquisition diagnostics
    ↓
rtd-sensor
    ↓
temperature / RTD-model interpretation

Initial targets

The first implementation target is the Analog Devices MAX31865, with Python hardware testing on a Raspberry Pi 4 Model B and portable C hardware testing on Arduino-compatible HERO boards.

The second planned hardware family is the TI ADS124S08 precision ADC/front end. Later targets cover industrial resistance inputs, 4–20 mA transmitters, industrial digital interfaces, and configurable custom acquisition circuits.

Installation

rtd-acquire requires Python 3.11 or later. While the project is in alpha, install the latest prerelease explicitly:

python -m pip install --pre rtd-acquire

A minimal hardware-free acquisition uses the deterministic simulator:

from rtd_acquire import Measurement
from rtd_acquire.simulation import SimulatedAcquisitionDevice

device = SimulatedAcquisitionDevice([Measurement(resistance_ohms=100.0)])
measurement = device.read()
print(measurement.resistance_ohms)

For Raspberry Pi/Linux SPI support, install the optional backend dependency:

python -m pip install --pre "rtd-acquire[raspberry-pi]"

Developers working from a source checkout can instead use uv sync; see docs/DEVELOPMENT.md for the project quality gates.

Raspberry Pi Linux SPI

The Python Raspberry Pi path uses the normal Linux spidev userspace API, not direct SoC register access. Install the raspberry-pi extra shown above before using this backend. In a development checkout, the equivalent command is uv sync --extra raspberry-pi.

A MAX31865 on SPI0/CE0 can then be wired through the generic Linux adapter:

from rtd_acquire.max31865 import MAX31865, MAX31865Config
from rtd_acquire.transports import LinuxSpidevDevice, SpiSettings

settings = SpiSettings(
    clock_polarity=0,
    clock_phase=1,
    clock_frequency_hz=1_000_000,
)
config = MAX31865Config(
    reference_resistance_ohms=430.0,
    wire_count=3,
    filter_frequency_hz=60,
)

with LinuxSpidevDevice("/dev/spidev0.0", settings) as spi:
    measurement = MAX31865(spi, config).read()

SPI must first be enabled in Raspberry Pi OS. The implementation targets the same Linux interface on Raspberry Pi 4 and 5; physical validation is currently pending on Pi 4 and has not yet been performed on Pi 5.

Deterministic simulation

Applications can exercise the same AcquisitionDevice contract without hardware by replaying validated measurements and explicit acquisition failures:

from rtd_acquire import Measurement
from rtd_acquire.simulation import SimulatedAcquisitionDevice

simulated = SimulatedAcquisitionDevice(
    [
        Measurement(resistance_ohms=100.0),
        Measurement(resistance_ohms=101.0, standard_uncertainty_ohms=0.02),
    ],
    repeat=True,
)

measurement = simulated.read()

This generic simulator works at the measurement boundary. The separate MAX31865SpiEmulator exercises MAX31865 register/SPI behavior through the real driver. Neither simulator performs RTD temperature-model interpretation.

Integration with rtd-sensor

rtd-acquire and rtd-sensor remain independent packages. Applications pass the acquired resistance explicitly into the desired RTD model:

from rtd_sensor import pt100

measurement = device.read()
if measurement.resistance_ohms is not None:
    temperature_c = pt100.resistance_to_celsius(measurement.resistance_ohms)

See examples/rtd_sensor_pt100.py for a runnable hardware-free example. rtd-sensor is not an rtd-acquire runtime dependency.

Physical MAX31865 validation is tracked separately in docs/HARDWARE_VALIDATION.md.

See:

Status

0.1.0a1 is the first public alpha release. The core measurement/diagnostic contracts, the platform-independent MAX31865 driver, Linux spidev adapter, simulation/emulation support, and shared conformance vectors are implemented. Raspberry Pi/MAX31865 physical hardware validation is still pending, and public APIs may change before 0.1.0.

License

Mozilla Public License 2.0 (MPL-2.0), matching rtd-sensor.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rtd_acquire-0.1.0a1.tar.gz (117.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rtd_acquire-0.1.0a1-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

Details for the file rtd_acquire-0.1.0a1.tar.gz.

File metadata

  • Download URL: rtd_acquire-0.1.0a1.tar.gz
  • Upload date:
  • Size: 117.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for rtd_acquire-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 507104d26b64a7f17f83166ebd4d76acb264ceebf3475913b51d30a95801b178
MD5 875440836750ca0ce68774b148b146ad
BLAKE2b-256 f88c0aaa148c155c7ae02eb46ecd95e22772b43a8e12584efad063bd7b56a45d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rtd_acquire-0.1.0a1.tar.gz:

Publisher: release.yml on GregRR/rtd-acquire

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rtd_acquire-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: rtd_acquire-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 26.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for rtd_acquire-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 271fa35dde0942d2c1089dc0a60802a31f00f7ffb4177e515def4c7377e391a0
MD5 fb1114473bd6f007f127b4fff8d49b63
BLAKE2b-256 af5a1073a8c3b5ee3a5d674b27240262bd1a75c8a1a7dc726d96a386c62ec1f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for rtd_acquire-0.1.0a1-py3-none-any.whl:

Publisher: release.yml on GregRR/rtd-acquire

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.2.0

2 files

This release

0.1.0a1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page