使用 ESP32-1732S019

雖然普遍 開發板 都有提供 LED 可以用作顯示狀態
但當需要顯示比較複雜的內容、數值資料,甚至圖像時,只有一粒 LED 並不足夠,通常還需要使用 序列輸出
如果需要讓 開發板 獨立運作,便無發使用 序列輸出
如果能夠像 ESP32-S3 0.42in-OLED 預裝熒幕,便可以更簡單地開發獨立運作的裝置

預覽

外觀

ESP32-1732S019 的正面
與在下之前模仿 O.MG 的 ESP32-S3 相似,同樣是一塊以 ESP32-S3 作為 微控制器 的 開發板
但 ESP32-1732S019 提供 1.9寸 170x320 像素 彩色LCD ,比 0.42寸 單色的 OLED 有更大的熒幕及更豐富的色彩

BOOT按鈕,與 ESP32-S3 的 第0數碼引腳 連接
按下 BOOT按鈕 會將 第0數碼引腳 接地 ,起動時 第0數碼引腳 接地 會載入到 起動模式

RST按鈕,是重設功能,當接地時會重新啟動裝置

ESP32-1732S019 的背面

ESP32-S3-WROOM-1 同樣是具備 WiFi 及 BLE 功能
而且還配備 16MB 的快閃記憶體,比一般 ESP32-S3 能儲存更多資料

使用 CH340C 將 USB訊號轉換成TTL訊號

引腳

正面USB
左側引腳右側引腳
GP201245V
GP19223GND
GP18322GP21
GP17421GP47
GP16520GP48
GP15619GP45
GP7718GP38
GP6817GP39
GP5916GP40
GP41015GP41
3V31114GP42
GND1213GP2
編號引腳方向功能
1GP20輸入輸出第20數碼引腳
2GP19輸入輸出第19數碼引腳
3GP18輸入輸出第18數碼引腳
4GP17輸入輸出第17數碼引腳
5GP16輸入輸出第16數碼引腳
6GP15輸入輸出第15數碼引腳
7GP7輸入輸出第7數碼引腳
8GP6輸入輸出第6數碼引腳
9GP5輸入輸出第5數碼引腳
10GP4輸入輸出第4數碼引腳
113V33.3V 電源輸出
12GND接地
13GP2輸入輸出第2數碼引腳
14GP42輸入輸出第42數碼引腳
15GP41輸入輸出第41數碼引腳
16GP40輸入輸出第40數碼引腳
17GP39輸入輸出第39數碼引腳
18GP38輸入輸出第38數碼引腳
19GP45輸入輸出第45數碼引腳
20GP48輸入輸出第48數碼引腳
21GP47輸入輸出第47數碼引腳
22GP21輸入輸出第21數碼引腳
23GND接地
245V5V 電源輸入
BOOTGP0輸入輸出第0數碼引腳,連接到BOOT按鈕;起動時接地會載入到起動模式
RSTRST重新引腳,接地時會重新起動
LCD_RSTGP1輸入第1數碼引腳,連接到 LCD RST引腳;低電壓時重設 LCD
LCD_SSGP10輸出第10數碼引腳,連接到 LCD SS引腳;低電壓時有效
LCD_DCGP11輸出第11數碼引腳,連接到 LCD DC引腳;低電壓寫入資料,高電壓寫入指令
LCD_SCKGP12輸出第12數碼引腳,連接到 LCD SCK引腳
LCD_MOSIGP13輸出第13數碼引腳,連接到 LCD MOSI引腳
LCD_BLGP14輸出第14數碼引腳,連接到 LCD 背光引腳;高電壓時亮著

LCD熒幕

由於 ESP32-1732S019 的 LCD熒幕 使用 ST7789 的控制晶片,因此可以使用 ST7789 相同的函式庫來驅動

雖然在下曾經製作自己開發的 Arduino 函式庫,但在下這次打算使用由 Adafruit 提供的 ST7789 函式庫來驅動
畢竟使用公開、已開發成熟的函式庫的效率會更快,通常亦已經除錯

