ESP32-S3快速查找I2C模块地址的例子
目录
如果您想轻松I2C地址上所有模块的地址,这篇简单的实现例子应该帮到你
之前介绍了使用Arduino Uno、ESP32的方法
http://47.119.142.156/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为例子接线:
程序代码
#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模块地址。