当前位置: 首页 > news >正文

ESP32_esp-idf_lvgl_V8环境搭建移植

ESP32_LVGL7的环境搭建:ESP32_esp-idf_lvgl_V7环境搭建

先跑一跑官方用例,然后移植到自己的工程中(本次移植为LVGL_8.3,最新为LVGL9)

这个文档也是我一边移植一边记录的,所以有些繁琐

一,运行官方Demo。

Git方式下载lvgl针对esp32的官方移植仓库lv_port_esp32

注意:注意:注意:这里下载都不是最新版的LVGL而是7.11版本的。

git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git

使用最新的LVGL,可以下载后再去下载最新的lvgl仓库,替换文件夹内的内容。

或者不要再使用本命令,直接clone本仓库然后去单个下载仓库

如果下载不了,可以分个单个git下载后(实在不行浏览器在页面上直接Download也可以,一般不会有问题),下载后再放到lv_port_esp32仓库指定的位置。

注意下载时别忘了选择最新的分支,LVGL仓库需要选择最新v8.3的分支,lv_esp32_drivers需要选择默认的master分支。

 lvgl分支需要选择8.3

Lv_esp32_drivers分支需要选择master

 不需要下载lv_examples文件夹内容,因为lvgl源码自带例程不需要再下载。

 下图这是最后需要用到的文件。

将下载的两个仓库解压放到lv_port_esp32文件夹的commponts文件夹的各个目录内。

删除lv_examples文件夹。

 使用Vscode打开lv_port_esp32文件夹

设置串口、下载方式后直接编译。

使用Vscode如果编译出错,可以更方便的找到问题。

 

如果不出意外,替换为最新的LVGL8.3之后会报错。

出错的过程可能不一样,有的错误在前面,有的在后面,可以朝后看是不是有相同错误。

 先解决第一个,在如下位置增加定义,以指明自己屏幕的分辨力。

 再次编译查看剩余的错误。

将上方出错位置的结构体名称改为lv_disp_draw_buf_t

将上方出错位置的函数名称改为lv_disp_draw_buf_init

再次编译,查看错误

 将上方错误的.buffer改为.draw_buf

再次编译,查看错误。

点击设置打开menuconfig窗口。无法进入发删除build文件夹,build编译后再进入。

这个按钮打开的设置和idf.py mrnuconfig打开的配置是一样的,如果不使用Vscode,直接使用ESP-IDF CMD打开,里面的设置和选项是一样的,两个都可以使用。

选择例程,之后运行这两个例程,同时防止文件内编译报错。

 

再次编译,查看错误

demo所在路径修改为如下路径

 

再次编译,查看错误

出现如上错误,说明你下载的lv_esp32_drivers仓库不是指定的仓库(不是master主分支仓库),下载的时候可以在线查看一下lv_esp32_drivers/lvgl_helpers.c的内容,应该为如下内容,否则不可以给V8使用。因为LVGL的目录结构变化,所以此文件也必须变化。

别忘了定义:#define LV_HOR_RES_MAX 240    #define LV_VER_RES_MAX 240

 

需要删除build,重新编译,查看错误

 添加定义或者直接注释,二选一。

 

眼看编译成功,又报错。我TM真的是服了 -_-!

添加文件夹

 

然后build又报错了 +_+

因为这个例程太大运行不了(可能有的模组可以运行),换一个例程。

 去掉勾选Show some widgets,只留一个。

修改main中的include路径。

等待编译完成。如果之前的ESP-IDF环境没有问题,这里编译大概率也不会再有问题了T_T

终于TMD成功了,不得不说后面依然还是会有问题 s_s

出现如下为成功。则可以进行配置LVGL了。

 

点击设置,设置lvgl的参数,需要按照自己的屏幕的驱动和显示方向配置。

下面是具体使用的引脚配置,可以根据自己具体使用的配置,并且需要参考ESP32引脚定义。

我建议使用SPI3来驱动,不然会和SD卡引脚冲突,如果增加功能会导致很多引脚问题。

我没有使用背光控制引脚和触摸控制引脚。

 没有背光控制引脚和触摸引脚。

 

点击编译,等待即可。Build一次时间还挺长 ~_~

 

 连接好线,点击下载

OK,那么问题又了。下载进去结果是这样子,颜色和显示都不对,T-T

 

 我以为是SPI的速度问题,我从40MHz一直降到5MHz,都不可以,每改一次,都要重新编译,1000多个文件,人都崩了。

最后把lvgl_8有关的初始化函数全部对照lvgl_7的代码,终于发现了盲点。另一个地方也有屏幕分辨力,修改后正常。

同时在设置中,勾选下图设置。

大概如果屏幕本身就是320*240的可能不会有这个问题。就只需要勾选设置里面的下图即可。

再次编译,终于没有问题了,T - T

下载后就可以看到运行了LVGL的Demo。

 

二,移植LVGL到自己现有的ESP-IDF工程中。

准备一个esp-idf的工程,路径无所谓,esp-idf的官方例程也可以。

然后将之前下载的LVGL中的components文件夹直接复制到ESP-IDF工程的主目录下。

 打开设置按照上面的运行Demo例程中的设置,一样设置即可。

把Demo例程中的main.c中的代码复制到ESP-IDF工程的main.c中,包括代码和头文件的包含都要挪过来。删除build文件夹,然后点击编译。

 

编译没有任何问题,直接下载,正常运行。

最后可以使用模拟器做好demo后,在挪进工程里面就行了。

个人见解,感谢阅读。

相关文章:

  • 人工智能第2版学习——产生式系统2
  • Cortex-A核的异常的处理过程
  • 基于IDEA 工程项目的git实操
  • SAP 多个smartforms同时打印页码问题
  • 离线数仓搭建_03_Hadoop的配置与优化测试
  • 【设计模式】Java设计模式 - 命令模式
  • openstack-mitaka(二) 基于vmware的搭建
  • 【Vue2】VantUI项目入门教程
  • 痛苦与反思:想提升自己,却不知道该如何做
  • C++和QML混合编程_C++端后台多线程处理
  • Math 对象+JS数组求和的常用方法+ indexOf+js计算数组中每个元素出现的次数+while循环语句死循环
  • 用ARM进行汇编语言编程(7)HelloWorld和gdb调试Arm程序
  • 【Vue 基础知识】控制元素显示隐藏的方法和区别
  • 终于拿到了爆火全网的进一线大厂程序员必看的1700道java面试题
  • Redis事务操作与原理剖析
  • 4. 路由到控制器 - Laravel从零开始教程
  • AngularJS指令开发(1)——参数详解
  • flutter的key在widget list的作用以及必要性
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • js ES6 求数组的交集,并集,还有差集
  • Mithril.js 入门介绍
  • MySQL主从复制读写分离及奇怪的问题
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 产品三维模型在线预览
  • 浮动相关
  • 面试总结JavaScript篇
  • 如何学习JavaEE,项目又该如何做?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 算法系列——算法入门之递归分而治之思想的实现
  • 我建了一个叫Hello World的项目
  • No resource identifier found for attribute,RxJava之zip操作符
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​水经微图Web1.5.0版即将上线
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #100天计划# 2013年9月29日
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (4)logging(日志模块)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)hibernate配置管理
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • ./configure、make、make install 命令
  • .net refrector
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net快速开发框架源码分享
  • .NET企业级应用架构设计系列之结尾篇
  • .NET运行机制
  • .net中的Queue和Stack
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Autowired 与@Resource的区别