ESP32自己编译原版和带LVGL的MicroPython

LVGL是一个高效的图形库,基于TFT_eSPI,支持ESP32,但是支持的最好的是ESP-IDF和Arduino环境,并不能直接在MicroPython中使用。

好在LVGL官方从MicroPython fork了一个版本,名为lv_micropython,也就是带lvgl的MicroPython。

不过LVGL并未像MicroPython那样,为每个开发板发布编译好的bin文件,只能自己动手了。

接下来就讲讲怎么为ESP32编译原版MicroPython和带lvgl支持的MicroPython。

首先是配置esp-idfmicropython,一般来说只有MicroPython编译通过的情况下lv_micropyhon才有可能成功。

配置过程中需要科学上网。

先把micropythonesp-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)的,一路踩坑无数,真是懒得折腾了。

23 thoughts on “ESP32自己编译原版和带LVGL的MicroPython”

  1. 大佬,我没梯子,根本无法自己编译固件。我也是购买的esp32 wrover. 能否发一下ESP32-WROVER-E N4R8(4M Flash 8M PsRAM) 的固件到我的邮箱784092080@qq.com,非常感谢!

  2. 你好, 我是新手, 依網頁 安裝, 到 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等环境。

  3. 大佬您好,正在研究lvgl+micropython,麻烦弄一下固件,ESP32-WROOM-32的开发板,谢谢

    • 大佬您好,ESP32-WROOM-32的开发板,我跟上面的一个人一样,也是运行 import lvgl as lv 没问题,第二句:scr = lv.obj()。立刻崩溃重启。可以麻烦您发一份固件给我吗,1483127946@qq.com

  4. 大佬您好,ESP32-WROOM-32的开发板/esp32s3开发板N16R8,刷入过不同版本的lvgl,例如 ;esp32s3_lvgl.bin 2140KB的,都是同一个现象:运行 import lvgl as lv 没问题,第二句:scr = lv.obj()。立刻崩溃重启。

    麻烦您给个bin,我再测试,谢谢大佬。

  5. 还是大佬厉害,我死活编译不过,不停的换环境,编译过了,不知道哪个参数有问题,刷进板子后,esp32 一致重启,搜索了一圈都找不到原因,您能提供一个带PSRAM的固件吗,clolor是16位的?万分感谢!(595033218@qq.com)

Leave a Comment

豫ICP备19001387号-1