You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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库使用这个总线:

  1. 创建自定义的I2C实例:ESP32有两个I2C端口,我们用端口0来创建实例
  2. 在setup()中初始化这个自定义I2C,指定你的SDA/SCL引脚
  3. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 21:07:34