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

ESP32-idf学习(五)esp32C3移植lvgl①

一、前言

上一篇我成功驱动了st7789,目前想用这块开发板做一个终端功能的设备,看到挺多人esp32用lvgl库的,我也移植一下试试。

二、创建新工程

我之前一直都是用的例程直接修改,主要是想快速修改然后能实现外设功能,检验一下。现在移植这个lvgl,后边肯定是一直在这个工程基础上继续修改的了,所以创建一个自己的工程吧:

这里点new project

填项目名称就好了

不知道为啥一定要选一个例程。我选了helloworld

三、目录结构调整

1、文件夹变更

还是习惯建src和inc这两个文件夹,然后放.c和.h文件

创建了inc和src两个文件夹,然后helloworld的我改成了app_main.c

2、CMakeList变更

在main里的CMakeList 改成包含src和inc的文件,我加了

3、程序变更

include的文件我放在一起

lcd里创建了一个task

lcd.h里声明

小小的测试一下:

ok,然后就可以开始lvgl

四、拉取所需库

1、lvgl库

百度搜索了一下,esp用lvgl的方法还是挺多的

我用的这个

vscode打开命令面板(ctrl+shit+p),输入>Show ESP Conponent Registry,点击

搜索lvgl

点击进去,可以安装,我是直接装的最新版本,

install或者添加依赖这个库

idf.py add-dependency "lvgl/lvgl^9.3.0"

安装成功后,会出来一个components,里边就是lvgl库

在根目录下的

2、驱动lvgl所需库

本来在上一章已经写好屏幕驱动spi和iic的函数,但是我看spi-touch这个例程,他直接拉取了这几个库,我感觉我好像做了无用功,因为我这款屏幕还是很常见的,esp都做好库直接调用就行了。之前写的就当检查硬件了

这是例程拉取的库

然后我搜索的时候,没找到有st7789的,触摸芯片的倒是找到了:

然后再拉取一个esp_lvgl_port

剩下的st7789,我没有找到,网上说集成在主库里的components里了,我也没有找到。

于是我又百度了一下(面向百度编程),找了一个相似的库 GC9A01

拉取下来后,全局替代 gc9A01 ==> st7789  GC9A01 == > ST7789,注意区分大小写。

然后这3个文件名改一下,全都改成st7789

这里也替换了

五、编写程序

1、显示部分初始化

这里基本就跟之前写lcd的一样,增加了面板初始化部分,都是能照抄的东西。

刷新的回调函数

2、触摸部分初始化

先初始化iic,gpio_install_isr_service这里我不加的话会报错,加的话会显示一条已经有地方安装过,但加了之后使用起来没问题,我就先没管了。

后边就是用下载的库了

3、lvgl初始化

主要要注意的就是添加触摸部分

lvgl的触摸回调函数

4、lvgl测试程序

我创建了一个显示的标题 LCD Test: PASS,一个显示坐标的Touch the screen,还有一个触摸点。实现点一下,显示坐标,并且在点的地方显示一个触摸点

这里的触摸点,搞了比较久,我一开始的现象是。初始化触摸控制器.swap_xy = 1,这个地方要设为1,坐标才会显示正确。但是坐标显示正确了,显示的触摸点Y坐标却是镜像的。我在更新触摸点那里打印了坐标,也是对的。最后不得已做了ST7789_HEIGHT - point.y这个处理。

最后我也没查出来是什么问题。后边进一步使用的时候看看。

六、验证程序及问题

视频:

lvgl触摸实例-CSDN直播

算是勉强移植成功吧。目前问题有3个。

1、颜色

我已经设置了rgb16位,但还是调不对,AI和网上搜的方法基本都用过,还是不行,这块真是知识盲区,得慢慢查查。

2、上文所说的触摸点显示镜像问题

但我显示的标题用lv_obj_align函数,位置却没错(我没理解的话)

3、字体有点模糊,而且还有点花

这个我要用之前没有移植lvgl前的程序显示一下文字试试,如果还有问题,可能就要用手上的stm32开发板驱动一下这个屏看看。但我感觉是不是lvgl9的问题?也可以换成低版本的lvgl试试。

http://www.dtcms.com/a/299756.html

相关文章:

  • 贝叶斯决策论
  • Spring AI MCP 客户端
  • Django+celery异步:拿来即用,可移植性高
  • SSSM框架相关问题总结
  • 拒绝SQL恐惧:用Python+pyqt打造Excel数据库查询系统
  • [Java恶补day47] 整理模板·考点十【二叉树层序遍历】
  • 快速入门Linux操作系统(一)
  • LeetCode 面试经典 150_数组/字符串_删除有序数组中的重复项(3_26_C++_简单)
  • RabbitMQ--消息丢失问题及解决
  • 是德科技 | AI上车后,这条“高速公路”如何畅通?
  • 如何高效合并音视频文件(时间短消耗资源少)(二)
  • 计网-TCP可靠传输
  • 周末小游戏推荐,离线也能畅玩
  • 阿里云对象存储OSS(Object Storage Service)全面解析
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘ipython’问题
  • 【计算机组成原理】第一章:计算机系统概述
  • GO 从入门到精通
  • STL——vector
  • GO 从入门到精通2
  • MyBatis-Plus 通用 Service
  • J2EE模式---表现层集成模式
  • MyBatis Plus 对数据表常用注解
  • 进阶数据结构:用红黑树实现封装map和set
  • Sql server查询汇总补缺月份
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 热词评论查询功能实现
  • Android开发中内存泄漏问题治理方案
  • 四通OKI5560SC针式打印机如何复位清零和恢复出厂设置??
  • 昇思学习营-昇思+香橙派+deepseek介绍课程内容及心得
  • Chukonu 阅读笔记
  • Rerank 模型的其中两种路径:BERT 相似度与 CoT 推理