Volt Docs

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

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

PinConnect to
VCC3.3V ONLY — 5V damages the chip
GNDGround
SDAPull-up to 3.3V
SCLPull-up to 3.3V
INTInterrupt 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.