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顯示屏上顯示了您的第一個文字語句。

廣告