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

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

I2C,Inter-Integrated Circuit,缩写也写作IIC。在Arduino里也叫TWI(Two-Wire Interface)。现在是应用最广泛的嵌入式总线。使用I2C的组件有:8X8点阵HT16K33、16路PWM舵机驱动板、TM1637 六位数码管显示按键扫描模块、GP2Y0E03红外测距传感器模块、Sparkfun的加速度计与陀螺仪、DS1307 RTC时钟模块、LCD1602A(带I2C扩展小板)、HT16K33(8X8单色点阵LED)、SHT35温湿度传感器、GY-49 MAX44009光照度传感器、VL53L1X VL53L0X激光测距传感器等等。你进淘宝用关键字“I2C”或“IIC”搜索,就可以知道,带I2C总线的组件有多少了。前面的“和爷爷一起学Arduino:玩LED点阵(HT16K33)1”一文,HT16K33就是使用I2C总线的。

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

#include 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo板用来等待串口监视器
  Serial.println("
I2C 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
");
  else
    Serial.println("done
");
 
  delay(5000);           // 等待5秒后进行下一次扫描
}

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

展开阅读全文

页面更新:2024-04-23

标签:总线   光照度   加速度计   组件   陀螺仪   舵机   地址   点阵   监视器   单色   串口   淘宝   缩写   传感器   模块   爷爷

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top