衆所周知,掌控板在創客教育中用的非常廣泛,它是一塊基於 ESP32 的學習開發板。大家對掌控板編程,用的比較多的都是圖形化編程的方式,比如 mPython、Mind+ 等。但是,既然掌控板是基於 ESP32 芯片的,所以我們也可以用 Arduino 軟件對其編程。所以,有時間的話,我準備給大家分享一系列用 Arduino 代碼對掌控板(ESP32)編程的教程:用 Arduino 玩轉 ESP32 與掌控板系列。
用 Arduino 玩轉 ESP32 與掌控板系列歷史文章目錄:
不好意思,本期課程用了那麼殺馬特的封面,但是這張圖卻充分表達了彩屏的特點:可以顯示五彩斑斕的顏色。
概述
一直在關注本系列教程的朋友,應該知道,前面幾期課程,我們基本用到了掌控板自帶的 OLED 顯示屏來顯示內容,但是掌控板自帶的 OLED 顯示屏是一塊單色屏,看久了單色顯示屏,你是不是有點膩了呢?
所以從本期內容開始,我將通過幾篇教程,帶大家玩轉彩色顯示屏。本篇是彩屏顯示的第一期:ESP32彩屏顯示入門:我要五彩斑斕的黑,通過本篇課程內容的學習,我將帶大家入門彩屏的使用。
由於掌控板上已經連接了一塊屏幕了,所以本期課程使用的硬件不是掌控板,而是另一塊 ESP32 開發板:DFRobot 出品的 FireBeetle-ESP32。關於這塊開發板的介紹,我在這個系列的第一期就已經介紹過了,大家可以直接去第一期查看:ESP32 概述與 Arduino 軟件準備。
爲什麼選擇這塊開發板呢?因爲 DFRobot 專門爲這塊開發板設計了簡單方便的擴展板,因此在後面項目接線的時候,就會特別方便;而且 DFRobot 還爲它設計了好看的矢量圖,作爲一個顏值控,後續繪製接線圖怎麼能少得了它!當然最重要的一個原因是,我手裏除了掌控板,就這麼一塊 ESP32 的開發板……(這麼牽強的理由,你來打我呀)
如果你選擇的是其他 ESP32 開發板,也是沒有問題的,接線方法和程序也是完全兼容的。
常用彩屏介紹
有了 ESP32 開發板,那麼又有哪些彩屏可以使用呢?不管是從尺寸、分辨率、驅動芯片類型,其實是有非常多的選擇的。最常用的一些彩屏尺寸有 1.5 寸、2.0 寸、2.4 寸、2.8 寸、3.2 寸等;分辨率類型有:128×160、240×240、240×320 等;驅動芯片型號有 ST7735、ST7789、ILI9341 等。如下圖所示,即爲一些創客製作中常見的彩屏。
(圖片來自:https://www.instructables.com/id/Select-Color-Display-for-ESP32/)
想要了解詳細的彩屏選型,可以直接去 Instructables 上看下面這篇評測文章,寫的非常詳細,這裏不再重複造輪子了。
Select Color Display for ESP32:https://www.instructables.com/id/Select-Color-Display-for-ESP32/
在本期教程中,我使用的是一款 2.4 寸的 TFT_LCD 的彩屏,它的驅動芯片是 ILI9341,分辨率爲 240×320,如下圖所示。
這塊屏幕的詳細參數如下表所示:
這塊彩屏採用的是 SPI 接線方式,引腳定義如下:
SPI (Serial Peripheral Interface),即串行外圍設備接口,是一種高速全雙工的通信總線。本質上和前面課程用過的 UART 串口、I2C 一樣,是一種通訊協議。
SPI 的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設備和一個或多個從設備。SPI 通訊使用 3 條總線( SCK、MOSI、MISO)及片選線(CS 或 SS):
- MISO:Master Input Slave Output,主設備數據輸入,從設備數據輸出;
- MOSI:Master Output Slave Input,主設備數據輸出,從設備數據輸入;
- SCK:Serial Clock,時鐘信號,由主設備產生;
- CS:Chip Select,從設備使能信號,由主設備控制。
彩屏驅動庫
針對不同的彩屏驅動芯片,常用的 Arduino 彩屏驅動庫也有很多種選擇,在 Arduino IDE 的庫管理器中,搜索“TFT”就可以看到許多彩屏驅動庫,比如:
- Arduino-ST7789-Library:https://github.com/ananevilya/Arduino-ST7789-Library
- Adafruit-ST7735-Library:https://github.com/adafruit/Adafruit-ST7735-Library
- TFT_eSPI:https://github.com/Bodmer/TFT_eSPI
本教程使用的庫是 TFT_eSPI
,選擇這個庫的原因有:
- 該庫在 GitHub 上 Star 的人數比較多,而且至今還在保持活躍地更新,所以可靠性、專業型比較有保證;
- 支持各種常用的驅動芯片,比如 ST7735、ST7789、ILI9341 等,兼容性比較好;
- 據說這個庫的性能也是最出色的。這裏我沒有詳細考究與測試,而且對大部分用戶來說也不重要。
後面的彩屏系列教程,如無特殊說明,我們就以這個庫爲例。
TFT_eSPI 庫文件安裝
在 Arduino 中打開庫管理器,搜索 TFT_eSPI
,然後點擊安裝即可。
TFT_eSPI
庫雖然有很多優勢,但是針對普通用戶可能也有一個比較麻煩的地方,那就是安裝完這個庫之後,我們需要針對不同的彩屏,對這個庫進行一些配置才能使用。
轉到 Arduino 庫文件安裝目錄,打開 TFT_eSPI
庫所在位置,以 Windows 系統爲例,該庫的安裝目錄一般爲:
C:\Users\<用戶名>\Documents\Arduino\libraries\TFT_eSPI
如果是你使用的是綠色版 Arduino 的話,該庫的安裝目錄一般爲:
<Arduino安裝目錄>\Arduino\portable\sketchbook\libraries\TFT_eSPI
然後在庫文件目錄中打開 User_Setup.h
這個文件,根據自己的屏幕類型與驅動芯片類型進行相應的設置,這裏以我使用的 2.4 寸 ILI9341 TFT LCD 彩屏爲例。如果你有耐心的話,想要仔細研究各種設置選項的話,也可以仔細閱讀這個文件中的說明,按照它的示例進行設置即可;如果你嫌一堆英文看起來比較麻煩的話,直接按照我的教程設置也是可以的。
首先需要設置的是彩屏的驅動芯片類型,這塊彩屏使用的驅動芯片爲 ILI9341,所以這裏我們註釋掉其他芯片,只留下 #define ILI9341_DRIVER
這行,如下圖所示:
接着設置彩屏連接的 IO 引腳,先註釋掉下圖中所示的默認引腳設置:
然後將引腳設置修改爲:
// FireBeetle ESP32
#define TFT_MISO 19
#define TFT_MOSI 23 // fixed pin, SDA -> MOSI (IO23)
#define TFT_SCLK 18 // fixed pin, SCL -> SCK (IO18)
#define TFT_CS 27 // Chip select control pin D4 (IO27)
#define TFT_DC 25 // pin of your choice D2 (IO25)
#define TFT_RST 26 // pin of your choice D3 (IO26)
如下圖所示:
修改完成後的 User_Setup.h
文件如下:
接線圖
根據前面 TFT_eSPI 驅動庫的設置,ESP32 與 彩屏的接線也比較簡單,只要按照代碼中對應接線即可。
注意:此處代碼中的引腳編號,我使用了 IOx 的編號,而不是 Dx 的編號形式,因爲 IOx 編號的形式針對所有 ESP32 開發板都適用。FireBeetle-ESP32 開發板的 IOx 與 Dx 編號對應關係如下圖所示:
接線圖如下:
Hello 彩屏
所有這些都設置完成之後,我們就可以愉快地編寫程序、查看效果啦!
爲了更快的體驗彩屏的顯示效果,本篇暫時先不講解彩屏的編程與代碼,我給大家先上傳 TFT_eSPI 庫自帶的一些示例程序,看看效果。彩屏示例程序的路徑爲:
Arduino菜單欄→文件→示例→TFT_eSPI
如下圖所示:
然後隨便挑選幾個示例程序,上傳到 ESP32 中 查看效果。
注意:注意由於我把視頻轉成了 GIF,所以看起來可能稍微有點卡頓,實際效果是很順滑的。
看完這些“五彩斑斕的黑”,是不是馬上想要入手一塊彩屏、然後編寫代碼玩玩呢?別急,下期教程,正式教你彩屏代碼編程!
總結
在本章中,我們學習了:
- 常見的彩屏類型與常用的彩屏驅動庫;
- TFT_eSPI 驅動庫的設置方法;
- 彩屏與 ESP32 的接線方法;
- 上傳程序,查看彩屏的顯示效果。
這只是彩屏系列的入門篇,後面還會再寫幾篇專門對彩屏的編程進行詳細介紹,感興趣的話,可以收藏點贊,我們下期見!