lv_micropython for ESP32

本文详细描述了在Windows上通过VMware安装Ubuntu并在此环境中编译ESP32+LVGL的过程,包括ESP-IDF的下载、环境配置、固件编译以及遇到的三个常见问题及其解决方法。
部署运行你感兴趣的模型镜像

一、开发平台说明

开发工具:在windows系统上安装了VMware虚拟机,在VMware虚拟机中安装了ubuntu18系统。

二、编译ESP32 + LVGL

        上一篇博客讲了如何下载及编译lv_micropython,编译ESP32+LVGL还需要下载ESP-IDF,当前最新版是v5.2.0,但是lv_micropython最大支持到**v4.4** ,所以下载esp-idf v4.4。lv_micropython/ports/esp32的README.md有相关说明,如下:

1、下载ESP-IDF

 进入ubuntu系统,启动终端,cd到存放源码的目录。

克隆esp-idf v4.4:

git clone -b v4.4 https://github.com/espressif/esp-idf.git

更新其子模块: 

$ cd esp-idf
$ git submodule update --init --recursive
2、编译固件

安装编译工具、配置环境变量 :

$ ./install.sh all

会在$HOME路径下创建.espressif文件夹存放工具,这个过程大约需要十分钟。install.sh只需要执行一次。执行成功会出现如下提示:

如果提示permit相关的问题,则在指令前加上sudo;如果提示pip相关的问题,请看“遇到问题章节”问题1。

导入编译相关的环境变量:

$ source export.sh

 设置IDF_TARGET:

export IDF_TARGET=esp32

设置目标芯片为esp32。 当前的lv_micropython支持esp32,不支持esp32s2、esp32s3、esp32-c3,编译会报错。

每次打开命令窗口都需要执行一次 source export.sh。执行成功会出现如下提示:

从esp-idf目录离开,进入lv_micropython目录:

$ cd ..
$ cd lv_micropython

我把esp-idf和lv_micropython下载到同一个路径的。

编译mpy-cross: 

make -C mpy-cross

如果之前编译过mpy-cross,就不用再编译了。 

编译 esp-idf和lv_micropython:

$ make -C ports/esp32 submodules
$ make -C ports/esp32 LV_CFLAGS="-DLV_COLOR_DEPTH=16" BOARD=GENERIC

如果提示更高版本的cmake,请看“遇到问题章节”问题2。 

3、构建ESP-IDF

可以在lv_micropython/ports/esp32目录下执行idf.py menuconfig在命令行界面中通过导航和选择不同的配置选项来配置项目,执行之前需要执行export IDF_TARGET=esp32设置目标芯片。

三、遇到问题

问题1

执行sudo ./install.sh all命令时,出现以下错误提示:

意思是没有找到pip,但是通过pip -V指令能查询已安装pip。

在网上一番搜索后,有网友之前也遇到了这个问题,并提供了解决办法。如下所述:

解决方法:

进入~/.espressif/python_env/idf5.2_py3.8_env/lib/python3.8/site-packages目录,下载pip,安装pip:

$ cd ~/.espressif/python_env/idf5.2_py3.8_env/lib/python3.8/site-packages
$ sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo ~/.espressif/python_env/idf5.2_py3.8_env/bin/python3 get-pip.py 

然后再次执行sudo ./install.sh all就可以了。

问题2

执行make -C ports/esp32 LV_CFLAGS="-DLV_COLOR_DEPTH=16" BOARD=GENERIC_C3命令时,出现以下错误提示:

解决方法:

进入~/Downloads,下载当前最新的cmake-3.29.2.tar.gz:

$ cd cd ~/Downloads/
$ wget https://cmake.org/files/LatestRelease/cmake-3.29.2.tar.gz

解压到当前目录:

$ tar -xvzf cmake-3.29.2.tar.gz

解压之后此路径下会有一个cmake-3.29.2文件夹。

进入到cmake目录:

$ cd cmake-3.29.2/

配置:

$ chmod 777 ./configure
./configure

编译:

make

安装:

sudo make install

 执行过程如下:

将cmake安装到/usr/local/bin目录下。

将cmake链接到cmake3.29:

$ sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force

 查询cmake版本:

$ cmake --version
cmake version 3.29.2

至此,cmake已升级到3.29.2。

问题3

编译 esp-idf和lv_micropython时,出现以下错误提示:

esp-idf与mycropython版本不匹配。

解决方案:

将esp-idf版本切换到v4.4:

$ cd esp-idf
$ git checkout v4.4
$ git submodule update --init --recursive

 删除~/.espressif:

rm -rf $HOME/.espressif

重新安装工具:

$ ./install.sh all

lv_micropython技术交流:961509395

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

