ESP32与OLED显示屏接口连接



OLED与ESP32的组合非常流行,有些ESP32开发板集成了OLED。但是,我们将假设您将使用独立的OLED模块和您的ESP32开发板。如果您有一个OLED模块,它可能看起来像下面的图片。

OLED Module

将OLED显示模块连接到ESP32

与我们在前一章中讨论的MPU6050模块一样,OLED模块通常也使用I2C进行通信。因此,连接方式将与MPU6050模块类似。您需要将SDA线连接到ESP32的21引脚,SCL线连接到22引脚,GND连接到GND,VCC连接到3V3引脚。

OLED Module with ESP32

OLED显示屏库

有许多库可用于将OLED显示屏与ESP32连接。您可以随意使用任何您觉得舒适的库。在本例中,我们将使用ThingPulse和Fabrice Weinberg编写的“ESP8266和ESP32 OLED驱动程序,用于SSD1306显示屏”。您可以从工具->管理库中安装此库。它也可以在GitHub上找到。

OLED Module Library

代码演练

由于我们刚刚安装的库,代码变得非常简单。我们将运行一个计数器代码,它只会计算自上次复位以来的秒数并将它们打印在OLED模块上。代码可以在GitHub上找到。

我们首先包含SSD1306库。

#include "SSD1306Wire.h"

接下来,我们定义OLED引脚及其I2C地址。请注意,有些OLED模块包含额外的复位引脚。一个很好的例子是ESP32 TTGO开发板,它带有内置的OLED显示屏。对于该开发板,16引脚是复位引脚。如果您将外部OLED模块连接到ESP32,则很可能不会使用复位引脚。0x3c的I2C地址通常对所有OLED模块都是通用的。

//OLED related variables
#define OLED_ADDR   0x3c
#define OLED_SDA    21//4     //TTGO board without SD Card has OLED SDA connected to pin 4 of ESP32
#define OLED_SCL    22//15    //TTGO board without SD Card has OLED SCL connected to pin 15 of ESP32
#define OLED_RST    16        //Optional, TTGO board contains OLED_RST connected to pin 16 of ESP32

接下来,我们创建OLED显示对象和计数器变量。

SSD1306Wire  display(OLED_ADDR, OLED_SDA, OLED_SCL); 
int counter = 0;

之后,我们定义两个函数。一个用于初始化OLED显示屏(如果您的OLED模块不包含复位引脚,则此函数是冗余的),另一个用于在OLED显示屏上打印文本消息。showOLEDMessage()函数将OLED显示区域分解为3行,并要求3个字符串,每行一个。

void initOLED() {
   pinMode(OLED_RST, OUTPUT);
   //Give a low to high pulse to the OLED display to reset it
   //This is optional and not required for OLED modules not containing a reset pin
   digitalWrite(OLED_RST, LOW);
   delay(20);
   digitalWrite(OLED_RST, HIGH);
}
void showOLEDMessage(String line1, String line2, String line3) {
   display.init();                        // clears screen
   display.setFont(ArialMT_Plain_16);
   display.drawString(0, 0, line1);       //  adds to buffer
   display.drawString(0, 20, line2);
   display.drawString(0, 40, line3);
   display.display();                     // displays content in buffer
}

最后,在setup中,我们只需初始化OLED显示屏,在loop中,我们只需利用显示屏的前两行显示计数器。

void setup() {
   // put your setup code here, to run once:
   initOLED();
}
void loop() {
   // put your main code here, to run repeatedly
   showOLEDMessage("Num seconds is: ", String(counter), "");
   delay(1000);
   counter = counter+1;
}

就是这样。恭喜您在OLED显示屏上显示了您的第一个文本语句。

广告