步驟1:為什么添加顯示器?
您可以完美運行各種物聯網項目,無需任何顯示。但是,某些IoT項目不僅可以單向饋送數據(從IoT到服務器),還可以從服務器或Internet收集實時信息以進行顯示。
我以前的教學方法,ESP32 Photo Clock是例如,它從Internet下載當前的分鐘照片,將JPEG照片解碼并顯示。
服務器或Internet中有各種實時信息,例如除了室溫,服務器CPU使用率,天氣預報,新聞,股票價格,提醒下載文件已完成之外,您的YouTube頻道視圖:》
步驟2:確定,然后為什么要進行彩色顯示?
許多Arduino項目都使用單色顯示,原因之一是MCU的資源有限。每個RGB顏色通道的寬度為320像素,高度為240像素,顏色為8位,意味著每個全屏圖片為230 KB。但是普通的Arduino(ATmega328)僅具有32 KB的閃存,從SD卡讀取數據并將其繪制到彩色顯示屏上非常耗時(超過一秒鐘)。
ESP32改變了游戲規則。它具有更快的處理能力(16 MHz與240 MHz雙核),更多的RAM(2 KB對超過200 KB)和更多的閃存(32 KB對4 MB),因此能夠利用更多的色彩和更高的分辨率用于顯示的圖像。同時,它能夠執行一些RAM占用很大的過程,例如JPEG解碼,這對于顯示Internet收集的信息是非常重要的功能。
步驟3:串行外圍接口
彩色顯示器具有多種類型的接口:串行外圍設備接口(SPI),6位,8位,16位,18位以及NeoPixel!
SPI主導了業余電子市場,這很可能是因為連接所需的電線更少。我的抽屜中的大多數顯示器也只有SPI引腳,因此此說明主要針對SPI顯示器。
注意:
NeoPixel矩陣是一種非常特殊的彩色顯示器。如果您對NeoPixel矩陣顯示感興趣,請參考以下使用它的說明:
https://www.instructables.com/id/Display-Colorful -。..
HTTPS://www.instructables.com/id/ATtiny13A-NeoPixe 。..
https://www.instructables.com/id/IoT-LED-Matrix/
HTTPS://www.instructables.com/id/IoT-LED-Cheering -。..
https://www.instructables.com/id/IoT-LED-Sign/
步驟4:硬件和軟件
為ESP32選擇彩色顯示屏時,要考慮兩個部分。
硬件
針對業余電子產品,有各種彩色顯示屏:LCD,IPS LCD,具有不同分辨率和不同驅動芯片的OLED。 LCD可以具有更高的圖像密度,但是OLED可以具有更好的可視角度,IPS LCD可以同時具有兩者。 OLED對于每個點亮的像素都具有更高的功率效率,但可能存在老化問題。彩色OLED的工作電壓為14 V,這意味著您需要專用的升壓電路,但是如果您僅使用分線板就不會有問題。 LCD在大多數情況下都可以直接在3.3 V電壓下工作,并且工作電壓與ESP32相同,因此您可以考慮不使用分線板制作更纖薄的產品。
軟件
軟件支持另一方面也會影響您的選擇。您可以使用Arduino IDE開發ESP32程序,也可以直接使用ESP-IDF。但是,由于ESP-IDF沒有太多的顯示庫并且沒有太多的顯示硬件受支持,所以我將只關注Arduino顯示庫。
對于初學者來說,我認為購買adafruit(或類似供應商)硬件并且使用其Arduino庫可以提供良好的無縫體驗(盡管我沒有預算嘗試所有操作)。 TFT_eSPI庫具有更好的性能,但配置需要在庫文件夾中進行更改。 Ucglib和UTFT-ESP運行有點慢,但它支持許多硬件,并且是一個流行的庫,您可以找到許多Arduino項目使用它。
讓我們從抽屜中的彩色顯示屏開始進行比較。
步驟5:LCD ST7735
ST7735是非常受歡迎的LCD分辨率為128x128和128x160的驅動程序模型。這可能是由于其受歡迎程度引起的,有許多制造商生產兼容產品,但它們并不完全兼容。初始代碼有一些變化,顏色順序可以是RGB或BGR,y坐標范圍也有一些像素變化。一些庫通過紅色,綠色或黑色標簽對其進行區分,但標簽顏色并不總是正確的。最壞的情況是一一嘗試使用標簽選項,直到看到好的結果為止。上面的第三張圖片是使用錯誤標簽選項的示例,您可以在頂部找到3個像素的高度噪聲條。
步驟6:LCD ST7735奇數大小
ST7735在128x160的分辨率范圍內還具有其他奇數大小的彩色顯示,例如上面的圖片是0.96英寸128x64彩色顯示器。
步驟7:IPS LCD ST7735
由于可穿戴設備的普及,今年我可以在市場上找到更多的小尺寸IPS LCD。上圖是使用ST7735驅動芯片的0.96英寸80x160 IPS彩色LCD。如您在第三張圖片中所見,您可以將其視為代碼中的128x160彩色顯示器,但實際上僅顯示中間部分。第四張圖片是沒有分線板的顯示器,它很薄,很小,非常適合可穿戴項目!
注意:
所有IPS LCD都有一個共同的特征,即顯示的顏色被倒置,大多數庫都可以通過打開invert選項簡單地對其進行修復。
步驟8:OLED SSD1331
我認為這是市場上可以找到的最低分辨率彩色顯示器,它是0.96英寸96x64彩色OLED。
OLED有很大的優勢是,像素只有在點亮時才會消耗功率;另一方面,即使在顯示黑屏的情況下,LCD背光也會始終消耗全部功率,因此OLED可以幫助為電池供電的項目節省一些電量。/p》
我嘗試在以前的教學指南中使用它:
https://www.instructables.com/id/Arduino-MINTIA-Ga 。..
步驟9:OLED SSD1351
這是1.5英寸128 x 128色OLED,外形非常適合智能手表般的佩戴能干的項目。選擇此項的最大障礙應該是價格約為普通LCD的4倍。
步驟10:OLED SEPS525
這是我在業余電子市場上可以找到的最高分辨率的彩色OLED,它是1.69“ 160x128彩色OLED。由于大尺寸的分線板,我不知道
第11步:LCD ILI9225
它是2.2英寸176x220彩色液晶顯示器。使用該芯片和分辨率的項目相對較少。這可能是由于其芯片家族兄弟ILI9341(尺寸大了0.2英寸,但分辨率接近兩倍)的成功所致。
步驟12:LCD ILI9341
我認為ILI9341是業余電子市場上最受歡迎的LCD驅動器芯片,大多數情況下分辨率為240x320,屏幕尺寸從2.0開始“至3.2”。一些突破性板還內置觸摸屏功能。
您可以在GitHub上找到許多使用此功能的項目。如果您打算購買第一塊LCD,那么ILI9341突破性板是一個不錯的選擇選擇。
在市場上找到沒有分線板的純LCD也很容易。
以下是我正在使用ILI9341的一些項目:
https://www.instructables.com/id/Connect-LCD-to-Ra.。.
https://www.instructables.com/id/ESP8266-WiFi-Anal.。.
的https://www.instructables.com/id/Breadboard-RetroP 。..
HTTPS://www.instructables.com/id/Portable-WiFi-Ana 。..
https://www.instructables.com/id/ESP32-Photo-Clock.。.
HTTPS://www.instructables.com/id/Battery-Powered-E 。..
HTTPS://www.instructables.com/id/Kids-Photo-Album -。..
步驟13:IPS LCD ILI9341
這是IPS版本使用ILI9341驅動器芯片的2.4英寸LCD。
顯示效果很好,但是供應商沒有提供分線板選項,因此您需要自己接線。
步驟14:IPS LCD ST7789
ST7789也是ESP32社區中的通用驅動芯片。原因之一是ESP32官方開發套件正在使用它。與ILI9341一樣,ST7789也可以驅動240x320分辨率。
我手頭沒有240x320 ST7789顯示屏,上面的圖片是1.3英寸240x240 IPS彩色LCD。
這也是第15步:IPS LCD與普通LCD一樣,它可以直接在3.3 V電壓下操作,因此非常適合制作纖薄的可穿戴設備。
HX8352C
這是一個3.0英寸240x400 IPS彩色LCD。這是我什至沒有看到的業余電子市場中唯一的寬屏LCD。
步驟16:LCD ILI9486
這是3.5英寸320x480彩色LCD。此分辨率是普通MCU的負擔,使用Ucglib需要一秒鐘以上的時間才能充滿全屏。
步驟17:軟件比較
有許多顯示庫可以支持各種硬件。我選擇了4個最受歡迎的Arduino庫進行比較:
Adafruit GFX家族
TFT_eSPI
UTFT-ESP
Ucglib
上圖是每個庫的硬件支持列表。
顯示速度是我們考慮選擇哪個庫的最重要的事情之一。為此,我選擇了TFT_eSPI PDQ測試,并做出了一些努力來重寫可以在4個庫中運行的PDQ測試。 。所有測試將使用相同的2.8“ ILI9341 LCD進行。
為簡化比較過程,所有顯示器均使用相同的連接模式n。
這是我的連接摘要:
ESP32 Display
Pin 5 -》 CS (Some display not breakout this pin, simply skip it)
Pin 16 -》 DC
Pin 17 -》 Reset
Pin 18 (VSPI CLK) -》 CLK
Pin 23 (VSPI MOSI) -》 MOSI (Some display call it Din)
您可以在Github上找到代碼:
https://github.com/moononournation/Arduino_graphic 。..
更新
正如我發現TFT_eSPI是此指令中最有潛力的ESP32顯示庫一樣,我付出了一些努力來添加對我所有顯示的支持。手。上圖中新添加的顯示支持用紅色標記為字母M,這是我的增強版本:
https://github.com/moononournation/TFT_eSPI
步驟18:Adafruit GFX系列
Adafruit在業余電子市場上出售各種顯示模塊,并且它們在軟件水平上也有很好的支持。他們的顯示庫全部建立在稱為Adafruit_GFX的父類上,因此我將其稱為Adafruit GFX系列。該庫通常支持大多數Arduino硬件(也包括ESP32)。
在Arduino庫管理器中,只需搜索“ adafruit display” ,即可看到所有家族成員。如果要安裝,請說ILI9341,只需選擇“ Adafruit ILI9341”,然后單擊“安裝”。記住還要安裝其依賴庫“ Adafruit GFX庫” 。
步驟19:TFT-eSPI
此庫方法簽名與Adafruit GFX非常相似,但它是為ESP8266或ESP32量身定制的。我認為源代碼針對ESP32進行了優化,因此PDQ結果比其他庫要快得多。
您可以通過搜索“ TFT-eSPI” 將其安裝在Arduino Library Manager中。然后單擊安裝。
注意:使用此庫最困難的部分是必須先配置此庫,然后才能使用它。配置文件位于庫文件夾中,它應該是您自己的文檔文件夾下的“ Arduino/libraries/TFT_eSPI/User_setup.h” 。它有很多注釋可幫助您完成此操作,請按照注釋逐步進行以完成配置。這是我的ILI9341的User_setup.h:
#define ILI9341_DRIVER
#define TFT_CS 5 // Chip select control pin D8
#define TFT_DC 16 // Data Command control pin
#define TFT_RST 17 // Reset pin (could connect to NodeMCU RST, see next line)
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-。
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-。
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT
#define SPI_FREQUENCY 40000000 // Maximum to use SPIFFS
步驟20:Ucglib
您可以通過搜索“ Ucglib” 然后單擊安裝在Arduino庫管理器中進行安裝。
步驟21:UTFT-ESP
UTFT-ESP基于Rinky-Dink Electronics UTFT庫,并添加了ESP8266和ESP32支持。
您可以通過在Github上下載它進行安裝:
https://github.com/gnulabis/UTFT-ESP
,然后將“ UTFT”文件夾復制到Arduino庫文件夾。/p》
參考號:http://www.rinkydinkelectronics.com/library.php?id 。..
步驟22:微調SPI頻率
ESP32 + ILI9341可以SPI速度40 MHz運行,它需要在庫文件夾中進行一些代碼更改。上面的圖片是微調的結果。以下是代碼更改摘要:
Adafruit_ILI9341
該庫已為ESP32板定義了SPI_DEFAULT_FREQ為40000000。您還可以在初始化時更改頻率:
tft.begin(80000000);
TFT_eSPI
User_Setup.h
// #define SPI_FREQUENCY 27000000
// Actually sets it to 26.67MHz = 80/3
#define SPI_FREQUENCY 40000000 // Maximum to use SPIFFS
Ucglib
的src/CLIB/ucg_dev_ic_ili9341.c
UTFT-ESP
硬件/ESP/HW_ESP.h
步驟23:比較舍入
硬件
ST7735和ILI9341是最受歡迎的顯示器,對于初學者來說,這2是更好的選擇。您可能會注意到LCD有一個很大的缺點,可視角度大,在可視角度之外失去了一些顏色,屏幕變得不可讀。如果您有足夠的預算,則OLED或IPS LCD的可視角度要好得多。
軟件
速度
TFT_eSPI的性能最好。
受歡迎程度
在大多數情況下,我們通過在網絡上搜索示例來研究如何使用代碼庫。我已經嘗試在Github中搜索四個庫關鍵字,Adafruit最受歡迎,而UTFT則排名第二。
難度
只有Adafruit GFX系列可以在用戶中完全配置代碼級別,其他3個庫需要在庫文件夾中進行一些配置。而且Adafruit的門戶網站也非常好,有很多詳細的帖子可以教您如何使用其產品。
Round Up
ILI9341對于初學者來說應該是最有價值的展示。 Adafruit GFX庫對于初學者來說應該是最容易使用的,并且由于TFT_eSPI具有非常相似的方法簽名,因此稍后切換到更快的庫非常容易。
步驟24:可選閱讀:連接LCD而無需插線板
OLED需要14 V的電壓才能點亮像素,因此不容易斷開分支板的耦合。另一方面,LCD(也包括IPS LCD)通常在3.3 V電壓下工作,與ESP32相同。在大多數情況下,LCD和ESP32之間僅需要LED控制電路,即晶體管和少量電阻。
在決定不使用分線板之前,首先閱讀數據表非常重要。引腳布局,引腳間距大小,示例電路連接和最大額定值都可以在數據手冊中找到。最大電壓尤為重要,您應遵循額定值,否則將炸毀LCD。該芯片可以在3.3 V的電壓下工作,但LED可以在2.8-3.0 V的電壓下工作,因此它需要中間的一些電子器件,大多數數據手冊都帶有采樣電路。您可能會要求賣方將數據表的軟拷貝發送給您,或者只是通過型號將其發送給Google。
我的特別提示:我喜歡焊接引腳間距與LCD相同的FPC電纜幫助與MCU的連接。我在以下這些指導中使用了此技術:
https://www.instructables.com/id/Connect-LCD-to-Ra 。..
https://www .instructables.com/id/Portable-WiFi-Ana 。..
步驟25:可選閱讀:顏色深度
如果您通讀彩色顯示器的數據表,可能會發現大多數彩色顯示器都可以支持18位色深(每個RGB通道為6位)。 18位色深可以提供比16位色深更好的圖像質量(紅色和藍色通道為5位,綠色通道為6位)。但是,只有Ucglib實際上以18位色深(262,144色)運行,其他3個庫都以16位色深(65,536色)運行。這是因為18位色深實際上要求每個像素傳輸3個字節(24位)的數據,這意味著傳輸和存儲在內存中所需的數據量要多50%。這是Ucglib運行速度較慢,但圖像質量更好的原因之一。
-
顯示器
+關注
關注
21文章
5031瀏覽量
140778 -
ESP32
+關注
關注
18文章
986瀏覽量
17899
發布評論請先 登錄
相關推薦
基于ESP32和Wio Terminal的DeepSeeek移動終端項目

esp32和esp8266代碼共用嗎
esp8266和esp32區別是什么
esp32用什么軟件編程
導入ESP32C3的項目時,報這個提示Select a Kit for xxxx,請問應該選擇什么?
ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么區別?ESP32-WROOM-32 后綴字母代表的意思是?

ESP32能取代STM32嗎?哪個更好?

評論