使用VCode+PIO环境移植LVGL到ESP32-S3过程记录

一 、首先介绍下我用的开发环境和硬件

1.VCode1.96.4

2.paltformio,简称PIO

3.ESP32-S3-WROOM-1(N16R8)

4.显示屏使用的是SPI接口的3.5寸TFT彩屏(ST7796U),IIC接口触摸屏(FT6336U)

5.USB转串口工具

二、移植流程介绍

对于环境的搭建在此不作赘述,默认已经搭建OK,没有搭建好可以参考其他的文章。

1.创建新的工程

2.下载相应的库文件,TFT_eSPI,LVGL,bb_captouch库。

3.修改对应的库文件匹配自己的硬件。

大概流程就是这样下面开始详细的说明移植过程

三、创建新的工程

1.点击新建项目

2.弹出项目向导,如下:

上图中对应数字的含义,1是项目名称,2是使用的开发板,3使用的框架,4新建文件路径(可以去掉复选框选择自己的路径)。

最后点击完成(Finish),首次创建可能会时间长一些,等待创建完成。如下图所示:

四、下载TFT_eSPI,LVGL,bb_captouch.

1.下载TFT_eSPI库

点击PIO Home 中的Libraries,在搜索栏中输入TFT_eSPI ,我使用的是2.5.43版本,点击“添加到项目”,选择自己的项目,等待添加完成。

2.下载LVGL库文件

同样在Libraries的搜索栏中搜索LVGL 点击添加,我选择的是8.3.11版本,选择添加到项目,等待添加完成。

3.下载bb_captouch库

同样,在Libraries中搜所bb_captouch,选择1.2.2版本,添加到工程文件。

4.找到下载好的库文件,将他们粘贴到lib文件夹下。

从工程上看已经显示到lib库里边了

五、修改相应库文件

1.从名字上也可以看出TFT_eSPI,TFT屏的SPI驱动文件,里边集成了大量的SPI驱动,我这里使     用的是ST7796U。

 我们从工程中打开User_Setup.h文件

将对应的驱动打开,屏蔽掉不用的驱动

添加SPI的硬件管脚,如下图是我的硬件引脚

SPI的时钟频率可以到80MHz,我使用的是HSPI,USE_HSPI_PORT。

到这里SPI就改完了,下面运行个例子,看下有没有移植成功。

打开工程下的TFT_eSPI中的examples下的历程,如下图所示,我选择了Cellular_Automata.ino,打开此.cpp文件,复制里边的所有内容,将他粘贴到工程下的src/main.cpp下,只保留#include <Arduino.h>。

粘贴到main.cpp的文件,编译后显示会有错误,需要将下面的一些函数在上边定义一下。再次编译通过,

显示的界面如下:活跃的细胞,显示出来后SPI应该就可以了(这里其实是黑白色反了,后面有改正)。

2.开始移植LVGL

打开LVGL文件,找到lv_conf_template.h文件,复制一份放到lvgl的同级目录,改名为lv_conf.h。

从工程中打开lv_conf.h

将#if 0 改为#if1,如下图

打开心跳

后面准备运行自带的例程,所以打开这些例程

由于路径识别的问题,所以运行自带的例程需要将lvgl中的demos和examples放到src中。

打开examples->arduino->LVGL_Arduino.ino,将里边全部的内容复制到main.c中

main.cpp中只留下#include <Arduino.h>,如下图所示:

此时编译会出现错误,因为LVGL自带了SPI接口的电阻触摸屏,所以我们将有关触摸的函数全部注释掉。

再次编译OK,下载代码,并运行。

LVGL移植OK,下面运行下经典的demo。

在main.cpp文件中添加2个头文件,如下所示。

打开 lv_demo_widgets例程,编译,下载,运行

运行结果如下,什么鬼东西,颜色不太对。

经过查找资料最终是SPI驱动的问题。

找到工程下的TFT_eSPI->TFT_Drivers目录下的ST7796_Init.h,打开,在下面添加一行命令writecommand(0x21);

编译下载,OK,完美啦

到此LVGL以及LVGL例程移植完成,下边就是移植触摸驱动了。

3.移植触摸驱动

在此之前试了其他几个触摸驱动库文件,因为也是初次使用没有已成功,最后发现有个网友使用了bb_captouch这个库,非常感谢这位网友。

我们前边已经下载好了,所以就直接开干。

找到bb_captouch->src文件下的bb_captouch.cpp文件 ,找到162行,

把 “_iType = CT_TYPE_UNKNOWN;”改为“  _iType = CT_TYPE_FT6X36;”

打开bb_captouch.h 文件,定义一个isTouched,用来判断当前屏幕的触摸点。

在bb_captouch.cpp中找到525行添加一行代码“isTouched = i”.

修改main.cpp文件

添加头文件#include "bb_captouch.h",添加触摸定义

触摸接口函数:因为x和y坐标是反的,所以做了一些转换

打开接口函数,添加触摸初始化函数

在循环里添加扫描触摸事件,

又到了编译,下载,运行的时刻了,最后的运行结果。

到此LVGL的移植就结束了,小伙伴们赶紧试试吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值