ESP32非默认I2C引脚连接MAX30100脉搏血氧传感器及数据读取方法与代码疑问
如何在ESP32非默认I2C引脚上使用MAX30100脉搏血氧传感器?
我来一步步帮你解决这些问题:
一、连接MAX30100到非默认引脚的方法
ESP32支持软件I2C,可以轻松指定任意GPIO作为SDA/SCL引脚。以你提到的32(SCL)、33(SDA)为例:
硬件连接
- MAX30100的
VCC→ ESP32的3.3V(注意:MAX30100不支持5V供电!) - MAX30100的
GND→ ESP32的GND - MAX30100的
SCL→ ESP32的32引脚 - MAX30100的
SDA→ ESP32的33引脚 - INT引脚如果不需要心跳中断功能,可以直接悬空,或者按你的需求连接到任意GPIO
代码修改步骤
你需要修改代码来初始化自定义I2C总线,并让MAX30100库使用这个总线:
- 创建自定义的I2C实例:ESP32有两个I2C端口,我们用端口0来创建实例
- 在
setup()中初始化这个自定义I2C,指定你的SDA/SCL引脚 - 修改
pox.begin(),传入自定义I2C的指针,让库使用这个总线
下面是修改后的完整代码:
#include <Wire.h> #include "MAX30100_PulseOximeter.h" #define BLYNK_PRINT Serial #include <Blynk.h> #include <WiFi.h> #include <BlynkSimpleEsp32.h> #define REPORTING_PERIOD_MS 1000 char auth[] = "*******************"; // 替换为你的Blynk Auth Token char ssid[] = "************"; // 替换为你的WiFi名称 char pass[] = "**********"; // 替换为你的WiFi密码 // 创建自定义I2C实例,使用I2C端口0 TwoWire customI2C = TwoWire(0); // Connections : SCL PIN - 32 , SDA PIN - 33 , INT PIN - 可悬空 PulseOximeter pox; float BPM, SpO2; uint32_t tsLastReport = 0; void onBeatDetected() { Serial.println("Beat Detected!"); } void setup() { Serial.begin(115200); pinMode(19, OUTPUT); Blynk.begin(auth, ssid, pass); // 初始化自定义I2C:第一个参数是SDA引脚,第二个是SCL引脚 customI2C.begin(33, 32); Serial.print("Initializing Pulse Oximeter.."); // 传入自定义I2C实例的指针,让库使用这个总线 if (!pox.begin(&customI2C)) { Serial.println("FAILED"); for(;;); } else { Serial.println("SUCCESS"); pox.setOnBeatDetectedCallback(onBeatDetected); } // 调整IR LED电流(可选) pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA); } void loop() { pox.update(); Blynk.run(); BPM = pox.getHeartRate(); SpO2 = pox.getSpO2(); if (millis() - tsLastReport > REPORTING_PERIOD_MS) { Serial.print("Heart rate:"); Serial.print(BPM); Serial.print(" bpm / SpO2:"); Serial.print(SpO2); Serial.println(" %"); Blynk.virtualWrite(V3, BPM); Blynk.virtualWrite(V4, SpO2); tsLastReport = millis(); } }
二、需要执行的操作指令
总结一下你需要做的事:
- 按照上面的硬件连接规则,把MAX30100和ESP32的对应引脚接好,务必确认VCC接的是3.3V
- 复制修改后的代码,替换掉代码中你的WiFi名称、密码以及Blynk Auth Token
- 将代码上传到ESP32开发板
- 打开串口监视器(波特率设为115200),如果看到"Initializing Pulse Oximeter..SUCCESS",说明传感器连接成功,接下来就能正常读取心率和血氧数据了
三、PulseOximeter pox;的含义
这行代码是创建了一个PulseOximeter类的实例,实例名字叫pox。
PulseOximeter是MAX30100_PulseOximeter库提供的核心类,它封装了所有和MAX30100传感器交互的逻辑:
- 初始化传感器(
pox.begin()) - 持续更新传感器采集的原始数据并计算心率、血氧(
pox.update()) - 获取计算好的心率和血氧值(
pox.getHeartRate()、pox.getSpO2()) - 设置LED电流、注册心跳检测回调函数等扩展功能
简单来说,这个pox实例就是你和MAX30100传感器沟通的"桥梁",所有对传感器的操作都要通过它来完成。
内容的提问来源于stack exchange,提问作者Ravi Kumar
相关产品推荐
相关产品推荐

