移植LVGL8到esp32的踩坑记录

本文记录了将LVGL8图形库移植到ESP32 WROOM开发板上的过程,包括VSCode环境配置、LVGL8的移植步骤及遇到的颜色显示问题。通过修改液晶配置、驱动初始化和MADCTL寄存器设置,最终成功适配1.8寸SPI彩色液晶ST7735S。

移植LVGL8到esp32的踩坑记录


前言

硬件:ESP32 WROOM 开发板 + 1.8寸spi彩色液晶(st7735s)
液晶是这种:
在这里插入图片描述
开发环境: vscode

一、vscode环境搭建

一开始在旧电脑安装配置很简单,没出什么问题,直接在vscode的扩展搜索Espressif IDF安装,然后打开这个插件,按提示在线安装esp-idf仓库和相关工具就可以了。只要注意网络能翻墙,下载github上的文件不失败就行了。
但第二次在新的电脑安装,最后一步配置python虚拟环境总失败,想想应该是没有前置安装python、cmake等环境导致的。所以新电脑,建议先安装git、python、cmake,再去vscode配置环境

1.安装git

选择对应的最新版本

2.安装python

我直接安装Anaconda,安装个人版就可以了

3.安装cmake

下载msi安装文件

以上3个都是无脑next点击下一步就可以了。但注意Anaconda和cmake需要选择将程序加入到环境路径里面,借用一下网上的图:
在这里插入图片描述
在这里插入图片描述

4.配置vscode

安装好Espressif IDF插件后,第一次打开会出现插件配置页面,如果后面想再打开,可以按下ctrl+shift+p键打开命令面板,输入搜索“Configure ESP-IDF extension”找到再次打开
感觉下面几样选项没什么大的区别,如果网络不好的可以网上搜搜相关离线下载再指定配置的方法。我为了省事,直接联网下载的,只要前面的几个工具是安装正确的,应该整个配置都能成功
在这里插入图片描述
配置成功后,会出现这样的提示,应该就可以了
在这里插入图片描述
打开一个esp32的idf工程,或者用命令面板搜索“show example”,来从esp-idf的例程里面创建一个新的工程(这个功能还是很方便的),就可以尝试编译工程、烧录固件来检验环境是否搭建正常了。
在这里插入图片描述

二、移植LVGL8

这里偷懒,直接使用了这位兄弟搭好的仓库,clone下来,在vscode中打开文件夹就行了,很方便。
blog地址
他移植好的仓库源码地址

这里要注意一下,clone下来后,里面还有一层目录,用vscode打开文件夹时,要打开里面lvgl_v8_esp32-main这个文件夹,不然会提示没有cmakelists.txt文件的

1.配置lvgl

点一下

