实战:MAX30102心率血氧计

硬件连接

MAX30102 引脚 ESP32 引脚 芯片内部引脚 (GPIO) 功能
VIN 3V3 GPIO 3V3 电源
GND GND GPIO GND 地线
SCL D22 GPIO 22 I2C 时钟
SDA D21 GPIO 21 I2C 数据

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

环境配置

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

简单的实现与设置

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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...)时,即可松开。

进阶