使用DOIT ESP32 DEVKIT V1驅(qū)動(dòng)屏幕ST7789的踩坑之旅

參考資料:
pass
目標(biāo):
使用DOIT ESP32 DEVKIT V1,通過驅(qū)動(dòng)TFT_eSPI,點(diǎn)亮屏幕ST7789
關(guān)鍵詞:
Arduino,ESP32,DOIT ESP32 DEVKIT V1,ST7789,240*240,TFT_eSPI,ILI9341

前言

最近開始研究單片機(jī),從最簡(jiǎn)單的Arduino開始
最終目標(biāo)是自己整一塊碼表,想著就先點(diǎn)亮屏幕
但實(shí)際發(fā)現(xiàn)ESP32系列非常混亂,除了芯片大家都叫ESP32以外,底板種類非常多
常見的有30針腳(Pin)和36pin,還有ESP32CAM這種異形規(guī)格的
這使得與屏幕連接(SPI協(xié)議)產(chǎn)生不少坑,本文將會(huì)分析一下自己過程中踩過的坑
本文主要使用DOIT ESP32 DEVKIT V1(后文略稱doit),通過TFT_eSPI(后文略稱TFT)來(lái)驅(qū)動(dòng)屏幕ST7789
Adafruit ST7789/ST7735也使用過,只用于和ESP8266連接(doit失敗了)
并且TFT是兼容了Adafruit的,因此略過Adafruit的驅(qū)動(dòng)

碼表測(cè)試中...

目錄

  1. 弄清自己的ESP32是什么底板,知道引腳有哪些
  2. 配置TFT的配置文件User_Setup.h
  3. 使用TFT提供的示例來(lái)點(diǎn)亮屏幕

1. ESP32底板的區(qū)別

ESP32只是指中間的芯片是ESP32
而下圖則是doit的底板,只是其中一種底板和芯片連接的方式(30pin)

本文主要介紹的也是該底板

另外還有這種36Pin的(不在本文討論范圍)

或者ESP32CAM(不在討論范圍)


引腳的不同就會(huì)導(dǎo)致其所包含的功能也不同
比如這張圖,包含了doit底板各個(gè)引腳的所帶的功能,所以連接引腳前務(wù)必要找到此類引腳說明(可以問賣家要)


注意其中的GPIO 23 22 21 19 18 5 也就是青色的這塊

略微普及一下,兩臺(tái)微型機(jī)(mcu和屏幕)連接,必須要走協(xié)議,就像人和人說話要選擇語(yǔ)言
I2C和SPI都是協(xié)議之一(本文主要介紹SPI)
而使用協(xié)議之前必須要選擇正確的引腳,這到現(xiàn)在為止一直讓你關(guān)注引腳的原因
上圖的MOSI SCL等都是每個(gè)引腳負(fù)責(zé)的功能
MOSI即主出從進(jìn)(mast out slave in),SCL串行時(shí)鐘,SDA串行數(shù)據(jù)線,如果一點(diǎn)點(diǎn)都不知道該知識(shí)的建議搜索此類的文章

常見的SPI的連接方式

再來(lái)看GMT130 ST7789屏幕上的引腳


GMT130 240*240P的屏幕

把屏幕上的針腳按名稱接上esp32上所對(duì)應(yīng)的針腳

百分百是可以點(diǎn)亮屏幕的

而且只需要關(guān)注其中2個(gè)引腳的連接方式

ESP32 屏幕
23或21 MOSI/SDA(SPI協(xié)議可以隨便選1個(gè),I2C可能需要選擇SDA引腳)
22或18 SCL/SCK


剩下的RES DC BLK 引腳理論上可以隨便插
但在doit的底板上需要避開GPIO2(2針腳同時(shí)控制了藍(lán)燈,會(huì)有bug)和RX TX引腳
分享下我的doit與GMT130(ST7789驅(qū)動(dòng))的引腳連接組合

// TFT的官方配置
#define TFT_MOSI 15 // In some display driver board, it might be written as "SDA" and so on.
#define TFT_SCLK 14
#define TFT_CS   5  // Chip select control pin
#define TFT_DC   27  // Data Command control pin
#define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL   22  // LED back-light

//我的配置1,完全按照引腳圖來(lái)配置
#define TFT_MOSI 21 
#define TFT_SCLK 22
#define TFT_DC   4  
#define TFT_RST  23  
//#define TFT_CS   34  // GMT130沒有CS引腳
//#define TFT_BL   35  // 背光不需要設(shè)置

//我的配置2,根據(jù)官方使用修改而來(lái)
#define TFT_MOSI 5   //官方使用15,對(duì)應(yīng)HSPI CS0引腳,我使用VSPI CS0,其中V指virtual
#define TFT_SCLK 18  //官方使用14,對(duì)應(yīng)HSPI CLK,我是用VSPI CLK
#define TFT_DC   4  
#define TFT_RST  22  
//#define TFT_CS   34  // GMT130沒有CS引腳
//#define TFT_BL   35  // 背光不需要設(shè)置

