步驟1:為什么添加顯示器?
您可以完美運(yùn)行各種物聯(lián)網(wǎng)項(xiàng)目,無(wú)需任何顯示。但是,某些IoT項(xiàng)目不僅可以單向饋送數(shù)據(jù)(從IoT到服務(wù)器),還可以從服務(wù)器或Internet收集實(shí)時(shí)信息以進(jìn)行顯示。
我以前的教學(xué)方法,ESP32 Photo Clock是例如,它從Internet下載當(dāng)前的分鐘照片,將JPEG照片解碼并顯示。
服務(wù)器或Internet中有各種實(shí)時(shí)信息,例如除了室溫,服務(wù)器CPU使用率,天氣預(yù)報(bào),新聞,股票價(jià)格,提醒下載文件已完成之外,您的YouTube頻道視圖:》
步驟2:確定,然后為什么要進(jìn)行彩色顯示?
許多Arduino項(xiàng)目都使用單色顯示,原因之一是MCU的資源有限。每個(gè)RGB顏色通道的寬度為320像素,高度為240像素,顏色為8位,意味著每個(gè)全屏圖片為230 KB。但是普通的Arduino(ATmega328)僅具有32 KB的閃存,從SD卡讀取數(shù)據(jù)并將其繪制到彩色顯示屏上非常耗時(shí)(超過(guò)一秒鐘)。
ESP32改變了游戲規(guī)則。它具有更快的處理能力(16 MHz與240 MHz雙核),更多的RAM(2 KB對(duì)超過(guò)200 KB)和更多的閃存(32 KB對(duì)4 MB),因此能夠利用更多的色彩和更高的分辨率用于顯示的圖像。同時(shí),它能夠執(zhí)行一些RAM占用很大的過(guò)程,例如JPEG解碼,這對(duì)于顯示Internet收集的信息是非常重要的功能。
步驟3:串行外圍接口
彩色顯示器具有多種類型的接口:串行外圍設(shè)備接口(SPI),6位,8位,16位,18位以及NeoPixel!
SPI主導(dǎo)了業(yè)余電子市場(chǎng),這很可能是因?yàn)檫B接所需的電線更少。我的抽屜中的大多數(shù)顯示器也只有SPI引腳,因此此說(shuō)明主要針對(duì)SPI顯示器。
注意:
NeoPixel矩陣是一種非常特殊的彩色顯示器。如果您對(duì)NeoPixel矩陣顯示感興趣,請(qǐng)參考以下使用它的說(shuō)明:
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選擇彩色顯示屏?xí)r,要考慮兩個(gè)部分。
硬件
針對(duì)業(yè)余電子產(chǎn)品,有各種彩色顯示屏:LCD,IPS LCD,具有不同分辨率和不同驅(qū)動(dòng)芯片的OLED。 LCD可以具有更高的圖像密度,但是OLED可以具有更好的可視角度,IPS LCD可以同時(shí)具有兩者。 OLED對(duì)于每個(gè)點(diǎn)亮的像素都具有更高的功率效率,但可能存在老化問(wèn)題。彩色OLED的工作電壓為14 V,這意味著您需要專用的升壓電路,但是如果您僅使用分線板就不會(huì)有問(wèn)題。 LCD在大多數(shù)情況下都可以直接在3.3 V電壓下工作,并且工作電壓與ESP32相同,因此您可以考慮不使用分線板制作更纖薄的產(chǎn)品。
軟件
軟件支持另一方面也會(huì)影響您的選擇。您可以使用Arduino IDE開(kāi)發(fā)ESP32程序,也可以直接使用ESP-IDF。但是,由于ESP-IDF沒(méi)有太多的顯示庫(kù)并且沒(méi)有太多的顯示硬件受支持,所以我將只關(guān)注Arduino顯示庫(kù)。
對(duì)于初學(xué)者來(lái)說(shuō),我認(rèn)為購(gòu)買adafruit(或類似供應(yīng)商)硬件并且使用其Arduino庫(kù)可以提供良好的無(wú)縫體驗(yàn)(盡管我沒(méi)有預(yù)算嘗試所有操作)。 TFT_eSPI庫(kù)具有更好的性能,但配置需要在庫(kù)文件夾中進(jìn)行更改。 Ucglib和UTFT-ESP運(yùn)行有點(diǎn)慢,但它支持許多硬件,并且是一個(gè)流行的庫(kù),您可以找到許多Arduino項(xiàng)目使用它。
讓我們從抽屜中的彩色顯示屏開(kāi)始進(jìn)行比較。
步驟5:LCD ST7735
ST7735是非常受歡迎的LCD分辨率為128x128和128x160的驅(qū)動(dòng)程序模型。這可能是由于其受歡迎程度引起的,有許多制造商生產(chǎn)兼容產(chǎn)品,但它們并不完全兼容。初始代碼有一些變化,顏色順序可以是RGB或BGR,y坐標(biāo)范圍也有一些像素變化。一些庫(kù)通過(guò)紅色,綠色或黑色標(biāo)簽對(duì)其進(jìn)行區(qū)分,但標(biāo)簽顏色并不總是正確的。最壞的情況是一一嘗試使用標(biāo)簽選項(xiàng),直到看到好的結(jié)果為止。上面的第三張圖片是使用錯(cuò)誤標(biāo)簽選項(xiàng)的示例,您可以在頂部找到3個(gè)像素的高度噪聲條。
步驟6:LCD ST7735奇數(shù)大小
ST7735在128x160的分辨率范圍內(nèi)還具有其他奇數(shù)大小的彩色顯示,例如上面的圖片是0.96英寸128x64彩色顯示器。
步驟7:IPS LCD ST7735
由于可穿戴設(shè)備的普及,今年我可以在市場(chǎng)上找到更多的小尺寸IPS LCD。上圖是使用ST7735驅(qū)動(dòng)芯片的0.96英寸80x160 IPS彩色LCD。如您在第三張圖片中所見(jiàn),您可以將其視為代碼中的128x160彩色顯示器,但實(shí)際上僅顯示中間部分。第四張圖片是沒(méi)有分線板的顯示器,它很薄,很小,非常適合可穿戴項(xiàng)目!
注意:
所有IPS LCD都有一個(gè)共同的特征,即顯示的顏色被倒置,大多數(shù)庫(kù)都可以通過(guò)打開(kāi)invert選項(xiàng)簡(jiǎn)單地對(duì)其進(jìn)行修復(fù)。
步驟8:OLED SSD1331
我認(rèn)為這是市場(chǎng)上可以找到的最低分辨率彩色顯示器,它是0.96英寸96x64彩色OLED。
OLED有很大的優(yōu)勢(shì)是,像素只有在點(diǎn)亮?xí)r才會(huì)消耗功率;另一方面,即使在顯示黑屏的情況下,LCD背光也會(huì)始終消耗全部功率,因此OLED可以幫助為電池供電的項(xiàng)目節(jié)省一些電量。/p》
我嘗試在以前的教學(xué)指南中使用它:
https://www.instructables.com/id/Arduino-MINTIA-Ga 。..
步驟9:OLED SSD1351
這是1.5英寸128 x 128色OLED,外形非常適合智能手表般的佩戴能干的項(xiàng)目。選擇此項(xiàng)的最大障礙應(yīng)該是價(jià)格約為普通LCD的4倍。
步驟10:OLED SEPS525
這是我在業(yè)余電子市場(chǎng)上可以找到的最高分辨率的彩色OLED,它是1.69“ 160x128彩色OLED。由于大尺寸的分線板,我不知道
第11步:LCD ILI9225
它是2.2英寸176x220彩色液晶顯示器。使用該芯片和分辨率的項(xiàng)目相對(duì)較少。這可能是由于其芯片家族兄弟ILI9341(尺寸大了0.2英寸,但分辨率接近兩倍)的成功所致。
步驟12:LCD ILI9341
我認(rèn)為ILI9341是業(yè)余電子市場(chǎng)上最受歡迎的LCD驅(qū)動(dòng)器芯片,大多數(shù)情況下分辨率為240x320,屏幕尺寸從2.0開(kāi)始“至3.2”。一些突破性板還內(nèi)置觸摸屏功能。
您可以在GitHub上找到許多使用此功能的項(xiàng)目。如果您打算購(gòu)買第一塊LCD,那么ILI9341突破性板是一個(gè)不錯(cuò)的選擇選擇。
在市場(chǎng)上找到?jīng)]有分線板的純LCD也很容易。
以下是我正在使用ILI9341的一些項(xiàng)目:
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驅(qū)動(dòng)器芯片的2.4英寸LCD。
顯示效果很好,但是供應(yīng)商沒(méi)有提供分線板選項(xiàng),因此您需要自己接線。
步驟14:IPS LCD ST7789
ST7789也是ESP32社區(qū)中的通用驅(qū)動(dòng)芯片。原因之一是ESP32官方開(kāi)發(fā)套件正在使用它。與ILI9341一樣,ST7789也可以驅(qū)動(dòng)240x320分辨率。
我手頭沒(méi)有240x320 ST7789顯示屏,上面的圖片是1.3英寸240x240 IPS彩色LCD。
這也是第15步:IPS LCD與普通LCD一樣,它可以直接在3.3 V電壓下操作,因此非常適合制作纖薄的可穿戴設(shè)備。
HX8352C
這是一個(gè)3.0英寸240x400 IPS彩色LCD。這是我什至沒(méi)有看到的業(yè)余電子市場(chǎng)中唯一的寬屏LCD。
步驟16:LCD ILI9486
這是3.5英寸320x480彩色LCD。此分辨率是普通MCU的負(fù)擔(dān),使用Ucglib需要一秒鐘以上的時(shí)間才能充滿全屏。
步驟17:軟件比較
有許多顯示庫(kù)可以支持各種硬件。我選擇了4個(gè)最受歡迎的Arduino庫(kù)進(jìn)行比較:
Adafruit GFX家族
TFT_eSPI
UTFT-ESP
Ucglib
上圖是每個(gè)庫(kù)的硬件支持列表。
顯示速度是我們考慮選擇哪個(gè)庫(kù)的最重要的事情之一。為此,我選擇了TFT_eSPI PDQ測(cè)試,并做出了一些努力來(lái)重寫可以在4個(gè)庫(kù)中運(yùn)行的PDQ測(cè)試。 。所有測(cè)試將使用相同的2.8“ ILI9341 LCD進(jìn)行。
為簡(jiǎn)化比較過(guò)程,所有顯示器均使用相同的連接模式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 。..
更新
正如我發(fā)現(xiàn)TFT_eSPI是此指令中最有潛力的ESP32顯示庫(kù)一樣,我付出了一些努力來(lái)添加對(duì)我所有顯示的支持。手。上圖中新添加的顯示支持用紅色標(biāo)記為字母M,這是我的增強(qiáng)版本:
https://github.com/moononournation/TFT_eSPI
步驟18:Adafruit GFX系列
Adafruit在業(yè)余電子市場(chǎng)上出售各種顯示模塊,并且它們?cè)谲浖缴弦灿泻芎玫闹С?。他們的顯示庫(kù)全部建立在稱為Adafruit_GFX的父類上,因此我將其稱為Adafruit GFX系列。該庫(kù)通常支持大多數(shù)Arduino硬件(也包括ESP32)。
在Arduino庫(kù)管理器中,只需搜索“ adafruit display” ,即可看到所有家族成員。如果要安裝,請(qǐng)說(shuō)ILI9341,只需選擇“ Adafruit ILI9341”,然后單擊“安裝”。記住還要安裝其依賴庫(kù)“ Adafruit GFX庫(kù)” 。
步驟19:TFT-eSPI
此庫(kù)方法簽名與Adafruit GFX非常相似,但它是為ESP8266或ESP32量身定制的。我認(rèn)為源代碼針對(duì)ESP32進(jìn)行了優(yōu)化,因此PDQ結(jié)果比其他庫(kù)要快得多。
您可以通過(guò)搜索“ TFT-eSPI” 將其安裝在Arduino Library Manager中。然后單擊安裝。
注意:使用此庫(kù)最困難的部分是必須先配置此庫(kù),然后才能使用它。配置文件位于庫(kù)文件夾中,它應(yīng)該是您自己的文檔文件夾下的“ Arduino/libraries/TFT_eSPI/User_setup.h” 。它有很多注釋可幫助您完成此操作,請(qǐng)按照注釋逐步進(jìn)行以完成配置。這是我的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
您可以通過(guò)搜索“ Ucglib” 然后單擊安裝在Arduino庫(kù)管理器中進(jìn)行安裝。
步驟21:UTFT-ESP
UTFT-ESP基于Rinky-Dink Electronics UTFT庫(kù),并添加了ESP8266和ESP32支持。
您可以通過(guò)在Github上下載它進(jìn)行安裝:
https://github.com/gnulabis/UTFT-ESP
,然后將“ UTFT”文件夾復(fù)制到Arduino庫(kù)文件夾。/p》
參考號(hào):http://www.rinkydinkelectronics.com/library.php?id 。..
步驟22:微調(diào)SPI頻率
ESP32 + ILI9341可以SPI速度40 MHz運(yùn)行,它需要在庫(kù)文件夾中進(jìn)行一些代碼更改。上面的圖片是微調(diào)的結(jié)果。以下是代碼更改摘要:
Adafruit_ILI9341
該庫(kù)已為ESP32板定義了SPI_DEFAULT_FREQ為40000000。您還可以在初始化時(shí)更改頻率:
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是最受歡迎的顯示器,對(duì)于初學(xué)者來(lái)說(shuō),這2是更好的選擇。您可能會(huì)注意到LCD有一個(gè)很大的缺點(diǎn),可視角度大,在可視角度之外失去了一些顏色,屏幕變得不可讀。如果您有足夠的預(yù)算,則OLED或IPS LCD的可視角度要好得多。
軟件
速度
TFT_eSPI的性能最好。
受歡迎程度
在大多數(shù)情況下,我們通過(guò)在網(wǎng)絡(luò)上搜索示例來(lái)研究如何使用代碼庫(kù)。我已經(jīng)嘗試在Github中搜索四個(gè)庫(kù)關(guān)鍵字,Adafruit最受歡迎,而UTFT則排名第二。
難度
只有Adafruit GFX系列可以在用戶中完全配置代碼級(jí)別,其他3個(gè)庫(kù)需要在庫(kù)文件夾中進(jìn)行一些配置。而且Adafruit的門戶網(wǎng)站也非常好,有很多詳細(xì)的帖子可以教您如何使用其產(chǎn)品。
Round Up
ILI9341對(duì)于初學(xué)者來(lái)說(shuō)應(yīng)該是最有價(jià)值的展示。 Adafruit GFX庫(kù)對(duì)于初學(xué)者來(lái)說(shuō)應(yīng)該是最容易使用的,并且由于TFT_eSPI具有非常相似的方法簽名,因此稍后切換到更快的庫(kù)非常容易。
步驟24:可選閱讀:連接LCD而無(wú)需插線板
OLED需要14 V的電壓才能點(diǎn)亮像素,因此不容易斷開(kāi)分支板的耦合。另一方面,LCD(也包括IPS LCD)通常在3.3 V電壓下工作,與ESP32相同。在大多數(shù)情況下,LCD和ESP32之間僅需要LED控制電路,即晶體管和少量電阻。
在決定不使用分線板之前,首先閱讀數(shù)據(jù)表非常重要。引腳布局,引腳間距大小,示例電路連接和最大額定值都可以在數(shù)據(jù)手冊(cè)中找到。最大電壓尤為重要,您應(yīng)遵循額定值,否則將炸毀LCD。該芯片可以在3.3 V的電壓下工作,但LED可以在2.8-3.0 V的電壓下工作,因此它需要中間的一些電子器件,大多數(shù)數(shù)據(jù)手冊(cè)都帶有采樣電路。您可能會(huì)要求賣方將數(shù)據(jù)表的軟拷貝發(fā)送給您,或者只是通過(guò)型號(hào)將其發(fā)送給Google。
我的特別提示:我喜歡焊接引腳間距與LCD相同的FPC電纜幫助與MCU的連接。我在以下這些指導(dǎo)中使用了此技術(shù):
https://www.instructables.com/id/Connect-LCD-to-Ra 。..
https://www .instructables.com/id/Portable-WiFi-Ana 。..
步驟25:可選閱讀:顏色深度
如果您通讀彩色顯示器的數(shù)據(jù)表,可能會(huì)發(fā)現(xiàn)大多數(shù)彩色顯示器都可以支持18位色深(每個(gè)RGB通道為6位)。 18位色深可以提供比16位色深更好的圖像質(zhì)量(紅色和藍(lán)色通道為5位,綠色通道為6位)。但是,只有Ucglib實(shí)際上以18位色深(262,144色)運(yùn)行,其他3個(gè)庫(kù)都以16位色深(65,536色)運(yùn)行。這是因?yàn)?8位色深實(shí)際上要求每個(gè)像素傳輸3個(gè)字節(jié)(24位)的數(shù)據(jù),這意味著傳輸和存儲(chǔ)在內(nèi)存中所需的數(shù)據(jù)量要多50%。這是Ucglib運(yùn)行速度較慢,但圖像質(zhì)量更好的原因之一。
-
顯示器
+關(guān)注
關(guān)注
21文章
4890瀏覽量
139641 -
ESP32
+關(guān)注
關(guān)注
17文章
943瀏覽量
16900
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論