開啟 Arduino IDE 後,到 Sketch > Include Library > Manage Libraries...
在 Library Manager 搜尋 ST7789 ,安裝由 Adafruit 提供的 Adafruit ST7735 and ST7789 Library 函式庫

由於 Adafruit ST7735 and ST7789 Library 還需要有其他相依函式庫
因此需要一拼安裝才能使用 ST7789 相關的函式庫功能

等待下載及安裝函式庫

由於 ESP32-1732S019 同樣使用 ESP32-S3 模組,因此還需要安裝 ESP32-S3 開發板模組
File > Preferences > Additional Boards Manager URLs: 加入

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

到 Tools > Boards > Boards Managers...
在 Boards Manager 搜尋 esp32 ,安裝由 Espressif Systems 提供的 ESP32 開發板模組

#define LCD_BL 14
void setup() {
	pinMode(LCD_BL, OUTPUT);
}
void loop() {
	digitalWrite(LCD_BL, !digitalRead(LCD_BL));
	delay(500);
}

未啟動 LCD熒幕 時亮著 背光LED

#include <Adafruit_ST7789.h>
#define LCD_RST 1
#define LCD_SS 10
#define LCD_DC 11
#define LCD_SCK 12
#define LCD_MOSI 13
#define LCD_BL 14
Adafruit_ST7789 lcd = Adafruit_ST7789(LCD_SS, LCD_DC, LCD_MOSI, LCD_SCK, LCD_RST);
void setup() {
	pinMode(LCD_BL, OUTPUT);
	lcd.init(170, 320);
}
void loop() {
	digitalWrite(LCD_BL, !digitalRead(LCD_BL));
	delay(500);
}

啟動 LCD熒幕 時亮著 背光LED
與過去使用的 ST7789 相同,未初始化的熒幕會顯示雜訊內容

#include <Adafruit_ST7789.h>
#include "data.h"
#define LCD_RST 1
#define LCD_SS 10
#define LCD_DC 11
#define LCD_SCK 12
#define LCD_MOSI 13
#define LCD_BL 14
Adafruit_ST7789 lcd = Adafruit_ST7789(LCD_SS, LCD_DC, LCD_MOSI, LCD_SCK, LCD_RST);
void setup() {
	pinMode(LCD_BL, OUTPUT);
	digitalWrite(LCD_BL, HIGH);
	lcd.init(170, 320);
	lcd.setRotation(3);
	lcd.fillScreen(ST77XX_BLACK);
	lcd.fillScreen(ST77XX_WHITE);
	lcd.drawRGBBitmap(0, 0, data, 320, 170);
}
void loop() {
}

在 LCD熒幕 上繪製 PM5532圖像

PROGMEM const uint16_t data[] = {};

data.h 保存著 16位元 的 點陣圖內容
由於 編程內容必須使用 靜態隨機存取存儲器 (Static Random Access Memory (SRAM))
但固定資料可以使用 快閃記憶體 (Flash Memory)
因此建議使用 PROGMEM 將 點陣圖資料 保存到 Flash 以減少 SRAM 的使用量

總結

相比之前 模仿O.MG專案 中使用的 ESP32-S3 0.42in-OLED
ESP32-1732S019 擁有更大的預裝熒幕,而且能夠顯示彩色,有更佳的的顯示效果
而且使用 ST7789 相同的驅動程式,因此不需要額外學習操作方式,便可以直接使用 ST7789 函式庫製作圖像
但由於 ESP32-1732S019 的熒幕是 LCD ,比 OLED 耗電,而且必須有背光才能顯示熒幕內容
還有美中不足的是 LCD 的熒幕控制引腳並不是使用 ESP32-S3 的 硬件SPI

SPI引腳ESP32-S3 引腳連接到 ST7789 引腳
SS1010
MOSI1113
SCK1212
MISO13N/A

導致更新熒幕內容的不能以最快的速度更新,畢竟 軟件SPI 比 硬件SPI 慢
不過如果不是繪製非常複雜的圖像,其實速度仍可接受

而這種 整合LCD的開發板 比 額外連接 LCD模組 的 開發板 昂貴,引腳連接亦無法控制
因此製作專案時同樣需要考慮這些情況來選擇

參考資料