Reference
MAX30100
Pulse oximeter and heart rate (16-bit).
- Connects over
- I²C
- Address
- 0x57
- Made by
- Maxim Integrated
- Datasheet
- datasheets.maximintegrated.com
Use it
hardware {
device max30100: MAX30100
}
every 1s {
let value: int = max30100.red()
log("max30100", "red={value}")
}
On its own, the declaration puts the MAX30100 on the first I²C bus (SDA 21, SCL 22 on the ESP32) at 0x57. To choose the pins or the address, declare the bus and attach the device: device max30100: MAX30100 on i2c0 at 0x57 with i2c i2c0(sda: 21, scl: 22).
Methods
-
max30100.red() -> int
Red LED raw value
-
max30100.ir() -> int
IR LED raw value
-
max30100.temperature() -> float
Die temperature °C
-
max30100.is_finger_present() -> int
1 if finger detected
Wiring
| Pin | Connect to |
|---|---|
VCC | 3.3V ONLY — 5V damages the chip |
GND | Ground |
SDA | Pull-up to 3.3V |
SCL | Pull-up to 3.3V |
INT | Interrupt when sample buffer reaches threshold |
Specifications
- Voltage
- 1.8V (digital) + 3.3V (LEDs) — most breakouts handle this internally
- Current
- 600 μA – 4 mA depending on LED brightness
- Modes
- Heart-rate + SpO₂
- Leds
- Red (660 nm) + IR (880 nm)
Tips
- Algorithm for SpO₂ / BPM is non-trivial — usually computed off-chip from raw samples.
- Skin contact matters: finger too loose = noisy, too tight = no perfusion.
- Many cheap modules ship with a wrong-value pull-up resistor — fix is documented online.
Alternatives worth knowing:
- MAX30102: Newer chip, same role, lower noise, smaller footprint.