在本教程中,我们将OLED显示器与NodeMCU ESP8266进行接口连接。NodeMCU是一个开源物联网平台,其中包含可在乐鑫提供的低成本,支持Wi-Fi的ESP8266 Wi-Fi SoC上运行的固件。它具有用于连接其他外设的GPIO引脚,并且支持使用SPI,I2C和UART引脚的串行通信。它还具有用于ADC和PWM的引脚。我们之前将OLED与其他微控制器接口,包括ESP系列控制器(ESP32):
- 将SSD1306 OLED显示器与Raspberry Pi连接
- 将SSD1306 OLED显示屏与Arduino接口
- 使用Arduino通过将OLED显示屏与Android手机连接来构建智能手表
- 使用ESP32和OLED显示屏的Internet时钟
在本教程中,我们将使用SPI协议将单色7针SSD1306 0.96 OLED显示器与NodeMCU进行接口连接,并将学习使用NodeMCU ESP8266在OLED屏幕上显示图像。
OLED显示器
有机发光二极管(OLED)是一种发光二极管,其中当提供电流时,由有机化合物制成的发光层发光。该层位于两个电极之间。这项技术被用于计算机,电视,智能手机等显示屏中。OLED显示器具有自身的光线,并且不需要像LCD那样的任何背光,因此它们具有高能效并与许多微控制器一起使用。与LCD相比,使用OLED显示器的另一优势是在OLED上显示更大,质量更好的图形。在此处了解有关OLED显示技术的更多信息。
市场上有各种类型的OLED显示器。这些显示器根据颜色,引脚数,控制器IC和屏幕尺寸来表征。根据颜色,OLED可提供单色蓝色,单色白色和黄色/蓝色。并且基于通信,主要有两种类型的OLED可用-3pin和7pin。3引脚OLED可以用于I2C通信模式,而7引脚OLED可以用于SPI模式或I2C模式。
在本教程中,我们将使用宽度为128像素,长度为64像素的“单色7针SSD1306 0.96 ” OLED显示器。此显示可以同时在SPI和I2C通信协议上使用。在本教程中,我们将使用SPI协议。此OLED上有SSD1306 IC,可帮助在屏幕上显示像素。
所需组件
- 单色7针SSD1306 0.96英寸OLED显示屏
- NodeMCU ESP8266
- 微型USB电缆
- 面包板
- 公对公跳线
NodeMCU和OLED显示器之间的SPI引脚连接
下面是将7针OLED显示器与NodeMCU连接以使用SPI串行通信协议进行通信的电路图。
下表显示了OLED Display和NodeMCU ESP8266之间的连接。GND引脚连接到NodeMCU GND,VDD引脚可以连接到3.3V或5V,SCK是OLED显示器上的时钟引脚,该引脚连接到NodeMCU的D5以获得SPI时钟。SDA引脚是SPI接口OLED上的MOSI引脚,连接到NodeMCU的D7。RESET引脚转到D3。DC,数据命令引脚连接到NodeMCU的D2。最后一个引脚是CS到NodeMCU的片选D8。
没有。 |
奥尔德展示 |
NodeMCU |
1个 |
地线 |
地线 |
2 |
VDD |
3.3伏 |
3 |
SCK |
D5 |
4 |
MOSI(SPI)或SDA(I2C) |
D7 |
5 |
重启 |
D3 |
6 |
直流电 |
D2 |
7 |
CS |
D8 |
在这里,我们将使用“ Adafruit _SSD1306.h” 和“ Adafruit_GFX.h ”库将OLED与NodeMCU接口。打开Arduino IDE并从Arduino IDE安装最新版本( Sketch> Include Library> Manage Libraries或Ctrl + Shift_I )。
由于我们的OLED显示器的像素大小为128x64,因此我们必须在Adafruit_SSD1306的头文件中进行更改。打开Arduino库,转到 Adafruit_SSD1306 并打开其头文件( Adafruit _SSD1306.h )。评论出列“ 的#define SSD1306_128_32 ”并取消线 “的#define SSD1306_128_64 如在下面的图像,然后保存该文件中所示的”。默认情况下,该库带有“ #define SSD1306_128_32 ”。
最后,根据上表显示更改“ ssd1306_128x64_spi ” Adafruit SSD1306示例中的引脚号。现在,当您正确连接OLED Display与NodeMCU后运行草图时,您将在OLED显示屏上看到Adafruit的徽标,默认情况下该徽标已保存在库中。在Adafruit徽标之后,它会显示许多其他图形,例如线条,矩形,三角形,圆形,字符串,数字,动画和位图。在本教程中,我们将在这里学习如何使用NodeMCU ESP8266在OLED上显示任何图像。
编程NodeMCU以连接OLED
由于始终在末尾提供完整的代码,因此我们在此详细解释了代码。
通过导入必要的库来启动代码。由于我们使用的是SPI协议,因此我们将导入“ SPI.h”库,并导入“ Adafruit_GFX.h”和“ Adafruit_SSD1306.h”以用于OLED显示。
#包括
我们的OLED尺寸为128x64,因此我们将屏幕的宽度和高度分别设置为128和64。因此,请定义用于SPI通信的连接到NodeMCU的OLED引脚的变量。
的#define SCREEN_WIDTH 128 // OLED显示宽度,以像素 #定义SCREEN_HEIGHT 64 // OLED显示器高度,以像素 //连接宣言SSD1306显示使用软件SPI(缺省情况): #定义OLED_MOSI D7 的#define OLED_CLK D5 的#define OLED_DC D2 #定义OLED_CS D8 #定义OLED_RESET D3 Adafruit_SSD1306显示屏(SCREEN_WIDTH,SCREEN_HEIGHT, OLED_MOSI,OLED_CLK,OLED_DC,OLED_RESET,OLED_CS);
通过使用SSD1306_SWITCHCAPVCC内部产生3.3V来初始化显示器,从而初始化OLED显示器。
if(!display.begin(SSD1306_SWITCHCAPVCC)) { Serial.println(F(“ SSD1306分配失败”)); 对于(;;); //不要继续,永远循环 }
调用功能display.clearDisplay()可以在显示任何内容之前清除OLED屏幕的显示。我们通过调用 setTextSize(font-size) 函数将字体大小设置为2 , 并使用 setTextColor 和 setCursor 函数设置文本颜色和光标位置 。 Display.display() 命令用于将数据传输到SSD1306控制器的内部存储器。传输后,像素出现在屏幕上。现在,我们可以通过调用 display.startscrollright(x-pos,y-pos) 和 display.startscrollleft(x-pos,y-pos) 以各种方式开始滚动文本 延迟功能中给出的时间。可以使用display.stopscroll()函数停止文本滚动。
void testscrolltext(void){display.clearDisplay(); //清除OLED显示屏的显示屏。setTextSize(2); //绘制2倍比例的文本display.setTextColor(WHITE); display.setCursor(0,0); display.println(F(“ CIRCUIT”)); display.println(F(“ DIGEST”)); display.display(); //显示初始文字延迟(100); //向各个方向滚动,中间停顿:display.startscrollright(0x00,0x0F); delay(2000); display.stopscroll(); 延迟(1000); display.startscrollleft(0x00,0x0F); delay(2000); display.stopscroll(); 延迟(1000); display.startscrolldiagright(0x00,0x07); delay(2000); display.startscrolldiagleft(0x00,0x07); delay(2000); display.stopscroll(); 延迟(1000); }
我们调用 display.drawBitmap() 函数,该函数采用6个参数(x坐标,y坐标,位图数组,宽度,高度和颜色)在OLED上绘制图像。由于我们的显示尺寸为128x64,因此我们将宽度和高度分别设置为128和64。这里,位图数组包含像素信息,以在屏幕上绘制像素以创建图像。该位图数组可以在线生成,下面将进行说明,或者有许多软件可以将图像转换为位图数组。
const unsigned char myBitmap PROGMEM = { 0xff,0xff,0xff,0xe0、0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xc0、7 ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xf7、0xc0、0x00、0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0xff, 0xff,0xff,0xc7、0x80、0x00、0x03、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x0f,0x01、0xc0、0x00、0xff ,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xfe,0x0f,0x03、0xff,0xc0、0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff ,0xf8、0x1e,0x03、0x3f,0xf8、0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xf0、0x3e,0x03、0x3f,0xfc,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xe0、0x3c,0x03、0x7f,0xff,0xfe,0xfe,0xff 0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xc0、0x7c,0x03、0xf0、0x3f,0x83、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff, 0xff,0xff 0x78、0x00、0xc0、0x0f,0xc1、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0x00、0xf8、0x00、0x00、0x07、0xe0、0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff, 0xfe,0x01、0xf0、0x00、0x00、0x03、0xf8、0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0x01、0xff 0x00、0x00、0xfc,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0x03、0xe0、0x00、0x0f,0x00、0x7e,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xf8、0x07、0xc0、0x3f, 0xff,0x80、0xff,0x80、0xff 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc0、0x7f,0xf9、0x80、0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff 0x80、0xff,0xf9、0x80、0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80、0xff,0xff,0x80、0x03、0xff ,0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0x01、0xf0、0x1f,0x80、0x00、0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0xc0、0x00、0xe0、0x00 0x06、0x00、0x00、0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xc0、0x00、0x03、0xc0、0x00、0x00、0x00、0x03、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xc0、0x00、0x07、0xc0、0x00、0x00、0x00、0x00、0x00 0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的, 0x80的,0x00时,0×07,0x80的,0×00,0x00时,0×00,×03,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的, 0x80的,0×00, 0x0f,0x80、0x00、0x00、0x00、0x01、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80、0x00、0x0f ,0x00、0x80、0x00、0x00、0x01、0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff, 0x80、0x00、0x1e,0x01、0xe0、0x00、0x00、0x01、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0x00、0x00、0x1 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00、0x00、0x3c,0x03、0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0x00、0x00、0x7c,0x03、0x3f,0xff,0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xf8、0x03、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff 0xf8、0x01、0xe0、0x00、0x00、0x00、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xf0、0x00、0x00、0x00、0x00、0xff,0xff,0xff,0xff,0xff,0xff 0xff的,0xff的,0xff的,0xff的,0xff的, 0xff的,0xff的,0XF0,0x00时,0×00,0x00时,0×00,0×00,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的, 0x00时,0×00,0x00时,0×00, 0x00、0x00、0x00、0x00、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00、0x00、0x00、0x00、0x00、0x00、0x00、0x00、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0x00、0x00、0x00、0xc0、0x00、0x00、0x00、0x00、0x00 0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的, 0x80的,0×00 0×01,0XF0,0x00时,0×00,0×00 0×01,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的,0xff的, 0x80的,0×00, 0x03、0xb0、0x00、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0x80、0x00、0x03、0x18、0x01、0xff,0xff,0xff,0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff, 0x80、0x00、0x03、0xbc,0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff ,0xc0、0x00、0x01 0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xc0、0x00、0x00、0xff,0xff,0x80、0x00、0x03、0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0、0x00、0x1f,0xff,0x00、0x00、0x00、0x00、0x00 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00、0x07、0xfc,0x00、0x00、0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff 0x80、0x03、0xf0、0x00、0x00、0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xe0、0x01、0xc0、0x00、0x00、0x0f,0xff,0xff,0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xf8、0x00、0x00、0x00、0x00、0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xf8、0xf0、0x03、0xf 0x00、0x00、0x00、0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xf8、0x00、0xff,0xe0、0x00、0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0x00、0x3f,0xe0、0x00、0xff,0xff,0xff,0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfe ,0x00、0x0e ,0x30、0x00、0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff 0x07、0x70、0x00、0xff,0x01、0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80、0x03、0xe0、0x1b,0xfc,0x01、0xff,0xff,0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff,0xff,0xc0、0x01、0xc0、0x7f,0xf0、0x03、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xe,0x00、0x00、0x00 0x7f,0xc0、0x07、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xf0、0x00、0x00、0x67、0x00、0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xf8、0x00、0x00、0x66、0x00、0x1f,0xff 0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xfe,0x00,0x00,0x7e,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff 0x00、0x00、0x3c,0x01、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xc0、0x00、0x00、0x03、0xff,0xff,0xff,0xff,0xff 0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xf0、0x00、0x00、0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xfe,0xff,0xfe 0x00、0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xf8、0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }; display.drawBitmap(35,0,myBitmap,128,64,黑色,白色); display.display();
将图像转换为位图值
可以从http://javl.github.io/image2cpp/生成在线位图。上载您要在OLED上显示的图像文件,并将尺寸设置为128x64。将显示预览图像,然后将生成位图数组。
下面的屏幕截图显示了生成任何图像的位图值的过程。
最后将完整的代码上传到NodeMCU ESP8266中,您将在OLED屏幕上看到图像显示。在这里,我们在OLED显示屏上显示CircuitDigest徽标。