移植MicroPython的LVGL绑定到ESP32#
不知道为什么没人提供ESP32现成的MicroPython的LVGL绑定固件,编译了一个并记录步骤。
以下步骤均在Linux系统完成,其他系统类似,不再赘述
切换ESP-IDF版本#
LVGL官方提供的绑定版本最高支持v4.4
, 参见《Setting up ESP-IDF and the build environment》。
The ESP-IDF changes quickly and MicroPython only supports certain versions. Currently MicroPython supports v4.0.2, v4.1.1, v4.2.2, v4.3.2 and v4.4, although other IDF v4 versions may also work.
ESP-IDF 变化很快,MicroPython 仅支持某些版本。目前 MicroPython 支持 v4.0.2、v4.1.1、v4.2.2、v4.3.2 和 v4.4,但其他 IDF v4 版本也可以工作。
如果已经安装了IDF,无需重新下载,进入esp/esp-idf
,这是一个Git仓库,执行如下命令切换版本分支:
1
|
git switch release/v4.4
|
切换分支后,需要重新初始化Git子模块:
1
|
git submodule update --init --recursive
|
完成后,执行git status
会发现还有些文件有变更,一般是之前的版本遗留的文件,删除这些变更。
这里我执行了:
1
2
|
rm -rf $(git status -s | cut -b 4-255) # 删除未加入Git的变更
git restore components/esptool_py/esptool # 恢复Git管理的变更
|
再次查看git status
确保没有变更。
重新安装IDF:
编译lv_micropython
#
首先克隆仓库:
1
|
git clone https://github.com/lvgl/lv_micropython.git
|
进入仓库,激活IDF环境:
执行如下指令编译ESP32:
1
2
|
make -C mpy-cross
make -C ports/esp32 LV_CFLAGS="-DLV_COLOR_DEPTH=16" BOARD=GENERIC submodules deploy
|
When using IL9341 driver, the color depth need to be set to match ILI9341. This can be done from the command line.
使用IL9341驱动程序时,需要设置颜色深度以匹配ILI9341。这可以从命令行完成。
-
LV_CFLAGS
are used to override color depth, for ILI9341 compatibility.
LV_CFLAGS
用于覆盖颜色深度,以实现 ILI9341 兼容性。
-
BOARD
- I use WROVER board with SPIRAM. You can choose other boards from ports/esp32/boards/
directory.
BOARD
- 我使用带有 SPIRAM 的 WROVER 板。您可以从ports/esp32/boards/
目录中选择其他板。
-
deploy
- make command will create ESP32 port of Micropython, and will try to deploy it through USB-UART bridge.
deploy
- make 命令将创建 Micropython 的 ESP32 端口,并尝试通过 USB-UART 桥来部署它。
编译会报错,因为缺少Git子模块,初始化一下:
1
2
|
git submodule update --init --recursive lib/lv_bindings
git submodule update --init --recursive lib/berkeley-db-1.xx
|
如果还报错缺哪个,就初始化哪个,这里我是这两个报错。
再次编译,会报错lv_micropython/ports/esp32/network_common.c
静态断言错误:
1
2
3
4
5
6
|
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 3, 0)
#define TEST_WIFI_AUTH_MAX 9
#else
#define TEST_WIFI_AUTH_MAX 8
#endif
_Static_assert(WIFI_AUTH_MAX == TEST_WIFI_AUTH_MAX, "Synchronize WIFI_AUTH_XXX constants with the ESP-IDF. Look at esp-idf/components/esp_wifi/include/esp_wifi_types.h");
|
查看esp-idf/components/esp_wifi/include/esp_wifi_types.h
,发现是个枚举:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/* Strength of authmodes */
/* OPEN < WEP < WPA_PSK < WPA2_PSK = WPA_WPA2_PSK < WAPI_PSK < WPA3_PSK = WPA2_WPA3_PSK */
typedef enum {
WIFI_AUTH_OPEN = 0, /**< authenticate mode : open */
WIFI_AUTH_WEP, /**< authenticate mode : WEP */
WIFI_AUTH_WPA_PSK, /**< authenticate mode : WPA_PSK */
WIFI_AUTH_WPA2_PSK, /**< authenticate mode : WPA2_PSK */
WIFI_AUTH_WPA_WPA2_PSK, /**< authenticate mode : WPA_WPA2_PSK */
WIFI_AUTH_ENTERPRISE, /**< authenticate mode : WiFi EAP security */
WIFI_AUTH_WPA2_ENTERPRISE = WIFI_AUTH_ENTERPRISE, /**< authenticate mode : WiFi EAP security */
WIFI_AUTH_WPA3_PSK, /**< authenticate mode : WPA3_PSK */
WIFI_AUTH_WPA2_WPA3_PSK, /**< authenticate mode : WPA2_WPA3_PSK */
WIFI_AUTH_WAPI_PSK, /**< authenticate mode : WAPI_PSK */
WIFI_AUTH_WPA3_ENT_192, /**< authenticate mode : WPA3_ENT_SUITE_B_192_BIT */
WIFI_AUTH_MAX
} wifi_auth_mode_t;
|
数了下,WIFI_AUTH_MAX
等于10,因此把TEST_WIFI_AUTH_MAX
都改成10,过编译就行。
现在就可以过编译了,编译完会自动烧录。
自定义 ESP32 板#
默认板子的Flash只有4MB,但是手上的板子使用的是16MB,为此需要自定义板子配置。
具体步骤可以参考《Defining a custom ESP32 board》。
直接上命令,复制一个板子配置模板GENERIC_16M
:
1
|
cp boards/GENERIC boards/GENERIC_16M -r
|
从SIL_WESP32
板子复制一份sdkconfig.board
到GENERIC_16M
文件夹。
修改内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 16 MB flash
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
CONFIG_ESPTOOLPY_FLASHSIZE="16MB"
# Fast flash
CONFIG_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_ESP32_REV_MIN_1=y
# OTA
CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-16MiB-ota.csv"
|
编辑mpconfigboard.cmake
,修改内容如下:
1
2
3
4
5
|
set(SDKCONFIG_DEFAULTS
boards/sdkconfig.base
boards/sdkconfig.ble
boards/GENERIC_16M/sdkconfig.board
)
|
重新编译:
1
|
make -C ports/esp32 LV_CFLAGS="-DLV_COLOR_DEPTH=16" BOARD=GENERIC submodules deploy
|
固件下载#
固件下载