IIC(Inter-Integrated Circuit)其实是IICBus(集成电路总线)简称,它是一种串行通信总线,使用多主从架构。
其一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。
I2C接口在Arduino的 Wire-library. 中被预先定义好:
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL),
屏幕尺寸约为0.96英寸,由SSD1306驱动,驱动接口I2C,I2C地址
(默认0x3c /有的为0x3d)。
不同型号的屏幕可能有不同的通信地址,为了确认自己的I2C地址,可通过以下程序进行查询(最好扫描一下,以防出错):
#include <Wire.h>
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop(){
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for (address = 1; address < 127; address++ ){
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the 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("Unknow 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); // wait 5 seconds for next scan
}
上传成功后在串口监视器可查看该屏幕的地址值
!!编程之前需要添加Adafruit_SSD1306和Adafruit_GFX这两个库文件
在arduino IDE菜单栏中项目——加载库——管理库 中搜索SSD1306,
选择Adafruit_SSD1306,可直接进行安装,此时会弹出一个提醒栏让你一起安装Adafruit_GFX,一步到位
而后即可在示例中找到对应屏幕的代码,打开上传即可看到动画效果