基于Arduino框架下的ESP32移植LVGL教程

??這篇文章將成為一個(gè)教程--關(guān)于如何在Arduino框架下ESP32移植LVGL(Light and Versatile Graphics Library)。學(xué)習(xí)之余,在此寫下我的學(xué)習(xí)筆記。
關(guān)于LVGL
??簡(jiǎn)而言之,LVGL是一個(gè)具有廣泛功能的輕量圖形庫?;旧线m用于所有的顯示器,因?yàn)槠浔旧聿皇荓CD驅(qū)動(dòng)庫---它依賴于其他額外的庫來驅(qū)動(dòng)顯示器。此外,它還是一個(gè)開源庫,在此附上開源鏈接。
硬件軟件
硬件:
· ESP32開發(fā)板
· 帶有SPI接口的LCD
· USB供電線
軟件:
· Platform IO(也可以使用Arduino IDE,本教程中使用前者)
·?TFT_eSPI或其他顯示屏驅(qū)動(dòng)庫(例如Adafruit GFX Library)
開發(fā)環(huán)境
??對(duì)于本教程,我將使用PlatformIO開發(fā)環(huán)境。該IDE相較于Arduino IDE,個(gè)人使用感覺更加便捷容易。
??要開始使用 PlatformIO,首先,你需要下載它。實(shí)際上,它是 Visual Studio Code 的一個(gè)附加組件——可擴(kuò)展的文本編輯器。
安裝后,可以創(chuàng)建你的第一個(gè)項(xiàng)目。使用方法在此就不贅述。?

硬件設(shè)置
本教程中,使用是的1.44寸TFT屏模塊/SPI,驅(qū)動(dòng)IC是ST7735,連接ESP32開發(fā)板如下

移植LVGL前驅(qū)動(dòng)LCD
??首先,你需要一個(gè)在 LVGL 之外工作的顯示器——只有它的驅(qū)動(dòng)程序庫。根據(jù)顯示類型(SPI、I2C、并行),有多種選擇。如果你使用 Adafruit 的(或具有相同驅(qū)動(dòng)器 IC 的類似 LCD)顯示器,則可以使用 Adafruit 庫。你還可以使用基于 Adafruit 庫的Bodmer 的 TFT_eSPI庫。如果你已經(jīng)熟悉 eSPi 庫,則可以使用它。你還可以為顯示器編寫你自己的幾個(gè)驅(qū)動(dòng)程序函數(shù)——這樣你將節(jié)省一些程序內(nèi)存,因?yàn)?LVGL 只需要上述庫中的一些函數(shù)。本教程中使用的是TFT_eSPI。
TFT_eSPI驅(qū)動(dòng)TFT顯示屏
??你可以在PlatformIO中直接下載,或從GithubTFT_eSPI獲取,也可以直接獲取本教程的驅(qū)動(dòng)代碼。
??將庫文件添加至工程后,需要編輯修改?User_Setup.h
文件以滿足你的要求。以下代碼為本教程
此外,還需實(shí)例化一個(gè)tft對(duì)象并初始化
至此,LCD屏幕驅(qū)動(dòng)完成。
ESP32移植LVGL
??當(dāng)LCD屏幕啟動(dòng)并運(yùn)行時(shí),下一步就是使LVGL適配你的顯示設(shè)置。首先,下載LVGL至你的PlatformIO工程中,下載方法同上TFT_eSPI。本教程使用的@8.2.0版本。
ps:并非本教程中所有內(nèi)容對(duì)不同版本的lvgl完全適用。
編輯配置文件
??一開始我們需要配置一些 LVGL 庫。轉(zhuǎn)到項(xiàng)目中的 LVGL 文件夾,找到“l(fā)v_conf_template.h”文件。將其重命名為“l(fā)v_conf.h”。然后,打開它進(jìn)行編輯。在里面你會(huì)發(fā)現(xiàn)一行告訴你
“將這個(gè)文件復(fù)制并重命名為?lv_conf.h
并放至?lvgl
文件夾”。
首先,您應(yīng)該將第一個(gè)定義更改為如下所示:
然后,找到一行:
使用 Arduino 時(shí),您需要將其值更改為 1:
??雖然此文件中有更多設(shè)置,但需要更改這兩行才能在 Arduino 系統(tǒng)上啟動(dòng)一個(gè)簡(jiǎn)單的 LVGL 示例。此外,如果你將 LV_TICK_CUSTOM 的值保留為 0,則屏幕不會(huì)定期更新或在屏幕觸摸后更新。
編輯main.cpp文件
??包含LVGL庫
??注意到上面的 include 中有一條很長(zhǎng)的路徑。通常它應(yīng)該像這樣工作:
??但有時(shí) PlatformIO 決定不查找所需的頭文件,你將不得不從當(dāng)前文件編寫一個(gè)相對(duì)路徑。
??接下來,讓我們創(chuàng)建一些變量:
編寫回調(diào)函數(shù)
??編寫回調(diào)函數(shù),用于將緩沖區(qū)的內(nèi)容復(fù)制到顯示器的特定區(qū)域。
設(shè)置功能
??當(dāng)我們完成以上步驟后,需要將所需代碼添加至?setup()
函數(shù)中:
??編譯代碼并燒錄,至此,我們的LVGL移植完畢。
教程源碼鏈接及其他
教程源碼鏈接:https://github.com/Yogurt-994/MyESP32Project/tree/master/NODEMCU-32_LVGL_JSON
LVGL 官方網(wǎng)站:https://lvgl.io/
百問網(wǎng)韋東山LVGL 中文站:http://lvgl.100ask.net/8.2/index.html