MAX31855
A K-type thermocouple amplifier breakout with cold-junction compensation that reports -200 °C to +1350 °C in 0.25 °C steps over read-only SPI, with open and short fault detection.
- Chip supply3.0 V to 3.6 V (3.3 V typical)
- Absolute maximum-0.3 V to 4.0 V on VCC
- Range (K type)-200 °C to +1350 °C
- Resolution14-bit thermocouple data at 0.25 °C; 12-bit cold junction at 0.0625 °C

The MAX31855K turns a K-type thermocouple into a 14-bit, 0.25 °C reading over read-only SPI, accurate to ±2 °C from -200 °C to +700 °C, with flags for an open probe or a probe shorted to GND or VCC (Maxim MAX31855 datasheet Rev 2, pp. 1, 3, 9). The chip is a 3.0 V to 3.6 V part (p. 2); the Adafruit breakout adds a 3.3 V regulator and level shifting, so VIN takes 3 V to 5 V. Wire CLK, CS and DO; a conversion takes 100 ms at most (p. 4).
The MAX31855 is Maxim's successor to the MAX6675. It measures a thermocouple's tiny voltage, measures its own die as the cold junction, and outputs the compensated temperature as a signed 14-bit number in 0.25 °C steps, plus the die temperature in 0.0625 °C steps (Maxim datasheet Rev 2, pp. 1, 4). The K version covers -200 °C to +1350 °C (p. 12); J, N, T, S, R and E versions exist for other thermocouple types.
Its fault detection is the practical upgrade: bit D0 flags an open thermocouple, D1 a short to GND and D2 a short to VCC, and D16 is set whenever any of them is (p. 9). Because the chip checks for shorts to ground, T- must not be connected to GND (p. 7), and grounded-tip probes will not work.
The bare chip runs from 3.0 V to 3.6 V and is rated 4.0 V absolute maximum (p. 2). The Adafruit breakout carries a 3.3 V regulator with 10 µF bypass capacitors and level shifting (Adafruit product page), so it wires straight to an Uno or to a 3.3 V board.
MAX31855 pinout
| Pin | Function | Type |
|---|---|---|
| VIN | Vin3 V to 5 V, equal to your board's logic level | power in |
| 3Vo | 3Vo3.3 V | power out |
| GND | GND | power in |
| DO | SPI MISOLevel shifted | output |
| CS | SPI CS (active low) | input |
| CLK | SPI SCK | input |
| T+ | Thermocouple + | passive |
| T- | Thermocouple - | passive |
How to wire the MAX31855
Pin by pin, for the board you have.
| MAX31855 | Arduino Uno | Note |
|---|---|---|
| VIN | 5V | |
| GND | GND | |
| CLK | D13 | |
| DO | D12 | |
| CS | D10 |
| MAX31855 | ESP32 DevKit V1 | Note |
|---|---|---|
| VIN | 3V3 | |
| GND | GND | |
| CLK | GPIO18 (D18) | |
| DO | GPIO19 (D19) | |
| CS | GPIO5 (D5) | VSPI's default CS. GPIO5 is a strapping pin that must be high at boot; CS idles high, so boot is unaffected. |
- Power VIN from 3V3 so DO stays at 3.3 V on GPIO19.
| MAX31855 | Raspberry Pi Pico | Note |
|---|---|---|
| VIN | 3V3(OUT) | |
| GND | GND | |
| CLK | GP18 | |
| DO | GP16 | |
| CS | GP17 |
- Power VIN from 3V3(OUT), not VBUS, so DO stays at 3.3 V.
MAX31855 code
Every example here compiles for its board.
// MAX31855 on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/max31855
// MAX31855 on an Arduino Uno: VIN 5V, CLK D13, DO D12, CS D10 (hardware SPI)
#include <SPI.h>
#include <Adafruit_MAX31855.h>
const int PIN_CS = 10;
Adafruit_MAX31855 thermocouple(PIN_CS); // hardware SPI: CLK and DO on the board's SPI pins
void setup() {
Serial.begin(115200);
delay(500); // first conversion takes up to 100 ms
if (!thermocouple.begin()) {
Serial.println("MAX31855 did not start. Check wiring.");
while (true) delay(10);
}
Serial.println("MAX31855 ready");
}
void loop() {
double internalC = thermocouple.readInternal();
double tempC = thermocouple.readCelsius();
Serial.print("Board (cold junction): ");
Serial.print(internalC, 2);
Serial.print(" C ");
if (isnan(tempC)) {
uint8_t e = thermocouple.readError();
Serial.print("Fault:");
if (e & MAX31855_FAULT_OPEN) Serial.print(" thermocouple open");
if (e & MAX31855_FAULT_SHORT_GND) Serial.print(" shorted to GND");
if (e & MAX31855_FAULT_SHORT_VCC) Serial.print(" shorted to VCC");
Serial.println();
} else {
Serial.print("Thermocouple: ");
Serial.print(tempC, 2);
Serial.println(" C");
}
delay(1000);
}
Compiled for arduino:avr:uno on 2026-10-30// MAX31855 on ESP32 DevKit V1: wiring and a free simulation at https://www.tinkered.ai/components/max31855
// MAX31855 on an ESP32 DevKit V1: VIN 3V3, CLK GPIO18, DO GPIO19, CS GPIO5 (VSPI)
#include <SPI.h>
#include <Adafruit_MAX31855.h>
const int PIN_CS = 5;
Adafruit_MAX31855 thermocouple(PIN_CS); // hardware SPI: CLK and DO on the board's SPI pins
void setup() {
Serial.begin(115200);
delay(500); // first conversion takes up to 100 ms
if (!thermocouple.begin()) {
Serial.println("MAX31855 did not start. Check wiring.");
while (true) delay(10);
}
Serial.println("MAX31855 ready");
}
void loop() {
double internalC = thermocouple.readInternal();
double tempC = thermocouple.readCelsius();
Serial.print("Board (cold junction): ");
Serial.print(internalC, 2);
Serial.print(" C ");
if (isnan(tempC)) {
uint8_t e = thermocouple.readError();
Serial.print("Fault:");
if (e & MAX31855_FAULT_OPEN) Serial.print(" thermocouple open");
if (e & MAX31855_FAULT_SHORT_GND) Serial.print(" shorted to GND");
if (e & MAX31855_FAULT_SHORT_VCC) Serial.print(" shorted to VCC");
Serial.println();
} else {
Serial.print("Thermocouple: ");
Serial.print(tempC, 2);
Serial.println(" C");
}
delay(1000);
}
Compiled for esp32:esp32:esp32 on 2026-10-30// MAX31855 on Raspberry Pi Pico: wiring and a free simulation at https://www.tinkered.ai/components/max31855
// MAX31855 on a Raspberry Pi Pico (arduino-pico): VIN 3V3(OUT), CLK GP18, DO GP16, CS GP17 (SPI0)
#include <SPI.h>
#include <Adafruit_MAX31855.h>
const int PIN_CS = 17;
Adafruit_MAX31855 thermocouple(PIN_CS); // hardware SPI: CLK and DO on the board's SPI pins
void setup() {
Serial.begin(115200);
delay(500); // first conversion takes up to 100 ms
if (!thermocouple.begin()) {
Serial.println("MAX31855 did not start. Check wiring.");
while (true) delay(10);
}
Serial.println("MAX31855 ready");
}
void loop() {
double internalC = thermocouple.readInternal();
double tempC = thermocouple.readCelsius();
Serial.print("Board (cold junction): ");
Serial.print(internalC, 2);
Serial.print(" C ");
if (isnan(tempC)) {
uint8_t e = thermocouple.readError();
Serial.print("Fault:");
if (e & MAX31855_FAULT_OPEN) Serial.print(" thermocouple open");
if (e & MAX31855_FAULT_SHORT_GND) Serial.print(" shorted to GND");
if (e & MAX31855_FAULT_SHORT_VCC) Serial.print(" shorted to VCC");
Serial.println();
} else {
Serial.print("Thermocouple: ");
Serial.print(tempC, 2);
Serial.println(" C");
}
delay(1000);
}
Compiled for rp2040:rp2040:rpipico on 2026-10-30Before you wire it
- Match the thermocouple to the chip's letter: a MAX31855K needs a K-type probe (datasheet, p. 12).
- Use an ungrounded (insulated) probe and keep T- off ground (p. 7); a probe touching a grounded part reads as a short-to-GND fault.
- Check for faults on every read: readCelsius() returns NAN and readError() names the cause (pp. 9).
- Read no faster than one conversion per 100 ms (p. 4).
- Never put more than 3.6 V on a bare MAX31855 board without a regulator; 4.0 V is its absolute maximum (p. 2).
- Never splice the probe with copper wire; use thermocouple extension wire of the same type.
- Never mount the board on or next to a heat source: it uses its own die temperature as the cold junction.
- The 32-bit frame holds the 14-bit thermocouple temperature, the fault bit D16, the 12-bit internal temperature and the three fault bits D2 to D0 (datasheet, p. 9).
- Several MAX31855 boards can share CLK and DO, each with its own CS.
- In noisy environments, Adafruit suggests a 0.01 µF capacitor across the thermocouple leads (thermocouple guide, p. 7).
- The chip assumes a linear thermocouple; at extreme temperatures you can apply the NIST polynomial to the raw voltage for extra accuracy (datasheet, p. 8).
- SPI here is read-only: there is no MOSI pin, so DO is the only data line.
Specifications
- Chip supply
- 3.0 V to 3.6 V (3.3 V typical)Maxim MAX31855 datasheet 19-5793 Rev 2, p. 2
- Absolute maximum
- -0.3 V to 4.0 V on VCCMaxim MAX31855 datasheet 19-5793 Rev 2, p. 2
- Range (K type)
- -200 °C to +1350 °CMaxim MAX31855 datasheet 19-5793 Rev 2, p. 12
- Resolution
- 14-bit thermocouple data at 0.25 °C; 12-bit cold junction at 0.0625 °CMaxim MAX31855 datasheet 19-5793 Rev 2, p. 4
- Accuracy (MAX31855K)
- ±2 °C from -200 to +700 °C and ±4 °C from +700 to +1350 °C, at -20 to +85 °C ambientMaxim MAX31855 datasheet 19-5793 Rev 2, p. 3
- Cold-junction error
- ±2 °C over -20 to +85 °C, ±3 °C over -40 to +125 °CMaxim MAX31855 datasheet 19-5793 Rev 2, p. 4
- Conversion time
- 70 ms typical, 100 ms maxMaxim MAX31855 datasheet 19-5793 Rev 2, p. 4
- Supply current
- 900 µA typical, 1.5 mA maxMaxim MAX31855 datasheet 19-5793 Rev 2, p. 2
- Interface and faults
- Read-only SPI up to 5 MHz; D0 open, D1 short to GND, D2 short to VCC, D16 any faultMaxim MAX31855 datasheet 19-5793 Rev 2, pp. 4, 9
- Breakout
- 3.3 V regulator with 10 µF bypass and level shifting; VIN 3 V to 5 VAdafruit MAX31855 breakout product page (product 269); Adafruit thermocouple guide (PDF), p. 6
From the MAX31855 product page and datasheet, published by Analog Devices (Maxim Integrated).
Common mistakes
Probe shows 'short to GND' on a metal fixture
Many cheap probes have a grounded tip, or the sheath touches a grounded pipe or oven chassis. The MAX31855 sees that as a fault (bit D1). Use an ungrounded probe or insulate the sheath.
Readings off by a fixed amount
Wrong thermocouple type gives the wrong slope; swapped leads read the wrong way. Check the probe is K-type for a MAX31855K and that the yellow (chromel) lead goes to +.
Board warm, reading high
The cold-junction reference is the chip itself. A breakout mounted on a hot enclosure wall shifts the result; readInternal() shows what the chip thinks the cold end is.
Feeding a bare chip 5 V
Unlike the MAX6675, the MAX31855 is a 3.3 V part with a 4.0 V absolute maximum (p. 2). Only breakouts with a regulator, like Adafruit's, accept 5 V.
MAX31855 questions
MAX31855 or MAX6675?
The MAX31855 reads below zero (-200 °C for the K version), has 14-bit data and reports open and shorted probes separately (datasheet, pp. 9, 12). The MAX6675 runs at 5 V and reads only 0 to 1024 °C. For new builds, pick the MAX31855.
Is the MAX31855 5 V compatible?
The chip is not: 3.0 V to 3.6 V, 4.0 V absolute maximum (p. 2). The Adafruit breakout has a 3.3 V regulator and level shifting, so it works from 3 V to 5 V and with 5 V logic.
Why do I get NAN?
A fault bit is set. readError() tells you which: 0x01 open thermocouple, 0x02 short to GND, 0x04 short to VCC. Check the terminal screws and that the probe is not grounded.
How accurate is the MAX31855K?
±2 °C from -200 °C to +700 °C and ±4 °C up to +1350 °C at -20 to +85 °C ambient (p. 3), plus the probe's own tolerance.
Can I use a J-type thermocouple with it?
Not with the K version: the conversion assumes the K slope of 41.276 µV/°C (p. 3). Buy the matching variant, such as the MAX31855J for J-type.
Build something with the MAX31855
- Build this
Kiln controller
Ramp and hold a kiln on a schedule through a solid state relay.
- Build this
Espresso boiler monitor
Show boiler temperature and warn on a probe fault.
- Build this
Freezer to oven logger
Log -40 °C to 300 °C with one probe.
This page as plain Markdown, for ChatGPT, Claude or your own agent. /components/max31855.md