<think>嗯,用户想了解如何将LVGL项目从EEZ Studio移植ESP32-IDF环境中。首先,我需要回忆一下LVGLESP32的相关知识。LVGL是一个轻量级的嵌入式图形库,常用于嵌入式设备的UI开发。ESP32-IDF是Espressif的物联网开发框架,支持FreeRTOS,适合处理多任务。 用户提到之前有参考的引用,其中引用[1]是关于LVGLESP32上的移植项目教程,可能涉及显示和触摸驱动的配置。引用[2]和[3]讨论了使用EEZ Studio移植到STM32的经验,但用户现在需要转到ESP32,这可能涉及到不同的驱动和配置。需要比较EEZ Studio生成的代码和ESP32-IDF项目结构的差异。 首先,移植步骤可能包括环境搭建、项目结构配置、驱动适配、UI代码移植、事件处理调整、编译调试等。EEZ Studio生成的代码可能依赖于特定的硬件抽象层,需要替换为ESP32的驱动,比如使用lv_port_esp32中的显示和触摸驱动。需要检查EEZ生成的UI组件是否直接兼容LVGL的API,或者是否需要调整。 另外,用户可能遇到的问题包括显示不正常的驱动配置问题、触摸事件不响应、内存不足或任务优先级设置不当。需要参考已有的ESP32移植项目,如lv_port_esp32,来确保正确的初始化流程。同时,可能需要修改EEZ生成的代码中的硬件相关部分,替换成ESP32的GPIO或SPI设置。 还需要考虑ESP32-IDF的组件管理,是否可以通过组件方式集成LVGL,或者需要手动添加源文件。编译选项和内存配置也是关键,确保LVGL有足够的缓冲区。此外,多任务环境中,LVGL的任务优先级和定时器调用需要适配FreeRTOS的任务调度。 可能用户需要详细的步骤,比如如何将EEZ Studio的UI代码整合到ESP32项目中,如何处理事件回调,以及如何测试和调试显示效果。需要分步骤说明,从环境准备到代码移植,再到问题排查,确保用户能够逐步实施。 最后,生成的相关问题应该围绕移植过程中可能遇到的挑战,比如驱动适配、性能优化、多任务处理等,帮助用户进一步深入了解解决方案。</think>### 如何将LVGL项目从EEZ Studio移植ESP32-IDF环境 #### **1. 环境准备** - **安装ESP-IDF开发框架** 按照官方文档配置ESP-IDF环境,确保基础编译和烧录功能正常[^1]。 - **获取EEZ Studio生成的LVGL代码** 从EEZ Studio导出包含UI布局、样式和事件处理逻辑的C代码(如引用[3]中的`lv_obj_t`相关代码段)。 - **克隆ESP32LVGL移植仓库** 使用`lv_port_esp32`项目作为基础框架,已包含显示驱动和触摸驱动适配: ```bash git clone https://gitcode.com/gh_mirrors/lv/lv_port_esp32 ``` #### **2. 项目结构调整** - **整合EEZ生成的UI代码** 将EEZ Studio生成的UI组件代码(如消息框、按钮等)复制到`lv_port_esp32/main`目录,并修改文件引用路径。 - **配置显示和触摸驱动** 根据硬件型号(如SPI/I2C屏幕),在`lv_conf.h`和`lvgl_helpers.c`中启用对应的驱动配置(参考引用[1]的显示适配方法)。 #### **3. 驱动适配** - **修改硬件抽象层** 替换EEZ代码中依赖的STM32硬件操作(如GPIO控制)为ESP32的驱动接口,例如: ```c // 替换STM32的HAL_GPIO_WritePin为ESP32的gpio_set_level gpio_set_level(LCD_BL_PIN, 1); ``` - **事件回调适配** 将EEZ Studio中基于特定OS(如FreeRTOS)的任务调度和事件处理,映射到ESP-IDF的`xTaskCreate`和队列机制。 #### **4. 内存与性能优化** - **调整LVGL缓冲区大小** 在`lv_conf.h`中根据ESP32的RAM资源调整`LV_MEM_SIZE`和显示缓冲区: ```c #define LV_MEM_SIZE (32 * 1024) // 根据实际硬件调整 ``` - **启用双缓冲机制** 若屏幕刷新率不足,可在显示驱动中配置双缓冲区减少闪烁。 #### **5. 编译与调试** - **处理依赖冲突** 若出现函数重定义错误,检查EEZ代码与`lv_port_esp32`的重复实现部分,保留ESP32专用版本。 - **日志调试** 使用`ESP_LOGI`输出LVGL事件日志,定位UI初始化或触摸事件问题。 #### **示例代码片段** ```c // 在main.c中初始化EEZ生成的UI组件 void app_main() { lv_init(); lvgl_driver_init(); // 初始化ESP32显示驱动 lv_obj_t *root = lv_scr_act(); // 调用EEZ生成的UI构建函数 create_eez_ui(root); } ``` #### **常见问题解决** - **显示异常**:检查SPI时钟频率和屏幕初始化序列。 - **触摸无响应**:校准触摸坐标并验证I2C地址配置。 - **内存不足**:减少LVGL组件层级或启用内存压缩特性(如LVGL的`LV_MEM_CUSTOM`)。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值