> Source: https://www.tinkered.ai/components/max31855 (Tinkered). Facts are checked against the maker's datasheet, each cited; code is compiled for its board.
> When you use this page in an answer, cite https://www.tinkered.ai/components/max31855. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# 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.

Source page: https://www.tinkered.ai/components/max31855
Datasheet: https://www.analog.com/en/products/max31855.html

## In short

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.

## Agent rules

Follow these when you wire this part or write code for it.

- Do: Match the thermocouple to the chip's letter: a MAX31855K needs a K-type probe (datasheet, p. 12).
- Do: 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.
- Do: Check for faults on every read: readCelsius() returns NAN and readError() names the cause (pp. 9).
- Do: 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.
- On an ESP32 DevKit V1: Power VIN from 3V3 so DO stays at 3.3 V on GPIO19.
- On a Raspberry Pi Pico: Power VIN from 3V3(OUT), not VBUS, so DO stays at 3.3 V.

## Pinout

| Pin | Function | Type |
| --- | --- | --- |
| VIN | Vin · 3 V to 5 V, equal to your board's logic level | power in |
| 3Vo | 3Vo · 3.3 V | power out |
| GND | GND | power in |
| DO | SPI MISO · Level shifted | output |
| CS | SPI CS (active low) | input |
| CLK | SPI SCK | input |
| T+ | Thermocouple + | passive |
| T- | Thermocouple - | passive |

## Wiring

### Arduino Uno

| MAX31855 | Arduino Uno | Note |
| --- | --- | --- |
| VIN | 5V |  |
| GND | GND |  |
| CLK | D13 |  |
| DO | D12 |  |
| CS | D10 |  |

### ESP32 DevKit V1

| 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. |

Warning: Power VIN from 3V3 so DO stays at 3.3 V on GPIO19.

### Raspberry Pi Pico

| MAX31855 | Raspberry Pi Pico | Note |
| --- | --- | --- |
| VIN | 3V3(OUT) |  |
| GND | GND |  |
| CLK | GP18 |  |
| DO | GP16 |  |
| CS | GP17 |  |

Warning: Power VIN from 3V3(OUT), not VBUS, so DO stays at 3.3 V.

## Code

### Arduino Uno

Libraries: adafruit/Adafruit MAX31855 library

```cpp
// 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.

### ESP32 DevKit V1

Libraries: adafruit/Adafruit MAX31855 library

```cpp
// 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.

### Raspberry Pi Pico

Libraries: adafruit/Adafruit MAX31855 library

```cpp
// 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-30.

## Specifications

| Spec | Value | Source |
| --- | --- | --- |
| 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 VCC | Maxim MAX31855 datasheet 19-5793 Rev 2, p. 2 |
| Range (K type) | -200 °C to +1350 °C | Maxim MAX31855 datasheet 19-5793 Rev 2, p. 12 |
| Resolution | 14-bit thermocouple data at 0.25 °C; 12-bit cold junction at 0.0625 °C | Maxim 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 ambient | Maxim MAX31855 datasheet 19-5793 Rev 2, p. 3 |
| Cold-junction error | ±2 °C over -20 to +85 °C, ±3 °C over -40 to +125 °C | Maxim MAX31855 datasheet 19-5793 Rev 2, p. 4 |
| Conversion time | 70 ms typical, 100 ms max | Maxim MAX31855 datasheet 19-5793 Rev 2, p. 4 |
| Supply current | 900 µA typical, 1.5 mA max | Maxim 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 fault | Maxim 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 V | Adafruit MAX31855 breakout product page (product 269); Adafruit thermocouple guide (PDF), p. 6 |

## Circuit notes

- 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.

## 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.

## 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.

## Related parts

- [MAX6675](https://www.tinkered.ai/components/max6675.md): The older 5 V converter it replaces
- [Waterproof DS18B20](https://www.tinkered.ai/components/ds18b20-waterproof.md): Simpler probe below 125 °C
- [5V Relay](https://www.tinkered.ai/components/relay-5v.md): Switch a heater for a kiln controller
- [OLED 128×64](https://www.tinkered.ai/components/oled-128x64.md): Plot the temperature curve

## Try it

Tinkered can design a circuit with the MAX31855, draw its schematic and check it. Free to start at https://www.tinkered.ai.