E (988) lcd_panel.st7789: esp_lcd_new_panel_st7789(104): unsupported pixel width I (998) gpio: GPIO[15]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 ESP_ERROR_CHECK failed: esp_err_t 0x106 (ESP_ERR_NOT_SUPPORTED) at 0x42008b79 --- 0x42008b79: lv_disp_hard_init at D:/esp32_project/smart_desk/main/lv_port.c:66 file: "./main/lv_port.c" line 66 func: lv_disp_hard_init expression: esp_lcd_new_panel_st7789(io_handle, &panel_config, &lcd_panel) abort() was called at PC 0x4037b8ef on core 0 --- 0x4037b8ef: _esp_error_check_failed at D:/Espressif5.2.6/frameworks/esp-idf-v5.2.6/components/esp_system/esp_err.c:50 Backtrace: 0x40375c8e:0x3fcac8f0 0x4037b8f9:0x3fcac910 0x40382d21:0x3fcac930 0x4037b8ef:0x3fcac9a0 0x42008b79:0x3fcac9d0 0x42008bc5:0x3fcaca90 0x42008a47:0x3fcacb00 0x42055597:0x3fcacb20 0x4037c3c9:0x3fcacb50 --- 0x40375c8e: panic_abort at D:/Espressif5.2.6/frameworks/esp-idf-v5.2.6/components/esp_system/panic.c:482 --- 0x4037b8f9: esp_system_abort at D:/Espressif5.2.6/frameworks/esp-idf-v5.2.6/components/esp_system/port/esp_system_chip.c:93 --- 0x40382d21: abort at D:/Espressif5.2.6/frameworks/esp-idf-v5.2.6/components/newlib/abort.c:38 --- 0x4037b8ef: _esp_error_check_failed at D:/Espressif5.2.6/frameworks/esp-idf-v5.2.6/components/esp_system/esp_err.c:50 --- 0x42008b79: lv_disp_hard_init at D:/esp32_project/smart_desk/main/lv_port.c:66 --- 0x42008bc5: lv_port_init at D:/esp32_project/smart_desk/main/lv_port.c:80 --- 0x42008a47: app_main at D:/esp32_project/smart_desk/main/main.c:7 --- 0x42055597: main_task at D:/Espressif5.2.6/frameworks/esp-idf-v5.2.6/components/freertos/app_startup.c:208 --- 0x4037c3c9: vPortTaskWrapper at D:/Espressif5.2.6/frameworks/esp-idf-v5.2.6/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c:139 我的板子是用的st7796芯片怎么才能够正常驱动
最新发布
11-02
从给出的错误信息“unsupported pixel width”和“ESP_ERR_NOT_SUPPORTED”以及“esp_lcd_new_panel_st7789 调用失败”来看,问题可能出在像素宽度不被支持方面。 对于类似芯片编译报错的情况,有处理经验可借鉴。由于官方的lv_micropython编译ESP32S3/S2/C3会报错,原因是这些芯片的esp - idf底层重写了接口,可参照网友提供的方法修改lv_bindings/driver/esp32里的文件来解决编译错误,或许在此问题里也能从修改底层配置文件入手,检查配置文件中关于像素宽度的设置是否符合st7796芯片的要求,修改为芯片支持的像素宽度值 [^1]。 另外,关于错误处理,ESP - IDF里错误码ESP_OK代表成功(没有错误),具体值定义为0,错误码的数据类型是esp_err_t且以ESP_ERR_ 前缀开头。“ESP_ERR_NOT_SUPPORTED”明确表示不支持,可能是所选的某种功能或者参数不被st7796芯片支持,要检查esp_lcd_new_panel_st7789函数调用时传入的参数,尤其是与像素宽度相关的参数,确保传入的是芯片支持的合法值 [^2]。 同时,esp - idf的电源管理组件能实现类似CPU睿频的动态频率切换功能,虽然和硬件的睿频功能相比比较粗浅,但也可以检查一下系统的电源管理设置,看是否因为电源管理方面的配置影响了芯片的正常工作,尝试调整电源管理的参数,看能否解决问题 [^3]。 ```python # 伪代码示例,展示检查和修改参数的过程 # 假设存在一个函数用于获取当前像素宽度配置 def get_current_pixel_width(): # 模拟获取当前像素宽度配置 return 16 # 假设存在一个函数用于设置像素宽度配置 def set_pixel_width(width): # 模拟设置像素宽度配置 print(f"Setting pixel width to {width}") current_width = get_current_pixel_width() supported_widths = [18, 24] # 假设st7796支持的像素宽度 if current_width not in supported_widths: for width in supported_widths: set_pixel_width(width) # 再次尝试调用esp_lcd_new_panel_st7789函数 # 这里省略实际调用代码 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火柴棍mcu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值