2024-07-31

使用 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
左側引腳 右側引腳
GP20 1 24 5V
GP19 2 23 GND
GP18 3 22 GP21
GP17 4 21 GP47
GP16 5 20 GP48
GP15 6 19 GP45
GP7 7 18 GP38
GP6 8 17 GP39
GP5 9 16 GP40
GP4 10 15 GP41
3V3 11 14 GP42
GND 12 13 GP2
編號 引腳 方向 功能
1 GP20 輸入輸出 第20數碼引腳
2 GP19 輸入輸出 第19數碼引腳
3 GP18 輸入輸出 第18數碼引腳
4 GP17 輸入輸出 第17數碼引腳
5 GP16 輸入輸出 第16數碼引腳
6 GP15 輸入輸出 第15數碼引腳
7 GP7 輸入輸出 第7數碼引腳
8 GP6 輸入輸出 第6數碼引腳
9 GP5 輸入輸出 第5數碼引腳
10 GP4 輸入輸出 第4數碼引腳
11 3V3 3.3V 電源輸出
12 GND 接地
13 GP2 輸入輸出 第2數碼引腳
14 GP42 輸入輸出 第42數碼引腳
15 GP41 輸入輸出 第41數碼引腳
16 GP40 輸入輸出 第40數碼引腳
17 GP39 輸入輸出 第39數碼引腳
18 GP38 輸入輸出 第38數碼引腳
19 GP45 輸入輸出 第45數碼引腳
20 GP48 輸入輸出 第48數碼引腳
21 GP47 輸入輸出 第47數碼引腳
22 GP21 輸入輸出 第21數碼引腳
23 GND 接地
24 5V 5V 電源輸入
BOOT GP0 輸入輸出 第0數碼引腳,連接到BOOT按鈕;起動時接地會載入到起動模式
RST RST 重新引腳,接地時會重新起動
LCD_RST GP1 輸入 第1數碼引腳,連接到 LCD RST引腳;低電壓時重設 LCD
LCD_SS GP10 輸出 第10數碼引腳,連接到 LCD SS引腳;低電壓時有效
LCD_DC GP11 輸出 第11數碼引腳,連接到 LCD DC引腳;低電壓寫入資料,高電壓寫入指令
LCD_SCK GP12 輸出 第12數碼引腳,連接到 LCD SCK引腳
LCD_MOSI GP13 輸出 第13數碼引腳,連接到 LCD MOSI引腳
LCD_BL GP14 輸出 第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 引腳
SS 10 10
MOSI 11 13
SCK 12 12
MISO 13 N/A

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

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

參考資料

沒有留言 :

張貼留言