一 、首先介绍下我用的开发环境和硬件
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的移植就结束了,小伙伴们赶紧试试吧。