2026-02-01

实战:MAX30102心率血氧计

硬件连接

MAX30102 引脚ESP32 引脚芯片内部引脚 (GPIO)功能
VIN3V3GPIO 3V3电源
GNDGNDGPIO GND地线
SCLD22GPIO 22I2C 时钟
SDAD21GPIO 21I2C 数据

某些 MAX30102 模块可能有 INT(中断)引脚,暂时不需要连接它。

环境配置

  • 我使用的是 ESP32-DevKitC-32 开发板,USB驱动芯片是CH340C,可以搜索并安装 CH340C 驱动。
  • 安装库文件:在 Arduino IDE 中,点击左侧“库管理”图标,搜索并安装SparkFun MAX3010x Pulse and Proximity Sensor Library 库。
  • 工具 -> 端口 选择对应的 COM 口,可以在设备管理器中查看。
  • 工具 -> 开发板 选择 ESP32 Dev Module

简单的实现与设置

设置上传波特率为 115200,然后上传以下代码:

cpp32 lines
#include <Wire.h> #include "MAX30105.h" #include "spo2_algorithm.h" MAX30105 particleSensor;
#include <Wire.h>
#include "MAX30105.h"
#include "spo2_algorithm.h"

MAX30105 particleSensor;

void setup() {
  Serial.begin(115200);
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
    Serial.println("未找到传感器,请检查接线!");
    while (1);
  }
  particleSensor.setup(); // 使用默认配置
}

void loop() {
  // 这里简化处理,直接输出红光和红外光原始值供演示
  // 实际复杂的血氧计算建议使用库自带的 Example_10_SPO2 例子
  long irValue = particleSensor.getIR();
  long redValue = particleSensor.getRed();

  if (irValue < 50000) {
    Serial.println("请将手指放上传感器...");
  } else {
    // 输出格式:血氧,心率 (这里为模拟逻辑,实际需调用算法库)
    // 为了让你先看到效果,我们先观察原始数值波动
    Serial.print("IR:"); Serial.print(irValue);
    Serial.print(", RED:"); Serial.println(redValue);
  }
  delay(100);
}

在Arduino 自带的串口绘图器中将波特率设置为 115200,就可以查看波形了。

如果收到 4 DEADLINE_EXCEEDED (超时报错),通常是烧录(下载)过程中的通讯不畅。可以在看到 Connecting....... 出现后,立即按住板子上的 BOOT 键,强制连接,看到开始上传百分比(如 Writing at 0x00001000...)时,即可松开。

进阶