MCP9808 precision temperature with ESP32

Supply 3.3-5 V Bus I2C I2C address 0x18 / 0x19 / 0x1A / 0x1B / 0x1C / 0x1D / 0x1E / 0x1F Measures temperature
VDDGNDSCLSDAALERTA2A1A0

Pins and ESP32 wiring

PinRoleESP32 pinNotes
VDDPower3V3
GNDGroundGND
SCLI2C clock (SCL)D22
SDAI2C data (SDA)D21
ALERTInterruptD35Alert output (open drain), optional
A2Not wired to the ESP32—Address bit 2. Pulled LOW on the board
A1Not wired to the ESP32—Address bit 1. Pulled LOW on the board
A0Not wired to the ESP32—Address bit 0. Pulled LOW on the board (0x18)

Suggested wiring for the 30-pin ESP32 DevKit, avoiding flash, input-only and strapping pins. BoardPilot checks it for you as you wire.

Check it is the real chip

Read register 0x07: a genuine part answers 0x04. BoardPilot does this automatically in “Debug a problem”.

Starter code (Arduino)

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);  // SDA = GPIO 21, SCL = GPIO 22
  Wire.beginTransmission(0x18);
  bool found = Wire.endTransmission() == 0;
  Serial.println(found ? "MCP9808 precision temperature found at 0x18" : "Not found: check power, GND and SDA/SCL");
}

void loop() {}

Sources

Try it in 3D in BoardPilot

BoardPilot Part data (JSON)

Related parts

Part data: CC BY 4.0, free to reuse with credit to BoardPilot.