Getting Started

Getting Started with the ProtoCentral Pulse Express (MAX30102 + MAX32664D)

Last updated May 9, 2026

Getting Started with the ProtoCentral Pulse Express (MAX30102 + MAX32664D)

Introduction

The ProtoCentral Pulse Express is an all-in-one fingertip pulse-oximetry breakout that gives you SpO2, heart rate and blood-pressure-trending (BPT) outputs without writing any DSP code. The board pairs Maxim’s MAX30102 PPG sensor (RED + IR LEDs and a photodiode in one tiny package) with the MAX32664D biometric sensor hub IC — a small Cortex-M4 microcontroller pre-loaded with Maxim’s optical biometric algorithms. Your host MCU just talks I2C to the MAX32664D and reads back computed values; the algorithms run on the hub itself.

This is a reflective pulse-oximetry sensor, so unlike the AFE4490 there’s no DB9 finger-clip probe — the LEDs and photodiode sit on the board itself, and you place your fingertip directly on the on-board sensor area. The board is small enough (35 mm × 17 mm) and low-power enough to design into wearables, and a footprint for an optional motion-tracking IMU is provided on the underside for projects that need accelerometer-based motion-artefact compensation.

Note: This board is intended for research and development purposes only. It is not FDA, CE, or FCC approved for consumer or medical use. The BPT estimation feature is a trend indicator, not a clinical blood-pressure measurement.

Key Features

  • MAX30102 high-sensitivity PPG sensor — RED + IR LEDs and photodiode in a single 5.6 mm × 3.3 mm package
  • MAX32664D biometric sensor hub — Maxim’s pre-baked algorithms for SpO2, heart rate and BPT run on-chip
  • No host-side DSP required — your MCU just reads the computed metrics over I2C
  • Three modes: raw PPG streaming · algorithm mode (HR + SpO2) · BPT estimation mode
  • Optional on-board IMU footprint — for motion-artefact compensation (populated as needed)
  • Easy-to-use I2C interface — works with Arduino, ESP32, RP2040, and any modern MCU
  • Ultra-low power — suitable for battery-powered wearables
  • Compact footprint — 35 mm × 17 mm

What’s in the Box

  • 1× ProtoCentral Pulse Express breakout board

You will also need an Arduino Uno (or compatible board), a USB cable, and 6 jumper wires.

Specifications

Parameter Value
PPG Sensor Maxim MAX30102 (RED + IR LEDs + integrated photodiode)
Sensor Hub Maxim MAX32664D (Cortex-M4 with biometric algorithms)
Outputs Heart rate (BPM) · SpO2 (%) · BPT (systolic / diastolic trend, mmHg)
Modes Raw PPG streaming · Algorithm (HR + SpO2) · BPT calibration + estimation
Interface I2C (4-pin) + 2 GPIOs (MFIO + RESET for boot-mode handshake)
I2C Address 0x55 (MAX32664D 7-bit address)
Logic Levels 5 V tolerant (on-board level translator)
Supply Voltage 3.3 V or 5 V (on-board regulators)
Optional IMU Footprint for an accelerometer (motion-artefact compensation)
Dimensions 35 mm × 17 mm

Pin Connections

Wiring Diagram

Pulse Express to Arduino Uno wiring diagram

Pulse Express to Arduino Uno

Pulse Express Pin Arduino Uno Pin Function
SDA A4 (or dedicated SDA) I2C data
SCL A5 (or dedicated SCL) I2C clock
MFIO D5 Multi-function I/O — used for boot-mode handshake
RESET D4 Active-low reset — toggled by the library at startup
VIN 5 V Power
GND GND Ground

Pulse Express to ESP32

Pulse Express Pin ESP32 Pin Function
SDA GPIO 21 (default I2C0 SDA) I2C data
SCL GPIO 22 (default I2C0 SCL) I2C clock
MFIO GPIO 16 Multi-function I/O
RESET GPIO 17 Active-low reset
VIN 3.3 V or 5 V Power
GND GND Ground

