Is MAX31865 RTD PT100 Temp Amplifier Compatible with Home Assistant (ESPHome)?
Electrical Specifications
Always confirm pin assignments against the manufacturer datasheet before wiring.
Compatibility Overview
Industrial-grade platinum RTD resistance thermometer amplifier delivering high precision temperature readings.
Wiring MAX31865 RTD PT100 Temp Amplifier to ESP32
| Module pin | ESP32 | Note |
|---|---|---|
| VIN | 3V3 | Adafruit's board regulates to 3.3V itself and accepts 3–5V on VIN. |
| GND | GND | |
| CLK | GPIO18 | |
| SDO | GPIO19 | MISO. |
| SDI | GPIO23 | MOSI. Unlike a thermocouple amplifier this chip is written to — configuration, bias and the fault check — so the spi: block needs mosi_pin as well as miso_pin. |
| CS | GPIO5 | cs_pin in the config. |
| RDY | unconnected | ESPHome does not use it. |
| RTD terminals | the PT100 | Four wires as the Adafruit board ships, which is what the config assumes. Two- and three-wire probes need jumpers changed; see the gotchas. |
Host pins are the ones the configuration on this page uses. Move a pin here and change it in the YAML — they are documented together so they cannot disagree.
Technical Specification Matrix
| Feature / Attribute | Specification / Status |
|---|---|
| Hardware Protocol | SPI Bus / 3.3V |
| Bridge Required | NO |
| Border Router Needed | None |
| Hardware Capabilities & Peripherals | RTD Temperature (°C) Note: these entities come from the ESPHome configuration you flash — each one needs its matching component in that YAML before it appears. |
| Pairing Complexity | Advanced |
| Factory Reset Instruction | Press BOOT button while resetting. |
Wire, Flash, Adopt, Check
Wire it up
Follow the wiring table above. The ESP32 pins there are the ones the configuration uses, so if you move one, change it in both places.
Flash the configuration
Create a new device in the ESPHome dashboard (the Home Assistant add-on) and paste the configuration below into it, or save it as emb_esp32_max31865_ard.yaml and run esphome run emb_esp32_max31865_ard.yaml. The first flash goes over USB. If it is not detected, press BOOT button while resetting to put it in download mode. Every update after that is over the air.
Adopt it in Home Assistant
Settings → Devices & Services. A node on the same network shows up as a discovered ESPHome device within a minute of joining Wi-Fi; choose Configure and enter the API encryption key from your secrets.yaml. If discovery does not find it, add the ESPHome integration by hand with the node's IP address.
Check it works
At room temperature RTD Temperature agrees with a trusted thermometer to within a degree (a PT100 at 20°C measures about 107.8Ω), and a hand around the probe lifts it at the next update. Unknown in Home Assistant, with a FORCE− open or REFIN− fault in the log, is the probe wiring or the wire-count jumpers. A reading a steady few degrees high on a two-wire probe is lead resistance. A reading wildly wrong but stable is reference_resistance or rtd_nominal_resistance set for the other board.
ESPHome Configuration
Starting configuration for MAX31865 RTD PT100 Temp Amplifier on ESP32. Untested on hardware — verify wiring and pins against your own board.
# ESPHome configuration for MAX31865 RTD PT100 Temp Amplifier
# Host: ESP32. Pin numbers below are host-side defaults — any free
# GPIO will do, and you should change them to match your own wiring.
esphome:
name: emb_esp32_max31865_ard
friendly_name: "MAX31865 RTD PT100 Temp Amplifier"
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
encryption:
key: !secret api_encryption_key
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
spi:
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
sensor:
- platform: max31865
name: "RTD Temperature"
cs_pin: GPIO5
reference_resistance: 430 ohm
rtd_nominal_resistance: 100 ohm
update_interval: 60s
Before you flash:
the !secret values come from your
secrets.yaml, and the GPIO numbers are host-side
defaults rather than properties of this part — change them to match how you actually wired it.
What Appears in Home Assistant
°C every 60s, converted from the measured resistance with the Callendar–Van Dusen equation, and a separate polynomial below 0°C. When the chip reports a fault it publishes unknown.
The component logs which fault check failed, and the measured resistance at verbose log level. Neither is exposed as an entity.
Known Problems and Fixes
mains_filter defaults to 60Hz
The chip notches out one mains frequency, and ESPHome picks 60Hz unless told otherwise. The config does not set it. On a 50Hz grid — the UK, Europe, Australia — add mains_filter: 50Hz so the filter rejects the hum the probe leads actually pick up.
Wire count: the board and the config must agree
rtd_wires defaults to 4, matching Adafruit's board as it ships. A three-wire probe needs rtd_wires: 3 and the jumpers changed: bridge the 2/3 Wire pad, cut the trace on the left of the two-way jumper above the reference resistor, and bridge its 3 side. A two-wire probe needs the jumpers under the terminal block bridged; the chip setting is the same as for four.
Two wires add the lead resistance
A PT100 changes by about 0.385Ω per degree, so every ohm of cable in a two-wire hookup reads as roughly 2.6°C too warm. Three- and four-wire measurement cancel the leads out. Keep two-wire for short leads.
reference_resistance is the resistor on the board
The chip measures the RTD as a ratio of its reference resistor, so the value in the config must be that resistor's. PT100 boards — Adafruit #3328 and the common CJMCU clones — carry 430Ω, marked 4300 in the four-digit code. Adafruit's PT1000 board (#3648) carries 4300Ω and also needs rtd_nominal_resistance: 1000 ohm.
Faults read as unknown
Before each reading the component runs the chip's fault check, and an open probe or broken lead makes it publish unknown and log which check failed. It does not program the chip's high and low temperature thresholds, so over-temperature alarms belong in a Home Assistant automation, not the chip.
The probe sets the accuracy
The converter is 15-bit, with a nominal step of 0.03125°C and a total accuracy of 0.5°C over all conditions. The probe adds its own tolerance on top: a class B PT100 is ±0.3°C at 0°C, class A ±0.15°C, and both widen with temperature.
Report a Pinout Error or Submit Tested Code Snippets
Found a pin mapping quirk or built a custom ESPHome YAML driver for MAX31865 RTD PT100 Temp Amplifier? Submit a pull request or report corrections to our index.
Hardware Correction Reporter (emb-esp32-max31865-ard)
Frequently Asked Questions
Does MAX31865 RTD PT100 Temp Amplifier work without an internet connection?
How is MAX31865 RTD PT100 Temp Amplifier powered and wired to the host board?
How does the host board reach Home Assistant (ESPHome)?
Alternatives
MAX6675 K-Type Thermocouple Sensor
A K-type thermocouple to 1024°C for heat an RTD probe is not built for, at 0.25° steps and about ±2°C.
MAX31855 Thermocouple Amplifier
The better thermocouple amplifier: negative temperatures and short-circuit detection, with its own ESPHome platform.
TMP117 Precision Temperature Sensor
Factory-calibrated to ±0.1°C from −20°C to +50°C with no probe, amplifier or reference resistor, if the breakout can sit where the temperature is.
DS18B20 Waterproof Temperature Probe
A sealed digital probe, ±0.5°C from −10°C to +85°C, when the RTD's precision is more than the job needs.