??LVGL是一個C語言撰寫的免費的開源圖形庫,其提供了用于嵌入式GUI的各種元素,用戶可以利用豐富的圖形庫資源,在消耗極低記憶體的情況下構建視覺效果豐富多彩的GUI ,只需 64kB 閃存和 8kB RAM 就足以滿足簡單的用戶界面,LVGL 可以驅動單色OLED、TFT 顯示幕、監視器或任何其他顯示幕,c 代碼使其可在任何平臺上使用,例如 NXP LPC 或 iMX、STM32、PIC、Arduino、ESP32、Raspberry 等,LVGL 的原始碼托管在 GitHub 上,擁有 MIT許可, 真正的完全免費,

??作為ESP32學習的后續,ESP32有充足的記憶體和計算資源去運行GUI,LVGL這兩年發展態勢迅猛,Github的star和統計的使用者數量蹭蹭的往上長,直逼MCU領域的TOP1,加上MIT許可、充足的設計資源、低記憶體占用、簡易的上手程度 等特點,自然想在ESP32上運行LVGL看看,剛開始還以為需要自己手動去移植LVGL內核、螢屏驅動、觸摸驅動,直到翻了翻了Github發現竟然有配套ESP-IDFSDK的Demo,并且已經包含了眾多液晶和觸摸IC驅,動,,,,,,淦!那我之前還費那老勁偏要搞自己的easyio庫干毛,不禁思考人生,
1、LVGL支持的LCD驅動IC和觸摸IC型號
- LCD驅動IC支持:ILI9341、ILI9481、ILI9486、ILI9488、ST7735S、ST7789、ST7796S、HX8357、GC9A01、SH1107、SSD1306、SH1107、FT81X、IL3820、JD79653、UC8151D、RA8875 等數十種LCD驅動IC,
- 觸摸驅動IC支持:XPT2046、FT6x06、STMPE610、ADCRAW、FT81x、RA8875,
??個人僅測驗過 ILI9341 和 ST7789V,可以完美驅動并運行顯示,下面以這兩種LCD驅動IC為代表,介紹下編譯ESP32運行LVGL例程的程序,
2、獲取LVGL的ESP32例程
Github原始碼地址:lv_port_esp32
首先閱讀README,依賴的SDK版本為 ESP-IDF-V4.2,使用的LVGL版本為 V7.9,

ESP-IDF-V4.2環境搭建可以看我這篇博客:Windows下基于ESP-IDF | Cmake | VScode插件的 ESP32 開發環境搭建
我的IDF環境早已搭建完畢,詳細程序可見上面鏈接,這里直接來獲取LVGL的ESP32例程,
clone原始碼,為方便尋路徑就直接放到IDF同級目錄下,遞回clone:git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git

注意:上面的clone要用遞回,直接git clone https://github.com/lvgl/lv_port_esp32.git 會導致components檔案夾下缺失子模塊,看到的檔案夾內容是空的,從而編譯失敗,而完整的lv_port_esp32占200多MB,缺失了子模塊的可沒那么多,
用的時候先看一眼README檔案,正確的操作是:git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git

3、圖形化工具配置工程,設定LCD驅動IC引數
很快啊,clone就做好了,有了原材料,下面開始配置工程,
- 打開快捷方式
ESP-IDF 4.2 CMD,

- 移動到剛才的工程目錄,
cd ..\lv_port_esp32 - 打開圖形化工具,配置工程,
idf.py menuconfig

- 移動游標:
Componment config>>>LVGL TFT Display controller


- 1、
更改螢屏驅動IC資訊, - 如下圖配置:據測驗,ili9341 和 st7789V 實際的配置方式略有不同,
螢屏顯示方向和顯示反轉這兩個他倆是反的,還請留意,如螢屏顯示方向設定錯誤會造成顯示花屏,


- 2、
配置LCD與ESP32連接的GPIO引腳序號, - 將游標移動到最后一行,
Display Pin Assignments, - 為了能然讓
ESP32的SPI能以80MHz通信,需要使用SPI的IO_MUX默認輸出引腳,RST、D/C、BLK可以任意IO映射,我的硬體配置如下,


- 3、
LVGL配置項, - 回傳前兩級目錄,找到
Componment config>>>LVGL configuration,

- 設定LCD的像素解析度,我用的螢屏是
320x240的,其他引數請按照下圖,

- 4、
LVGL配置項, - 回傳前兩級目錄,找到
Componment config>>>lv_examples_configuration,

- 默認運行的Demo是
Show demo widgets,當然也可進入后選擇其他Demo來運行, - 這里就按
Show demo widgets來,不做修改,

- 5、
保存,退出, - 按
s保存,回車確認保存,之后按幾次Esc,退出配置工具,

4、編譯、下載、運行顯示
- 退出圖形化配置工具,回到了命令列視窗,
- 編譯工程:
idf.py build,

- 編譯成功后,根據自己
ESP32板子的埠,下載:idf.py -p COM26 flash,

- 最后的運行顯示效果,
- ST7789,運行
Show demo widgets,

- ili9431,運行
Benchmark your system,

更多資源
LVGL官方在線檔案 - PC模擬器:PC模擬器
樂鑫 - LVGL圖形庫檔案:LVGL圖形庫
NXP GUI Guider 開發工具:GUI Guider
注意事項
- 該
Demo對ST7789的適配可能部分有誤,明明landscape應該是橫屏,而portiait應該是豎屏,到了ST7789卻全都反過來了, - 如果出現花屏,建議先嘗試降低SPI時鐘速率,再嘗試更改顯示方向,
- 該Demo的LCD驅動框架,沿用IDF的
lcd例程,可嘗試自行添加驅動,在最初點ST7789時遇到花屏問題遲遲不能解決,改動了驅動的配置原始碼后可正常顯示,不過后來發現之前導致花屏的原因,是Demo中把ST7789的橫豎屏方向搞反了而造成的, - 關于幀率,以下是在
40MHz-SPI下,運行Benchmark your system的測驗成績,不明意思,36FPS可能因為用了區域重繪吧, - 在我的
easyio驅動庫中,有對ESP32的SPI-雙緩沖環形DMA進行過整合,刷整屏的測驗成績為:
(刷提前解碼好的圖片,等待上一幀DMA發送完成前只有資料的轉移而無計算,單純的為了測驗SPI-環形DMA的效率)
80MHz 刷屏可達 53.5FPS,(理論最大值:80x1000x1000 / 320 /240 /2/8 = 65.1)
40MHz 刷屏可達 30.2FPS,(理論最大值:40x1000x1000 / 320 /240 /2/8 = 32.5) - 友情推薦一波自己為
ESP-IDF適配的開源驅動庫:ESP32驅動庫 - Easyio

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301360.html
標籤:其他
上一篇:智慧樓宇、消防系統、門禁管理、暖通空調、給排水、變配電、設備管理、停車管理、能源管理、故障檢測、客流統計、運行控制、權限分配、物聯網、Axure原型、rp原型、產品原型
