ESP32-S3快速查找I2C模块地址的例子

如果您想轻松I2C地址上所有模块的地址,这篇简单的实现例子应该帮到你

之前介绍了使用Arduino Uno、ESP32的方法

https://lingshunlab.com/book/arduino/arduino-esp32-scan-iic-device-address

而这次,介绍最新的ESP32S3开发板如何快速查找I2C地址的方法。

接线

首先,让我们开始连接I2C的模块,例如接线如下:

  • VCC接 5V
  • GND接 GND
  • SDA接 PIN 3
  • SCL接 PIN 4

这里的pin3 ,pin4 你是可以自己定义的,例如你可以使用pin8,pin9如此类推

以下图片是以功率模块INA226为例子接线:

j4k5hk3jh4

程序代码

#include <Wire.h>

void setup() {
  // 初始化I2C通讯,指定SDA和SCL的端口号
  Wire.begin(3,4); 
  // 开始串行通信
  Serial.begin(115200);
  Serial.println("\nI2C Scanner");
}

void loop() {
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");
  nDevices = 0;

  // 遍历所有可能的I2C地址
  for (address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address); // 开始向该地址发送
    error = Wire.endTransmission(); // 结束传输并获取结果

    // 没有错误,意味着找到了设备
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) Serial.print("0");
      Serial.print(address, HEX);
      Serial.println(" !");
      nDevices++;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
    }
  }

  // 总结扫描结果
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  // 间隔5秒进行下一次扫描
  delay(5000);
}

程序通过Arduino IDE 上传到ESP32S3的开发板上,打开串口监视器,就可以看到相对应找到的I2C模块地址。