打印
[技术问答]

如何读取I2C总线上未知器件的地址

[复制链接]
513|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinpian101|  楼主 | 2023-11-28 15:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何读取I2C总线上未知器件的地址?
如果不确定一个器件的地址是什么,怎么读取出来。

使用特权

评论回复
沙发
xinpian101|  楼主 | 2023-11-28 15:21 | 只看该作者
#include "Wire.h"

void setup() {
  Serial.begin(115200);
  Wire.begin();
}

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

  delay(5000);

  Serial.println("Scanning for I2C devices ...");
  for(address = 0x01; address < 0x7f; address++){
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0){
      Serial.printf("I2C device found at address 0x%02X\n", address);
      nDevices++;
    } else if(error != 2){
      Serial.printf("Error %d at address 0x%02X\n", error, address);
    }
  }
  if (nDevices == 0){
    Serial.println("No I2C devices found");
  }
}

使用特权

评论回复
板凳
xinpian101|  楼主 | 2023-11-28 15:21 | 只看该作者
这是Arduino里面的,不大懂,这个endTransmission是怎么知道有没有的。

使用特权

评论回复
地板
gejigeji521| | 2023-11-28 22:04 | 只看该作者
遍历所有地址,测试是否有应答信号。

使用特权

评论回复
5
gejigeji521| | 2023-11-28 22:04 | 只看该作者
由于7位地址的话,只有127个地址,所以遍历很容易实现。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

97

主题

1413

帖子

1

粉丝