Tip: The MFIO + RESET pins are part of the MAX32664D’s boot sequence. The ProtoCentral library toggles them at startup to put the hub into application mode, so don’t repurpose those pins for anything else while the sensor is in use.

Finger Placement

Pulse Express uses reflective pulse oximetry — the LEDs and photodiode are both on the same side of the board and rely on light scattering back from blood inside the fingerpad. Placement is much simpler than a clip-on probe: just rest a fingertip directly on the sensor area.

Pulse Express finger-on-sensor placement

Step Action
1 Locate the small black package on the top of the PCB labelled MAX30102 — that’s the sensor area
2 Rest your index or middle finger pad (the soft underside of the fingertip) gently on top of the sensor
3 The fingernail should be facing up, away from the board
4 Apply light, constant pressure — just enough to fully cover the LEDs and photodiode; pressing too hard cuts off blood flow and flattens the signal
5 Hold still for 5 – 10 seconds while the algorithm locks on

Tip for clean signals: Cold fingers, nail polish on the underside, thick calluses, and motion all degrade the PPG signal. Use a warm bare finger and stay still during measurement. The MAX32664D needs a few seconds of clean data before its HR / SpO2 / BPT outputs settle.

Installing the Arduino Library

Option 1: Arduino Library Manager (Recommended)

  1. Open the Arduino IDE
  2. Go to Sketch → Include Library → Manage Libraries…
  3. Search for “Protocentral Pulse Express”
  4. Find “Protocentral Pulse Express SpO2 Heartrate and BPT sensor” and click Install

Option 2: Manual Install from GitHub

  1. Go to github.com/Protocentral/protocentral-pulse-express
  2. Click Code → Download ZIP
  3. In the Arduino IDE, go to Sketch → Include Library → Add .ZIP Library…
  4. Select the downloaded ZIP file

Your First PPG Reading (Raw Mode)

Open the example sketch: File → Examples → Protocentral Pulse Express → raw_mode

This sketch streams the raw RED and IR PPG samples directly from the MAX30102 — useful for verifying your finger placement and the signal-to-noise ratio:

#include <Wire.h>
#include "protocentral_pulse_express.h"

#define MFIO_PIN  5
#define RESET_PIN 4

PulseExpress pulseExpress(MFIO_PIN, RESET_PIN);

void setup() {
    Serial.begin(115200);
    Wire.begin();

    if (!pulseExpress.begin()) {
        Serial.println("Pulse Express not found — check wiring");
        while (1);
    }

    pulseExpress.beginRawMode();
}

void loop() {
    if (pulseExpress.readSample()) {
        // Two columns for the Arduino Serial Plotter
        Serial.print(pulseExpress.red);
        Serial.print(',');
        Serial.println(pulseExpress.ir);
    }
}

What This Code Does

  1. Includes the libraries — Wire.h for I2C, protocentral_pulse_express.h for the sensor
  2. Creates the Pulse Express object — bound to MFIO (D5) and RESET (D4)
  3. Initialises the chip — begin() runs the MFIO/RESET boot-mode handshake to put the MAX32664D into application mode
  4. Configures raw mode — beginRawMode() enables direct PPG streaming from the MAX30102
  5. Reads samples — readSample() pulls one new sample pair; red and ir are 18-bit unsigned integers
  6. Prints two columns — the Arduino Serial Plotter at 115200 baud displays them as two traces

Using the Arduino Serial Plotter

  1. Upload the sketch to your Arduino
  2. Place your fingerpad on the on-board MAX30102 sensor area
  3. Open Tools → Serial Plotter at 115200 baud
  4. You should see two pulsatile waveforms — IR is typically larger, both rise and fall with each heartbeat

Algorithm Mode (Heart Rate + SpO2)

Open the example sketch: File → Examples → Protocentral Pulse Express → algorithm_mode

In algorithm mode, the MAX32664D outputs already-computed HR and SpO2:

#include <Wire.h>
#include "protocentral_pulse_express.h"

#define MFIO_PIN  5
#define RESET_PIN 4

