TFT_eSPI触摸屏踩坑记录

前略,总之当前目标是在esp32上,用arduino框架跑起来lvgl,至少是demo。首先需要调好TFT_eSPI,以此驱动lcd屏和触摸。

首先第一部分参照arduino-esp32:基于TFT-eSPI库实现触摸显示屏文中描述,在库管理器中安装了TFT_eSPI库,arduino默认的库文件安装目录在C:\Users\ “当前用户名” \Documents\Arduino\libraries下,按照指引逐个设置好屏幕参数,我的屏幕是中景园购买的2.4寸240*320TFT_LCD触摸屏,驱动芯片ILI9341,触摸芯片是XPT2046,开发板是esp32_devkitc_v4,大概是什么山寨开发板,这个不是很重要,该有的引脚都有就行。

一个问题是红蓝颜色反转,需要解除如下语句的注释,以更正红蓝颜色顺序。

#define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue

然后在调用Touch_calibrate这个例程进行触摸校准的时候,直接运行未修改的例程会出现显示异常,没法正常校准。

具体症状是有一小部分屏幕花屏,似乎例程中的填充背景色未对花屏部分生效,测试dma例程的时候,跳动的红球又能覆盖刷新到花屏部分,说明并非硬件问题。调用触摸校准例程时,触摸指示坐标不在屏幕角落上,后两个触摸指示坐标形状散架,没有组成箭头形状。无视问题继续校准之后,有时会无法读出触摸数据,有时会出现触摸点与显示点不对应。

此时应当手动指定屏幕的分辨率,默认程序可能是把屏幕分辨率的长宽指定反了。用lvgl例程里抄来的语句就可以。

static const uint16_t screenWidth  = 320;
static const uint16_t screenHeight = 240;

TFT_eSPI tft = TFT_eSPI(screenWidth, screenHeight); // Invoke custom library

替换掉原来的语句即可:

TFT_eSPI tft = TFT_eSPI(); // Invoke custom library

校准后从串口获得校准参数如下,只针对我自己的屏幕,旋转参数为3时有效。

uint16_t calData[5] = { 242, 3563, 289, 3429, 0 };

然后根据arduino-esp32:使用LVGL的指导,修改lvgl的设置,并填入触摸校准参数,好了可以开始玩了。