herosdevices.hardware.raspberrypi.max318xx.max31865¶
MAX31865 Resistance to Digital Converter.
This module implements an interface for the MAX31865 resistance temperature detector (RTD) converter. The chip communicates over SPI. This implementation uses GPIO bit-banging on a Raspberry Pi. Using spidev would be more efficient, but initial attempts with spidev were unsuccessful.
This code is based on the work of steve71: https://github.com/steve71/MAX31865
Classes: - MAX31865: Provides methods to read resistance and temperature from PT100/PT1000 sensors.
Initialization allows configuration of SPI pins, reference resistance, and wiring type.
Methods to fetch resistance, convert resistance to temperature, and handle errors.
Usage: - Instantiate multiple sensor objects for different chip select pins. - Loop to read and print temperature readings. - Gracefully handle interruption and clean GPIO resources.
Notes: - Proper wiring and pull-down resistors are essential. - Optimized for use with a Raspberry Pi and RPi.GPIO.
Module Contents¶
- herosdevices.hardware.raspberrypi.max318xx.max31865.A = 0.003908¶
- herosdevices.hardware.raspberrypi.max318xx.max31865.B = -5.775e-07¶
- herosdevices.hardware.raspberrypi.max318xx.max31865.C = -4.183e-12¶
- herosdevices.hardware.raspberrypi.max318xx.max31865.c_v_d(r: float, r_0: float) float ¶
Calculate temperature using Callendar-Van Dusen equation.
This function converts resistance to temperature based on the Calendar-Van Dusen equation, which relates resistance in Ohms to temperature in Celsius. It uses numpy for polynomial root solving.
- Parameters:
r (float) – Resistance in Ohms.
r_0 (float) – Resistance at 0°C in Ohms.
- Returns:
Estimated temperature in degrees Celsius.
- Return type:
float
- Raises:
ImportError – If numpy is not installed.
ValueError – If the polynomial root calculation encounters issues (e.g., negative discriminant).
- herosdevices.hardware.raspberrypi.max318xx.max31865.c_v_d_quad(r: float, r_0: float) float ¶
Approximate temperature using a quadratic form of the Callendar-Van Dusen equation.
This method offers a fast and reasonably accurate way to estimate temperature from resistance, suitable for class A PT100 sensors with about 0.2°C accuracy.
- Parameters:
r (float) – Resistance in Ohms.
r_0 (float) – Resistance at 0°C in Ohms.
- Returns:
Estimated temperature in degrees Celsius.
- Return type:
float
- Raises:
ValueError – If the discriminant in the quadratic formula is negative.
- class herosdevices.hardware.raspberrypi.max318xx.max31865.MAX31865(cs_pin: int = 8, miso_pin: int = 9, mosi_pin: int = 10, clk_pin: int = 11, r_0: float = 1000.0, r_ref: float = 400.0, three_wire: bool = False)¶
Bases:
herosdevices.hardware.raspberrypi.max318xx.max318xx.MAX318xx
Interface class for MAX31865 resistance temperature sensor.
- Parameters:
cs_pin (int) – Chip select GPIO pin (default: 8).
miso_pin (int) – MISO GPIO pin (default: 9).
mosi_pin (int) – MOSI GPIO pin (default: 10).
clk_pin (int) – Clock GPIO pin (default: 11).
r_0 (float) – Resistance at 0°C, in Ohms (default: 1000 for PT1000).
r_ref (float) – Reference resistor resistance, in Ohms (default: 400).
three_wire (bool) – Use 3-wire configuration (default: False).
log (logging.Logger) – Optional logger for debug messages.
- r_ref = 400.0¶
- r_0 = 1000.0¶
- config = 162¶
- read_resistance(cs_pin: int) float ¶
Initiate resistance measurement and return resistance value.
- Returns:
Resistance in Ohms.
- Return type:
float
- read_temp(convert: collections.abc.Callable[[float, float], float] = c_v_d_quad) dict ¶
Read resistance and convert to temperature.
- Parameters:
convert (function) – Function to convert resistance to temperature. Defaults to c_v_d_quad.
- Returns:
Temperature in Celsius.
- Return type:
float
- cs_pins¶
- miso_pin = 9¶
- mosi_pin = 10¶
- clk_pin = 11¶
- write_register(reg_num: int, data_byte: int) None ¶
Write a byte to a specified register.
- Parameters:
regNum (int) – Register number to write to.
dataByte (int) – Data byte to write.
- read_register(cs_pin: int, num_registers: int, reg_num_start: int | None = None) list[int] ¶
Read one or more bytes starting from a specified register.
- Parameters:
cs_pin (int) – Chip select GPIO pin number.
numRegisters (int) – Number of bytes to read.
regNumStart (int, optional) – Starting register number for the read operation.
- Returns:
List of bytes read from the device.
- Return type:
list
- send_byte(byte: int) None ¶
Send a byte via SPI by bit-banging.
- Parameters:
byte (int) – Byte value to send.
- recv_byte() int ¶
Receive a byte via SPI by bit-banging.
- Returns:
Byte received.
- Return type:
int
- create_dict(values: list[float], observable: str, unit: str) dict ¶
Build dictionary of observables to be returned by the sensor.