PulseExpress pulseExpress(MFIO_PIN, RESET_PIN);

void setup() {
    Serial.begin(115200);
    Wire.begin();
    pulseExpress.begin();
    pulseExpress.beginAlgorithmMode();
}

void loop() {
    if (pulseExpress.readAlgorithm()) {
        Serial.print("HR: ");
        Serial.print(pulseExpress.heartRate);
        Serial.print(" BPM    SpO2: ");
        Serial.print(pulseExpress.spo2);
        Serial.print(" %    Confidence: ");
        Serial.println(pulseExpress.confidence);
    }
}

The confidence value (0 – 100) tells you how trustworthy each reading is — discard or de-weight low-confidence samples in your application.

BPT Estimation Mode

Blood-pressure trending (BPT) requires a one-time calibration against a reference cuff measurement. After calibration, the MAX32664D estimates systolic and diastolic blood pressure from the PPG morphology alone.

Open the example sketch: File → Examples → Protocentral Pulse Express → bpt_mode

  1. Update the calibration variables at the top of the sketch with your typical SpO2 reading and a recent reference systolic/diastolic from a clinical cuff
  2. Upload the sketch to your Arduino
  3. Open the Serial Monitor at 115200 baud
  4. Place your finger on the sensor and hold still until the calibration progress reaches 100 %
  5. Wait ~10 seconds for the algorithm to settle, then read off systolic / diastolic estimates

Important: BPT is a trend indicator. It tracks changes from your calibrated baseline; absolute values are only as reliable as the calibration cuff measurement and degrade over time as physiology changes. Re-calibrate periodically (and ideally before each session) for meaningful numbers.

Visualizing with OpenView

For a richer visualisation that shows the raw PPG traces alongside computed HR / SpO2 / BPT, use the ProtoCentral OpenView application:

  1. Install OpenView 2 — see the setup guide for downloads + first run on Windows / Linux / iOS / Android
  2. Upload the OpenView example sketch from the library examples
  3. Open OpenView 2, select “Pulse Express” from the Board dropdown
  4. Select the correct serial port and click Start
  5. You’ll see live PPG waveforms with running HR / SpO2 readouts (and BPT after calibration)

Troubleshooting

Sensor not found at startup

  • Check SDA/SCL wiring — on Arduino Uno, SDA is on A4 and SCL is on A5
  • Verify MFIO and RESET match the constructor pins (default D5 / D4)
  • Confirm power: VIN to 5 V (or 3.3 V on a 3.3 V host), solid GND
  • Run an I2C scanner sketch to confirm the MAX32664D responds at 0x55

Flat / very noisy PPG signal

  • Cold fingers reduce blood flow at the fingertip — warm your hand for ~30 seconds before testing
  • Remove nail polish (especially on the underside of the finger near the cuticle) — it can absorb LED light through the fingerpad
  • Apply only light, constant pressure — pressing hard cuts off blood flow and flattens the waveform
  • Keep the finger still during measurement

HR / SpO2 reads strange values or “0”

  • The algorithm needs ~5 seconds of clean PPG data to lock on
  • Check the confidence value — discard or ignore samples below ~70 %
  • Verify the raw RED + IR traces look pulsatile in raw mode before relying on algorithm-mode numbers
  • Make sure both LEDs and the photodiode are fully covered by the fingertip

BPT estimation drifts or jumps

  • BPT is calibrated against your reference cuff measurement; if the calibration was poor, every estimate inherits that error
  • Re-calibrate at the start of each session for best results
  • BPT is not a substitute for a clinical cuff — treat it as a trend indicator, not an absolute number

Library compile errors / boot handshake fails

  • Ensure the MFIO and RESET pins in the constructor match your physical wiring — the library toggles them in a specific sequence at startup
  • Try a slower SPI / I2C clock speed if you’re using long jumper wires
  • Power-cycle the breakout to retry the boot handshake

Resources

Licenses

  • Hardware: CERN Open Hardware Licence v2 — Permissive (CERN-OHL-P v2)
  • Software: MIT License