ESP32是一款強大的WiFi SOC,特別適用於物聯網WiFi設備上,對一些需要支持圖形界面的場景,ESP32+LVGL組合基本可以滿足需求。
LVGL的官方文檔簡單地描述了如何在ESP32上面移植LVGL,並且已經提供移植好的示例工程,開發者只需要作簡單的導入即可。LVGL關於ESP32的官方介紹頁面如下圖。
https://docs.lvgl.io/latest/en/html/get-started/espressif.html
以下是詳細的導入過程
1、從以上的文檔得知,LVGL官方創建了一個示例工程,lv_port_esp32,這個工程託管在github上面,但由於目前訪問github會出現不穩定的情況,所以,我們可以把github上的工程導入到gitee上,再通過gitee來進行下載,如下圖所示。
2、工程導入gitee成功後,就可以使用git clone命令,把工程項目下載到本地,如下圖所示。
命令:git clone https://gitee.com/embediot/lv_port_esp32
3、下載成功後,這個工程還沒有導入LVGL相關的代碼,LVGL相關的源碼和例程,是以組件的形式提供的,因此,LVGL的源碼保存在lv_port_esp32/components文件夾裡面,並且LVGL相關的源碼和例程,是使用git submodule的方式進行管理的,因此,我們需要更新submodule。
4、示例工程lv_port_esp32依賴三個submodule,分別是:
(1)lv_examples:這個是LVGL的示例demo,移植完之後可以使用這些demo驗證LVGL的運行。
(2)lvgl:這個是LVGL的原始碼,以C語言作為主要程式語言。
(3)lvgl_esp32_drivers:這個是一些移植和適配好的顯示屏和觸摸板的驅動代碼,LVGL為了方便開發者,已經幫我們適配好了一些比較常用的顯示屏和觸摸板。
5、這三個submodule的源碼是託管在github的,同樣由於github的訪問困難,需要把這三個submodule都同步到gitee,然後通過gitee進行更新,同步完之後,如下圖所示。
6、同步完成後,再修改lv_port_esp32/.gitmodules這個文件,把submodule的更新網址指向gitee,修改完成後,如下圖所示。
7、然後在 lv_port_esp32這個目錄下,執行以下命令,進行子模塊的下載,下載完成後,如下圖所示。
命令:git submodule update --init --recursive
8、至此,整個LVGL的工程就成功導入到ESP32裡面了,可以使用vscode打開進行開發,如下圖所示。
9、導入完成後,需要根據自己的硬體板卡,來配置LVGL的工程參數,主要是配置TFT-LCD的參數,如TFT_LCD的引腳位號,驅動方式,以及顯示參數;還有配置觸摸板的參數,如觸摸板的引腳位號,驅動晶片,等等。
10、作者採用的TFT_LCD驅動晶片是ILI9341,SPI驅動接口,RGB565的工作方式,採用的觸摸板是電阻觸摸,觸摸晶片是XPT2046,接口是SPI,具體的配置,可以參考ESP32的menuconfig裡面的內容,如下圖所示。
11、編譯工程後,燒錄到硬體板卡上,即可運行LVGL官方提供的演示demo,如下圖所示。