arduino多个i2c设备通信(怎样测出I2C组件的总线地址)(1)

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 <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总线地址。把它记下来,贴在组件上。

,