最后再來(lái)看個(gè)反面案例: Arduino_GFX驅(qū)動(dòng)2.4'SPI串口240x320TFT彩屏(ST7789)

引用原文:
TFT屏型號(hào)GMT024-8p10p-SPI VER1.1
金逸晨的,2.4寸,分辨率240x320,參數(shù)還不錯(cuò),淘寶價(jià)23.5元
試了TFT_eSPI.h,發(fā)現(xiàn)無(wú)法正常使用,所以又找了一個(gè)庫(kù)
...

其實(shí)TFT是可以驅(qū)動(dòng)的,此人可能沒有熟讀TFT的配置文件


image.png

點(diǎn)不亮的主要原因可能是GMT024有點(diǎn)奇葩

  1. 是它的BL必須接高電平
  2. CS(chip select)片選引腳必須接,而且可能只能接GPIO5和15.因?yàn)閐oit的引腳規(guī)定了


2. 配置TFT_eSPI

2.1 先下載TFT_eSPI的庫(kù)

2.2 配置文件

只有1個(gè)文件需要配置,即User_Setup.h,強(qiáng)烈建議先復(fù)制一份備份

image.png

眼尖的可以發(fā)現(xiàn),我按照屏幕的不同,使用不同的配置文件,這是可以在User_Setup_Select.h中進(jìn)行配置的
只啟用需要的配置文件

然后開始配置,作者分了4個(gè)Section

2.2.1 選擇屏幕的驅(qū)動(dòng)和屏幕尺寸

TFT基本涵蓋了大部分的屏幕驅(qū)動(dòng),如果你不知道自己的屏幕驅(qū)動(dòng)是什么

問賣家!

這里我們啟用ST7789,如果點(diǎn)不亮就換個(gè)_2

再選擇屏幕尺寸


2.2.2 定義針腳

第一段費(fèi)這么大力氣就是為了讓讀者理解定義針腳的重要性


2.2.3 定義啟用的字體

沒特別的需求就別動(dòng)配置,關(guān)掉某些字體可以節(jié)省存儲(chǔ)空間
另外自定義字體還沒研究,以后可能會(huì)研究下(我覺得中文輸出又麻煩又礙事,英文又不是看不懂沒必要把時(shí)間花這上面)


2.2.4 其他選項(xiàng)

主要是控制SPI協(xié)議的頻率,沒事別動(dòng)


3. 點(diǎn)亮屏幕

在Arduino編輯器里面隨便找個(gè)案例就行了
方便起見可以選擇一個(gè)偏小的160x128的案例, 因?yàn)轱@示的內(nèi)容都在240x240的范圍內(nèi)


image.png

這里我選擇了乒乓球的案例,并且屏幕正常點(diǎn)亮
如果你的屏幕沒點(diǎn)亮,請(qǐng)檢查接線,大概率是接錯(cuò)了
其他TFT的方法函數(shù)不再贅述,官方的案例非常多,想畫圖形,顯示圖片都有相應(yīng)的函數(shù)方法提供
實(shí)在不知道怎么辦請(qǐng)?zhí)醝ssue,我也是通過issue解決問題的


假裝這是GMT130的好了,我不想重接線了...

4. 其他注意事項(xiàng)

4.1 顯示方向

如果你屏幕顯示方向不對(duì)需要在setup函數(shù)中修改tft.setRotation(1); //參數(shù)0 1 2 3 四個(gè)方向

4.2 紅綠顯示色相反

如果你明明選擇紅色卻打印了綠色,比如

tft.setTextColor(TFT_RED);    //設(shè)置了字體是紅色
tft.drawString("hello world",0,0);  //實(shí)際打印了綠色

需要修改"User_Setup.h"中的此處

image.png

4.3 黑白相反

打印了白色卻顯示黑色,則修改此處(去掉其中一個(gè)注釋)


image.png

4.4 所謂2.4寸 ST7789 240*320屏幕的坑

即剛才演示的那塊屏幕
淘寶把它的驅(qū)動(dòng)標(biāo)記為ST7789V或ST7789,你用ST7789是驅(qū)動(dòng)不了它的


image.png

實(shí)際上它的驅(qū)動(dòng)是ILI9341


image.png

同時(shí)你可以在"User_Setup.h"中找到
如果你還購(gòu)買的是金逸晨的屏幕,則大概率要選擇_2驅(qū)動(dòng),不然會(huì)花屏

如果有問題可以留言,關(guān)于TFT使用的問題請(qǐng)去github提issue,官方回復(fù)非???/p>

--全文完--

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容