怎样测出I2C组件的总线地址

和爷爷一起学Arduino:怎样测出I2C组件的总线地址

I2C,Inter-Integrated Circuit,缩写也写作IIC。在Arduino里也叫TWI(Two-Wire Interface)。是菲利普(现在叫NXP)公司开发的一种通信协议。最初用在电视机中,以减少芯片之间的连线。Atmel搞了个TWI,Two-Wire Interface,两线接口。其实与I2C是一样的。ATmega328内置了TWI,Arduino UNO的模拟输入脚A4与A5兼作TWI的SDA与SCL引脚。Arduino的Wire库支持I2C通信。选菜单项“项目”|“加载库”|“Wire”,就装入了Wire库。

它是现在应用最广泛的嵌入式总线。使用I2C的组件有:8X8点阵HT16K33、16路PWM舵机驱动板、TM1637 六位数码管显示按键扫描模块、GP2Y0E03红外测距传感器模块、Sparkfun的加速度计与陀螺仪、DS1307 RTC时钟模块、LCD1602A(带I2C扩展小板)、HT16K33(8X8单色点阵LED)、SHT35温湿度传感器、GY-49 MAX44009光照度传感器、VL53L1X VL53L0X激光测距传感器等等。你进淘宝用关键字“I2C”或“IIC”搜索,就可以知道,带I2C总线的组件有多少了。现在,凡是需要高速传输的存储芯片之类,只能用SPI,其它多用I2C了。

I2C是一种总线,因此,挂在同一条I2C总线上的各个组件都必须有独一无二的地址,以确保无不冲突。地址范围是0~127(0~7FH)。主机的地址是0,最多允许带127个从机。即使你的Arduino只连接一个I2C组件,也需要知道这个组件的I2C地址,因为对I2C组件编程时需要知道它的总线地址。

#include <Wire.h>
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo板用来等待串口监视器
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  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");
 
  delay(5000);           // 等待5秒后进行下一次扫描
}

运行上述代码,就可以在串口监视器里读到被测组件的I2C总线地址。把它记下来,贴在组件上即可。

  • 0
    点赞
  • 5
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

beepbug

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值