參考資料:
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)

目錄
- 弄清自己的ESP32是什么底板,知道引腳有哪些
- 配置TFT的配置文件
User_Setup.h - 使用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í)的建議搜索此類的文章

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

把屏幕上的針腳按名稱接上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的配置文件

點(diǎn)不亮的主要原因可能是GMT024有點(diǎn)奇葩
- 是它的BL必須接高電平
-
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ù)制一份備份

眼尖的可以發(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)是什么
問賣家!

再選擇屏幕尺寸

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)

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

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"中的此處

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

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

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

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

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