基于I2C的液晶屏(128*64),之前在uno上实现,用的是SSD1306的库,现在希望移植到ESP32上来,直接采用原来的SSD1306肯定不行,管脚定义不一样。
在auduino的库管理中搜索ESP32 LED,有一个已经实现的库,名字比较长。
里面有DEMO,选择第一个。
这个DEMO利用了时间函数库,可以方便计算时间。因此第一个库TimeLib.h很重要,但是编译的第一个错就是这个库。
https://github.com/PaulStoffregen/Time
在GIT上下载该库,放入arduino的库文件夹中。
第二个问题,I2C的管脚定义。
// Initialize the OLED display using SPI
// D5 -> CLK
// D7 -> MOSI (DOUT)
// D0 -> RES
// D2 -> DC
// D8 -> CS
// SSD1306Spi display(D0, D2, D8);
// or
// SH1106Spi display(D0, D2);
// Initialize the OLED display using brzo_i2c
// D3 -> SDA
// D5 -> SCL
// SSD1306Brzo display(0x3c, D3, D5);
由于SSD1306这个液晶屏有两种接口,SPI和I2C,我买的I2C,看ESP32管脚定义是
D21->SDA
D22->SCL
但是将代码中的D3和D5改为该管脚报未定义错误。
看了下ESP32的wire.h文件,发现没有以上定义,只有SDA和SCL。
所以改为
SSD1306Wire display(0x3c, SDA, SCL);
编译通过,上电后成功流水显示表盘时钟和数字时钟。