MAX30100 heart rate + SpO2 with ESP32

Supply 3.3-5 V Bus I2C I2C address 0x57 Measures heart rate, blood oxygen
VINSCLSDAINTIRDRDGND

Pins and ESP32 wiring

PinRoleESP32 pinNotes
VINPower3V3
SCLI2C clock (SCL)D22Many purple boards pull SCL up to 1.8 V only: the ESP32 may not read it
SDAI2C data (SDA)D21Many purple boards pull SDA up to 1.8 V only: the ESP32 may not read it
INTInterruptD35Interrupt output, optional
IRDNot wired to the ESP32—IR LED output. Leave unconnected
RDNot wired to the ESP32—Red LED output. Leave unconnected
GNDGroundGND

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 0xFF: a genuine part answers 0x11. 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(0x57);
  bool found = Wire.endTransmission() == 0;
  Serial.println(found ? "MAX30100 heart rate + SpO2 found at 0x57" : "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.