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

ESP8266仅一组I2C引脚连接MAX30102与MCP908的方案咨询

I2C多设备共享引脚解决方案(ESP8266+MAX30102+MCP908)

先搞懂核心逻辑:I2C本来就支持多设备共用引脚

I2C协议设计的初衷就是让多个设备共享一组SDA(数据)和SCL(时钟)引脚,核心是每个I2C设备都有唯一的设备地址。ESP8266通过这两根线发送地址指令时,只有匹配地址的传感器会响应并交互,其他传感器会自动忽略信号,所以你完全不需要额外引脚,直接把两个传感器的同类型引脚接在一起就行。

具体接线步骤

  • 把MAX30102的SDA引脚和MCP908的SDA引脚,都接到ESP8266 NodeMCU的SDA引脚(对应引脚D2)
  • 把MAX30102的SCL引脚和MCP908的SCL引脚,都接到ESP8266 NodeMCU的SCL引脚(对应引脚D1)
  • 两个传感器的VCC引脚都接ESP8266的3.3V(注意:两款传感器都是3.3V供电,绝对不能接5V)
  • 两个传感器的GND引脚都接ESP8266的GND

代码编写关键要点

  1. 确认设备地址(避免冲突)
    MAX30102默认地址为0x57,MCP908默认地址为0x48,两款地址不冲突,直接用就行。如果不确定,可先用I2C扫描代码验证:
#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(115200);
  while (!Serial);
  Serial.println("扫描I2C总线...");
  for (byte addr = 1; addr < 127; addr++) {
    Wire.beginTransmission(addr);
    byte error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("发现设备地址: 0x");
      if (addr < 16) Serial.print("0");
      Serial.println(addr, HEX);
    }
  }
  Serial.println("扫描完成");
}

void loop() {}

上传后打开串口监视器,就能看到两个传感器的地址,确认设备被识别。

  1. 多传感器数据读取代码框架
    只需初始化一次I2C总线,再分别初始化两个传感器,轮流读取数据即可:
#include <Wire.h>
#include <MAX30100_PulseOximeter.h>

PulseOximeter pox;

// 读取MCP908温度
float readMCP908() {
  Wire.beginTransmission(0x48);
  Wire.write(0x00); // 指定读取温度寄存器
  Wire.endTransmission(false);
  Wire.requestFrom(0x48, 2);
  byte msb = Wire.read();
  byte lsb = Wire.read();
  int16_t tempRaw = (msb << 8) | lsb;
  return tempRaw * 0.0625; // 转换为摄氏度
}

void setup() {
  Serial.begin(115200);
  Wire.begin(); // 初始化I2C总线,仅需调用一次

  // 初始化MAX30102
  if (!pox.begin()) {
    Serial.println("MAX30102初始化失败");
    while (1);
  }
  Serial.println("MAX30102初始化成功");
  pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
}

void loop() {
  // 读取心率与血氧
  pox.update();
  if (pox.getHeartRate() > 0) {
    Serial.print("心率: ");
    Serial.print(pox.getHeartRate());
    Serial.print(" BPM | 血氧: ");
    Serial.print(pox.getSpO2());
    Serial.println("%");
  }

  // 读取体温
  float temp = readMCP908();
  Serial.print("体温: ");
  Serial.print(temp);
  Serial.println(" °C");

  delay(1000);
}

常见问题排查

  • 如果传感器无响应,先检查接线是否牢固,尤其是GND和电源引脚
  • 若I2C通信失败,优先用扫描代码确认设备是否被识别,再检查电压是否稳定
  • MAX30102需要避免强光干扰,尽量放在遮光环境下测试

内容的提问来源于stack exchange,提问作者Lili Lili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:23:11