一、概述
之前通过修改lv_bindings的代码使编译通过了,但是在执行lvgl相关代码时出错了。目前国外一个大佬开源了一个lvgl_micropython项目,他改了模块的绑定关系,之前LVGL是作为Micropython的依赖项,现在Micro python是作为LVGL的依赖项。通过这样做,简化了更新MicroPython版本的过程。尝试编译这个项目,希望能解决之前lvgl不能用的问题。
源码链接:GitHub - kdschlosser/lvgl_micropython: LVGL module for MicroPython
二、克隆代码
由于国内访问github受限的问题,速度比较慢,也可能出错。这次使用了一个香港的云服务器来克隆代码,服务器安装Ubuntu-22.04-x64系统。服务器是一个2核4G的弹性云服务器,带宽1Mb。
1、克隆代码
源码存在在home路径下,执行以下指令克隆代码:
cd /home
git clone https://github.com/kdschlosser/lvgl_micropython.git
2、更新子模块
cd lvgl_micropython/
git submodule update --init --recursive
由于服务器带宽比较下,所以更新过程比较小,大约40min,但过程比较顺利。
3、安装esp-idf tools
下载esp-idf sdk后需要执行esp-idf tools的安装脚本安装编译工具。执行以下指令:
cd lib/esp-idf/
./install.sh all
执行过程中出现以下问题:
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.apt install python3.10-venv
解决方案:
执行以下指令安装安装 python3-venv 包:
sudo apt install python3.10-venv
然后再次执行:
./install.sh all
安装成功之后,会出现如下提示信息:
You can now run:. ./export.sh
三、编译ESP32S3固件
1、安装工具
基于ubuntu系统编译时,需要安装以下4个工具:
- build-essential
- cmake
- ninja-build
- python
ubuntu22系统自带了build-essential和python,只需要安装cmake和ninja-build。
执行以下命令进行安装cmake:
sudo apt install cmake
执行成功之后查看版本号:
# cmake --version
cmake version 3.22.1
执行以下命令进行安装ninja-build:
sudo apt install ninja-build
执行成功之后查看版本号:
# ninja --version
1.10.1
2、设置esp-idf的环境变量
cd到esp-idf目录,然后执行:
. ./export.sh
3、编译S3固件
退回到lvgl_micropython目录,然后执行:
python3 make.py esp32 submodules clean mpy_cross BOARD=ESP32_GENERIC_S3 BOARD_VARIANT=SPIRAM_OCT DISPLAY=st7796 INDEV=ft6x36
指定内部PSRAM的是接口为8线SPI,液晶屏驱动IC为st7796,触屏驱动IC为ft6x36。
遇到错误:
lvgl_micropython/lib/micropython/extmod/modbluetooth.c:654:(.text.bluetooth_ble_gap_connect+0x9c): undefined reference to `mp_bluetooth_gap_peripheral_connect'
4、编译C3固件
python3 make.py esp32 submodules clean mpy_cross BOARD=ESP32_GENERIC_C3 DISPLAY=st7789 INDEV=ft6x36
适配立创实战派开发板。
遇到错误:
/root/.espressif/tools/riscv32-esp-elf/esp-13.2.0_20230928/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/13.2.0/../../../../riscv32-esp-elf/bin/ld: /home/lvgl_micropython/lib/micropython/extmod/modbluetooth.c:662:(.text.bluetooth_ble_gap_connect+0xae): undefined reference to `mp_bluetooth_gap_peripheral_connect'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
ninja failed with exit code 1, output of the command is in the /home/lvgl_micropython/lib/micropython/ports/esp32/build-ESP32_GENERIC_C3/log/idf_py_stderr_output_219318 and /home/lvgl_micropython/lib/micropython/ports/esp32/build-ESP32_GENERIC_C3/log/idf_py_stdout_output_219318
-e See https://github.com/micropython/micropython/wiki/Build-Troubleshooting
make: *** [Makefile:66: all] Error 1
make: Leaving directory '/home/lvgl_micropython/lib/micropython/ports/esp32'