LVGL是一个高效的图形库,基于TFT_eSPI,支持ESP32,但是支持的最好的是ESP-IDF和Arduino环境,并不能直接在MicroPython中使用。
好在LVGL官方从MicroPython fork了一个版本,名为lv_micropython,也就是带lvgl的MicroPython。
不过LVGL并未像MicroPython那样,为每个开发板发布编译好的bin文件,只能自己动手了。
接下来就讲讲怎么为ESP32编译原版MicroPython和带lvgl支持的MicroPython。
首先是配置esp-idf
和micropython
,一般来说只有MicroPython编译通过的情况下lv_micropyhon才有可能成功。
配置过程中需要科学上网。
先把micropython
和esp-idf
克隆下来,esp-idf要使用4.4分支的。
cd ~
git clone https://github.com/micropython/micropython.git
git clone -b v4.4 https://github.com/espressif/esp-idf.git
安装配置esp-idf
cd ~/esp-idf
git submodule update --recursive --init
./install.sh
source export.sh
编译MicroPython
cd ~/micropython
git submodule update --recursive --init lib/berkeley-db-1.xx
cd ports/esp32
make
# 编译其它型号的开发板的
make BOARD=GENERIC_C3 BUILD=esp32c3
lv_micropython
以下才正式是lv_micropython的, 从分支release/v8
开始支持更多的板子包括C3,可直接clone最新的版本。
cd ~
git clone https://github.com/lvgl/lv_micropython.git
cd ~/lv_micropython
# 只更新必要的submodule即可
git submodule update --recursive --init lib/berkeley-db-1.xx
git submodule update --recursive --init lib/lv_bindings
make -C mpy-cross
make -C ports/esp32 submodules
make -C ports/esp32 LV_CFLAGS="-DLV_COLOR_DEPTH=16 -DLV_COLOR_16_SWAP=1" BOARD=GENERIC_SPIRAM
完了也可以把3个bin文件合成为一个
make deploy -b 115200 -p /dev/tty.wchusbserial14110 BOARD=GENERIC_SPIRAM
编译好后,切换到ports下对应的build目录,刷固件。
esptool.py -p /dev/tty.wchusbserial14110 -b 460800 --chip esp32 erase_flash
esptool.py --chip esp32 --port /dev/tty.wchusbserial14110 --baud 460800 write_flash -z 0x1000 firmware.bin
# 下面这个也可以,但有时候会出问题
esptool.py -p /dev/tty.wchusbserial14110 -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x0 bootloader/bootloader.bin 0x8000 partition_table/partition-table.bin 0x10000 micropython.bin
lv_micropython当前版本是1.18,比MicroPython官方的1.19.1落后一个版本,而且BUG较多。
附上 ESP32版MicroPython with lvgl固件下载地址:firmware.bin 1.18版 (访问密码: 3162),仅可用于ESP32,不适用于C3/S2/S3等。
连接屏幕
我用的是1.8的TFT屏,128*160的,和ESP32开发板的连接法:
BLK可以不接线,GND连接开发板上的GND,VCC接开发板上的3v3,剩下的接口对应esp32的引脚如下所示:
LCD | ESP32开发板 |
---|---|
SCL | IO 22 |
SDA | IO 21 |
RES | IO 26 |
DC | IO 25 |
CS | IO 5 |
测试
固件刷好后,写个程序测试下:
import lvgl as lv
from ili9XXX import st7735, MADCTL_MX, MADCTL_MY,PORTRAIT,LANDSCAPE
lv.init()
# ESP32连TFT屏需按此法连接,默认自动初始化
disp = st7735(mhz=3, miso=26, mosi=21, clk=22, cs=5, dc=25, rst=26, width=128, height=160,rot=PORTRAIT)
scr = lv.obj()
btn = lv.btn(scr)
btn.align_to(lv.scr_act(), lv.ALIGN.CENTER, 0, 0)
label = lv.label(btn)
label.set_text("Hello2")
# Load the screen
lv.scr_load(scr)
更多用法见 lv_binding_micropython README
写在后面
编译默认的开发板也就是ESP32顺利通过,带上BOARD=GENERIC_SPIRAM
也正常,但是其它板子会报错,比如指定BOARD=GENERIC_C3
也就是ESP32-C3,编译通不过,S2/S3也都不行。
而MicroPython在ESP-IDF 4.4下编译C3/S2/S3等开发版都是正常的,所以还是lv_microptython本身的BUG。
从README和build workflow来看,项目维护者所使用的开发板是ESP32,至于C3/S2/S3他们或许根本没有测试。从lv_binding_micropython下的issues可以看出他们解决问题的速度是比较慢的,更多的是指望社区贡献代码,这也说明了LVGL官方对lv_micropython
这个项目本身不是特别重视,没有分出足够的人力,所以如果你有不同的开发板,要么自己动手能力够强,能够解决编译过程中出现的错误,要么就直接换个目前支持的板子。比方说我自己,就下单了一个ESP32-WROVER-E N4R8(4M Flash 8M PsRAM)的,一路踩坑无数,真是懒得折腾了。
大佬,我没梯子,根本无法自己编译固件。我也是购买的esp32 wrover. 能否发一下ESP32-WROVER-E N4R8(4M Flash 8M PsRAM) 的固件到我的邮箱784092080@qq.com,非常感谢!
已发,请查收。
你好, 我是新手, 依網頁 安裝, 到 make 出錯, 請問如何解決?
lv_micropython> make -C mpy-cross
make : 無法辨識 ‘make’ 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。請檢查名稱拼字是否正確,如果包含路徑的話,請
確認路徑是否正確,然後再試一次。
位於 線路:1 字元:1
+ make -C mpy-cross
+ ~~~~
+ CategoryInfo : ObjectNotFound: (make:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
或可幫忙编译固件? ESP32 S3 wroom 1n16r8, 謝謝
S3我也编译通不过。不过你这个问题明显是缺少依赖,没有安装gcc make等环境。
yjx446@163.com
正准备研究一下LVGS,麻烦楼主大拿发我一个固件,ESP32 WROOM -32的开发板,非常感谢!
已发,请查收。
大佬您好,正在研究lvgl+micropython,麻烦弄一下固件,ESP32-WROOM-32的开发板,谢谢
已发
大佬您好,ESP32-WROOM-32的开发板,我跟上面的一个人一样,也是运行 import lvgl as lv 没问题,第二句:scr = lv.obj()。立刻崩溃重启。可以麻烦您发一份固件给我吗,1483127946@qq.com
正在学习LVGL,麻烦楼主大佬发我一个固件,ESP32 WROOM -32的开发板,非常感谢!823653379@qq.com
已发
大佬, 可以麻烦帮忙编译个esp32-PICO-D4固件吗?谢谢
不好意思,ESP32好久没玩,本地没那个环境了。
好的, 谢谢大佬.
大佬您好,ESP32-WROOM-32的开发板/esp32s3开发板N16R8,刷入过不同版本的lvgl,例如 ;esp32s3_lvgl.bin 2140KB的,都是同一个现象:运行 import lvgl as lv 没问题,第二句:scr = lv.obj()。立刻崩溃重启。
麻烦您给个bin,我再测试,谢谢大佬。
已发,请查收。
还是大佬厉害,我死活编译不过,不停的换环境,编译过了,不知道哪个参数有问题,刷进板子后,esp32 一致重启,搜索了一圈都找不到原因,您能提供一个带PSRAM的固件吗,clolor是16位的?万分感谢!(595033218@qq.com)
已发
大佬您好,正在研究lvgl+micropython, 可以发一下固件吗?谢谢
已发
大佬您好,可以发一下固件,自己一直没折腾出来,ESP32-WROOM-32的开发板,谢谢 1483127946@qq.com
为方便大家,直接把下载链接放文章底部了。