欢迎光临散文网 会员登陆 & 注册

单片机低代码交互UI制作 - LVGL+Squareline+Arduino平台 学习记录(1)

2023-07-08 15:19 作者:-CVZZ-  | 我要投稿

TFT-eSPI的安装和配置

在LVGL项目中TFT-eSPI才是实际控制屏幕显示的库,网上能找到很多应用教程,在这里重写只是为了从零开始的连贯性,会用的可以略过,我写的不一定有人家的详细,毕竟我只要实用,LVGL也并未使用它太多的功能。

Arduino IDE 自2.0 之后改版很大,最大的特点就是输入中文注释时CPU占用率会飙升,然后自动补全会崩溃。。。

在写这篇时我的IDE版本为2.1.0,不用再去自己下载库文件,然后拷贝进库文件夹了,直接在左侧搜索安装就行,嗯。。。该挂梯子的还得挂梯子。。。实在下不下来的按着之前版本的拷贝文件吧。

搜索tft_espi,大小写无所谓,但注意是下划线,输错了要么找不到,要么就得往下刨。

官方库链接:https://github.com/Bodmer/TFT_eSPI

tft_espi库

一般默认是最高版本,直接点安装就行。

下面找到Arduino的库文件夹找到TFT-eSPI库:文件 -> 首选项

(建议给库这个文件夹设个快捷方式,用的会比较多)

在libraries文件夹下的TFT_eSPI,例如:

C:\Users\Administrator\Documents\Arduino\libraries\TFT_eSPI

补充下ESP32的开发板地址,网上好多文章的都失效了:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

TFT-eSPI库需要修改两个文件:User_Setup_Select.h 和 对应屏幕驱动的文件

前者选择主控型号和屏幕驱动,后者更改引脚,在此我对User_Setup_Select.h进行些翻译和注释的修改。

User_Setup_Select.h在改之前最好是建一个副本,省的改乱了后面还得重下。

注释掉30行

由于我使用的是ESP32-C3,屏幕驱动芯片型号为ILI9341,所以开启第98行

注意:这是SPI通信的,不是并口。(话说第99行文件名标识了并口,但注释写的却是SPI)

真的挺乱的,虽然98行标识的是ILI9341,但包含了ILI9341、ST7796、ILI9488三个型号的屏幕驱动芯片,所以User_Setup_Select.h里找不到的不一定没有,如果没找到,从主控对应的文件进去多看看,不一定不支持。

接着上面,下一步改引脚,98行的对应文件在User_Setups文件夹下,例如:

C:\Users\Administrator\Documents\Arduino\libraries\TFT_eSPI\User_Setups\Setup70c_ESP32_C3_ILI9341.h

ESP32-C3是支持IO矩阵的,所以并不一定SPI对应的引脚必须是标明的引脚,可以随意搞,不过尽量还是用对应的,记得手册有说IO矩阵有频率限制,通常也用不到那么高,特殊需求的注意下就OK了。

改引脚没什么可说的,CS、MOSI(主出从进)、MISO(主进从出)、SCLK、DC、RST、TOUCH_CS,这几个换成自己的,如果没有触摸功能,注释掉TOUCH_CS就可以了。

注意:这里支持的触摸是电阻触摸,电容触摸的需要自己搞。

引脚设置对应到我的板子上:

SPI的频率用默认最大的就行,如果是线连不稳定,可以尝试改小,不同的主控和屏幕驱动芯片SPI最大频率支持也不一样,需要查手册。

保存更改的两个文件,打开Arduino IDE,找到如下图所示的触摸校准例程:

开发板选择ESP32C3 Dev Module,目前已经支持直接下载,不需要加TTL转串口芯片,选择9.9的简配版模块就行。

下面的配置需要改三项:

1、默认的Flash Mode应该是QIO,合宙为了节省C3本就不多的IO,Flash使用的是DIO。

2、Flash Size按实际改,默认应该是4MB,换过Flash的需要改成自己的。

3、Partition Scheme 分区表,就是把外置的Flash内部的空间有多少放程序,有多少划归文件系统,默认的就这几个,APP是程序,SPIFFS/FATFS是不同的文件系统格式,Squareline将图片、字库生成为了.h文件,所以是程序的一部分,若默认的分区表APP空间不够的话,就需要自己添加分区表了,这个后面单开一篇讲,这篇是讲TFT-eSPI的。

在下载之前需要注意一个地方,触摸校准程序的第24行

这个是屏幕的显示方向,需要和实际想要的显示方向一致,否侧输出的校准参数会与实际不一致,导致的现象也就是触摸不准。

0 (默认0度方向)、1(顺时针90度)、2(顺180度)、3(顺270度),通常是这样的,并且通常屏幕排线冲下摆放时为0。


这就可以下载了?

 

如果你用的是带TTL转串口的ESP32-C3确实可以了,上传后打开Arduino IDE自带的串口助手,波特率115200。按屏幕上指示触摸4个角(图示屏幕方向为1),完成后会输出一串下图所示的代码,这便是校准的参数值,记下它!!!

如果使用的是简约版不带TTL转串口芯片的板子,还需要开启下图所示的USB CDC,此时使用Serial输出的数据便可以显示。

或者不嫌麻烦的可以改下代码,把数据显示在屏幕上。

得到串口输出的触摸校准参数,TFT-eSPI这一块就结束了,LVGL不需要TFT-eSPI的其它功能,只是把它作为了一个屏幕显示的工具,毕竟主控种类、屏幕驱动种类太多了,适配起来也太麻烦,不如直接用人家的。

重要的事说三遍。

记下那串代码!!!

记下那串代码!!!

记下那串代码!!!

嗯。。。

记下了吗?

其实也没那么重要,我在后面把校准这一块单独拿出来了,数据自动存储在EEPROM(掉电存储)中,如果检测到存储中有数据则自动加载,没数据则在运行前启动屏幕校准并存储。

毕竟要是每次都这么搞,下过来下过去的太麻烦了,拷贝代码不省事吗?

最后说个不重要的东西,ESP32-C3编译使用了TFT-eSPI的程序时会报一个DMA的警告,C3没有DMA,这个警告是正常的,忽略即可。

既然说到这了,简述下DMA是什么。

DMA (Direct Memory Access) 是一种硬件机制,可以让外设直接访问系统内存,而不需要通过 CPU 的干预。这样可以大大减轻 CPU 的负担,提高系统的效率。

ESP32 的 DMA 功能,可以让外设(比如 SPI、I2S、UART、ADC、DAC 等)直接访问系统内存,而不需要 CPU 的干预。可以大大提高数据传输的速度和效率。同时,ESP32 的 DMA 还支持多种传输模式,包括单次传输、循环传输、链式传输等,可以满足不同应用场景的需求。

附图:TFT-eSPI显示图片(TFT的可视角度真的脑瓜疼)


单片机低代码交互UI制作 - LVGL+Squareline+Arduino平台 学习记录(1)的评论 (共 条)

分享到微博请遵守国家法律