The received MAXREFDES117# Reference Design Board is small in size, which is good for making a wearable device. To test the module, I soldered 4 jumper wires with 4 male pin headers, to the MAXREFDES117 module as shown in the image below.

Then I used the solderless breadboard to connect the MAXREFDES117 module with the ESP3-C6 Super Mini board.


I used the Arduino IDE to upload code and test the kit. I used SparkFun_MAX3010x_Sensor_Librar library to write the code for the sensor. The following is the code for printing SPO2 and heart rate to the Serial Monitor. I got the sensor value very stable compared with the other MAX3010x sensors I used before.
#include <Wire.h>
#include "MAX30105.h"
#include "spo2_algorithm.h"
#define SDA_PIN 20
#define SCL_PIN 19
MAX30105 particleSensor;
// MAX30102 data buffers
#define BUFFER_SIZE 100
uint32_t irBuffer[BUFFER_SIZE];
uint32_t redBuffer[BUFFER_SIZE];
int32_t spo2;
int8_t validSPO2;
int32_t heartRate;
int8_t validHeartRate;
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("=================================");
Serial.println("ESP32-C6 MAX30102 SpO2 Monitor");
Serial.println("=================================");
// Initialize I2C
Wire.begin(SDA_PIN, SCL_PIN);
Serial.println("Initializing MAX30102...");
if (!particleSensor.begin(Wire, I2C_SPEED_FAST))
{
Serial.println("MAX30102 was not found.");
Serial.println("Check:");
Serial.println("1. Wiring");
Serial.println("2. Power supply");
Serial.println("3. SDA/SCL pins");
Serial.println("4. I2C address");
while (1);
}
Serial.println("MAX30102 detected!");
// Configure MAX30102
byte ledBrightness = 60;
byte sampleAverage = 4;
byte ledMode = 2; // Red + IR
int sampleRate = 100;
int pulseWidth = 411;
int adcRange = 4096;
particleSensor.setup(
ledBrightness,
sampleAverage,
ledMode,
sampleRate,
pulseWidth,
adcRange
);
// Set LED amplitudes
particleSensor.setPulseAmplitudeRed(0x3F);
particleSensor.setPulseAmplitudeIR(0x3F);
// Green LED is not needed
particleSensor.setPulseAmplitudeGreen(0);
Serial.println("Place your finger on the sensor.");
Serial.println();
}
void loop()
{
// --------------------------------------------------
// Collect 100 samples
// --------------------------------------------------
for (int i = 0; i < BUFFER_SIZE; i++)
{
while (particleSensor.available() == false)
{
particleSensor.check();
}
redBuffer[i] = particleSensor.getRed();
irBuffer[i] = particleSensor.getIR();
particleSensor.nextSample();
}
// --------------------------------------------------
// Calculate SpO2 and heart rate
// --------------------------------------------------
maxim_heart_rate_and_oxygen_saturation(
irBuffer,
BUFFER_SIZE,
redBuffer,
&spo2,
&validSPO2,
&heartRate,
&validHeartRate
);
// --------------------------------------------------
// Display result
// --------------------------------------------------
Serial.println("--------------------------------");
if (validHeartRate)
{
Serial.print("Heart Rate: ");
Serial.print(heartRate);
Serial.println(" BPM");
}
else
{
Serial.println("Heart Rate: Invalid");
}
if (validSPO2)
{
Serial.print("SpO2: ");
Serial.print(spo2);
Serial.println(" %");
}
else
{
Serial.println("SpO2: Invalid");
}
Serial.println("--------------------------------");
delay(500);
}
The following screenshot shows the sensor output in the Serial Monitor.

I modified the code to plot the heart rate and oxygen saturation in the Arduino Serial Plotter as shown below.
