【NodeMCU-ESP8266】使用Afafruit_ssd1306点亮0.96英寸OLED屏(4P,I2C)避坑经验分享
一、硬件清单
1、NodeMCU 1.0 开发板1块
2、0.96寸128*64分辨率OLED,4PIN,I2C接口,SSD1306驱动芯片
3、400孔面包板1块
4、杜邦线若干
二、安装第三方库
1、Adafruit_SSD1306库
(1)这是一个基于SSD1306驱动芯片的单色OLED第三方库,主要用于单色的分辨率为128×64 and 128×32 OLED屏幕。
(2)支持SPI和I2C协议,适用于2~5个引脚的接口。
(3)安装方法。首选Arduino IDE库管理器。其次,可以点击Github官方下载链接,请单击页面“克隆或下载”,然后单击“下载ZIP”。解压缩后,将生成的文件夹重命名为Adafuit_SSD1306。检查Adafruit_SSD1306文件夹是否包含Adafruit _SSD1306.cpp和Adafruits _SSD1306.h。最后,提供百度网盘下载链接, 提取码:nrhb。
(4)需要同时安装父类库Adafuit GFX,该库提供线条、圆圈、文本等图形元素。
2、Adafruit-GFX-Library-1.11.9库
(1)这是Afafruit所有显示器的核心图形库,提供了一组通用的图形基元(点、线、圆等)。它需要与对应显示设备的硬件专用库配对(以处理较低级别的功能)。
(2)安装方法。首选Arduino IDE库管理器。其次,可以点击Github官方下载链接,请单击download ZIP按钮,解压缩并重命名未压缩的文件夹Adafuit_GFX。确认Adafruit_GFX文件夹包含Adafruit _GFX.cpp和Adafrupt_GFX.h。将Adafrupt _GFX库文件夹放在您的ArduinoSketchFolder/Libraries/文件夹中。最后,提供百度网盘下载链接, 提取码:lvj8。
3、Adafruit BusIO库
(1)用于I2C和SPI通信协议抽象的Arduino库。
(2)安装方法。首选Arduino IDE库管理器,在库管理器中搜索“Adafuit BusIO”直接安装。 其次,可以点击Github官方下载链接。最后,提供百度网盘下载链接, 提取码:kexu。
4、NTPClient库
(1)用于连接到一个NTP服务器。
(2)安装方法。首选Arduino IDE库管理器,在库管理器中搜索“NTPClient”直接安装。 其次,可以从Github官方链接直接下载。最后,提供百度网盘下载链接, 提取码:91mn。
三、开发板与OLED屏引脚连接对应关系
NodeMCU开发板 | 0.96寸OLED |
GND | GND |
3V3 | VCC |
SCL | D1 (GPIO5) |
SDA | D2 (GPIO4) |
四、使用官方示例,点亮OLED屏幕
1、按照下图所示,开启官方示例程序。
2、将程序中高亮部分第35行(行号可能会不同):#define SCREEN_ADDRESS 0x3D,改写成:#define SCREEN_ADDRESS 0x3C。 如果不改写,屏幕可能无法如期点亮。
3、点亮屏幕视频演示
ssd1306_12684_I2C演示视频
五、关于改写屏幕地址的特别提醒和说明——避坑经验分享
使用I2C接口时,SSD1306允许有最多两个7位的I2C地址, 同样通过相应的IO口拉低拉高来切换,一般默认是0x3C。在有些模块PCB的背面,,可以看到 I2C地址选项的丝印,需要改变模块I2C地址时,只需要把丝印标识位置的电阻取下来,焊接到另外留空的一端即可。如下图所示:
特别要提醒的是:OLED屏幕PCB背面的I2C地址,是加上了I2C第零位,即方向读写位后的数值。
如:0x78 = 0x3C<< 1(0111 1000 <<—- 0011 1100),第0位为0时,表示MCU向OLED写数据
0x7A = 0x3D<< 1(0111 1010 <<—- 0011 1101),第0位为1时,表示MCU从OLED读数据
对于本例OLED屏,设置第0位为0才能正常工作。所以,需要将屏幕地址改写成:0x3C
六、示例程序:使用096寸4引脚OLED屏幕显示系统日期和时间
该程序通过UDP协议访问阿里云NTP时间服务器,提取系统时间换算成北京时区日期和时间,显示在OLED屏幕上。附上该程序SSD1306_clock的完整代码,请点击下载, 提取码:tsqf。
特别提醒:编译上传该程序前,请修改成自己可用的WIFI路由器名称和密码。
ssd1306_12864OLED_I2C演示视频
作者:ESP8266应用