[教程] esp32平臺下運行l(wèi)vgl,使用屏幕st7735s 128*128詳細配置
寫在開頭
博主最近在淘寶閑逛的時候發(fā)現(xiàn)有一家店在賣8塊錢一片的彩屏,比0.96寸oled屏都便宜,看到這個價格就點了進去,發(fā)現(xiàn)兩片包郵,于是購買兩片,回來嘗試跑一下esp32的lvgl,但是運行官方的例程中出現(xiàn)了許多問題,百度去找也是很混亂,后面自己摸索了一下驅(qū)動的源碼,把屏幕驅(qū)動給搞定了。
關(guān)于lvgl
LVGL是一個C語言編寫的免費的開源圖形庫,其提供了用于嵌入式GUI的各種元素。用戶可以利用豐富的圖形庫資源,在消耗極低內(nèi)存的情況下構(gòu)建視覺效果豐富多彩的GUI 。只需 64kB 閃存和 8kB RAM 就足以滿足簡單的用戶界面。LVGL 可以驅(qū)動單色OLED、TFT 顯示器、監(jiān)視器或任何其他顯示器。c 代碼使其可在任何平臺上使用,例如 NXP LPC 或 iMX、STM32、PIC、Arduino、ESP32、Raspberry 等。LVGL 的源碼托管在 GitHub 上,擁有 MIT許可。 真正的完全免費。
關(guān)于ESP32
ESP32 系列模組具備卓越的性能和豐富的外設(shè),集Wi-Fi、傳統(tǒng)藍牙、低功耗藍牙為一體,提供高度集成的解決方案,廣泛適用于各類物聯(lián)網(wǎng)應(yīng)用。
正是因為esp32的豪華配置,可以配合其esp-idf框架在其平臺上輕松運行l(wèi)vgl,個人做了一個例程cpu占用只有10%左右。
關(guān)于移植
由于官方的例程現(xiàn)在還沒有適配lvgl8,所以博主嘗試了一下移植,但是不能運行,所以說還是先拿lvgl7用著。
獲取lvgl官方的lvgl例程
下載地址:https://github.com/lvgl/lv_port_esp32
要注意的是,這個是一個項目,我們自己使用的時候可以直接從lvgl官方庫克隆代碼,同時克隆esp32下的驅(qū)動,不必用這個項目。
打開項目的components文件夾,我們發(fā)現(xiàn)相關(guān)的庫已經(jīng)導(dǎo)入好了。

我們可以先從這個項目入手,先移植跑通后繼續(xù)開發(fā)。
關(guān)于lvgl_esp32_drivers
這個是lvgl官方賬號下的一個項目,主要用于在esp32下適配lvgl,包括屏幕,觸摸等驅(qū)動
以下是支持的屏幕和觸摸芯片:
屏幕
Display ControllerTypeInterfaceColor depth (LV_COLOR_DEPTH)Swap RGB565 color (LV_COLOR_16_SWAP)
ILI9341TFTSPI16: RGB565Yes
ILI9163CTFTSPI16: RGB565Yes
ILI9486TFTSPI16: RGB565Yes
ILI9488TFTSPI16: RGB565No
HX8357B/HX8357DTFTSPI16: RGB565Yes
ST7789TFTSPI16: RGB565Yes
ST7735STFTSPI16: RGB565Yes
FT81xTFTSingle, Dual, Quad SPI16: RGB565No
GC9A01TFTSPI16: RGB565Yes
RA8875TFTSPI16: RGB565Yes
SH1107MonochromeSPI1: 1byte per pixelNo
SSD1306MonochromeI2C1: 1byte per pixelNo
PCD8544MonochromeSPI1: 1byte per pixelNo
IL3820e-PaperSPI1: 1byte per pixelNo
UC8151D/ GoodDisplay GDEW0154M10 DESe-PaperSPI1: 1byte per pixelNo
FitiPower JD79653A/ GoodDisplay GDEW0154M09e-PaperSPI1: 1byte per pixelNo
Supported indev controllers
XPT2046
FT3236, FT6X36
FT6206 controllers should work as well (not tested)
STMPE610
FT81x (Single, Dual, and Quad SPI)
我購買的屏幕使用的是st7735s的芯片,測試可以完美驅(qū)動
配置項目
將項目克隆下來
Bash
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
--recurse-submodules 同時克隆子模塊
下載后,我們切換一下驅(qū)動到最新分支,例程中的版本存在問題,建議更新:
Bash
cd components/lvgl_esp32_driversgit switch master
搞定之后,我們就可以用vscode打開項目了,這里我使用的是樂鑫的idf插件

按下ctrl+shift+p,按照圖片添加vscode配置文件夾

然后點擊下方設(shè)置,進入配置,記得點擊esp32c3那里切換下芯片,變成esp32:
修改項目配置
修改編譯優(yōu)化級別,縮小編譯文件大小

修改屏幕大小,開啟交換RGB565顏色

修改驅(qū)動

降低spi頻率,要不然畫面會撕裂

修改引腳為自己連接的IO口

(可選)開啟幀率顯示

修改完后點擊上方保存。
修改驅(qū)動代碼
需要調(diào)整一部分代碼,不然有一部分會花屏。
原理:ST7735s是為128*160屏幕設(shè)計的,我們是128*128的屏幕,需要跳過一部分像素。

編譯,上傳項目測試
如果沒有做自動下載電路,需要自己進入下載模式


如果沒有問題應(yīng)該是上圖所示。
開啟lvgl例程測試
需要改動一下,下載的這個程序如果是st7735只會顯示hello world

編譯,重新燒寫,如果正常就會自動運行l(wèi)vgl的demo
自己項目使用lvgl
創(chuàng)建新項目
創(chuàng)建components
下載驅(qū)動:https://github.com/lvgl/lvgl_esp32_drivers/tree/master
下載lvgl(注意下載v7的):?https://github.com/lvgl/lvgl/tree/release/v7
把下載的放入components中
打開配置編輯器編輯配置
從官方例程中復(fù)制main.c的代碼,修改制作界面