2026-02-01
实战: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,然后上传以下代码:
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...)时,即可松开。