初次上手TFT屏幕使用,由于屏幕分辨率、ic驱动、引脚对应等复杂配置工作,使得TFT屏幕入门不是那么容易,本文着重分享使用esp32在arduino中进行TFT配置。
一、arduino的esp32环境配置
此部分网络教程很多,在此不做赘述
二、TFT_espi库的配置
打开arduino,正确选择开发板和接口后,安装TFT_eSpi库
点击后等待即可,网络环境不好可以换源或者科学上网,这里不做介绍
安装完成后将光标放在TFT库上会显示库的安装路径(或者自己知道路径)。按照路径找到user_setup.h 修改引脚定义
1.引脚定义
找到定义引脚这里,按照屏幕连线引脚选择(按照自己的接线设置)
#define TFT_SCLK 13 //对应SCL
#define TFT_MOSI 12 // 对应SDA In some display driver board, it might be written as
"SDA" and so on.
#define TFT_RST 14 // 对应RES Reset pin (could connect to Arduino RESET pin)
#define TFT_DC 26 // 对应DC Data Command control pin
#define TFT_CS 27 // 对应CS Chip select control pin
#define TFT_BL 25 // 对应BL LED back-light
2.设置驱动
在同一文件下 找到如图设置驱动的部分,根据自己的屏幕选择对应驱动(一般会印在板子上,可以找卖家问或者查看说明书)
配置方法:把自己需要用的那一行前面的“//”删去即可,然后保证其他选择都在注释状态(也就是前面有//)
3.显示模式、分辨率
仍是在同一文件中,找到对应区域配置即可,大多数情况依旧可以在板子上直接找到,找不到的问卖家
4.设定偏移修正
这一部分是为了解决屏幕会偏移的问题,可以根据后面的注释对应选择,没有对应的配置需要一个一个试(但大多时候不会出现偏移,默认即可)
5.设置坐标偏移量:有时显示内容很不幸的移出屏幕,一种可能是4.的偏移修正没有正确配置,其次要通过设置坐标偏移量来人为校正了,以st7735为例:打开
TFT_espi——TFT-drivers——st7735_rotation.h 设置横纵坐标偏移量
打开会看到case0、1、2、3,这是对应四个方向的显示,对每个方向的显示要做独立的调整。
比如case 0(竖向正向显示),包含很多个else if,这部分对应4.中的偏移修正,也就是说对每一种偏移修正选择都要人工设置偏移量,这在我们确定选择哪一个时十分轻松,因为只需要设置一种,但当我们不确定选用哪一种偏移修正时,一个个去试极为痛苦()
在我们要调整的if大括号里,colstart表示横向偏移,正值往右、上 rowstart对应纵向偏移(正值往右、上),一个单位代表一个像素点。大家仔细看自己的TFT屏幕可以看到他是一个个像素点组成的,这时移动几个像素点就十分考验眼力和耐心
三、测试总结
到这里我们的配置工作已经完成了,接下来就是运行程序看看是否正常显示,已经做一些精校工作。实例代码:
#include <TFT_eSPI.h> // 引入 TFT_eSPI 库
TFT_eSPI tft; // 创建 TFT_eSPI 对象
void setup() {
tft.init(); // 初始化 TFT 屏幕
tft.setRotation(0); // 调整屏幕方向,根据需要选择合适的值(0、1、2、3)
tft.fillScreen(TFT_BLACK); // 设置屏幕背景颜色为黑色
tft.setTextSize(1); // 设置文本大小
tft.setTextColor(TFT_WHITE); // 设置文本颜色为白色
}
void loop() {
tft.fillScreen(TFT_BLACK); // 清空屏幕,将屏幕填充为黑色
// 绘制不同图形
// 绘制一个像素点,参数:x 坐标,y 坐标,颜色
tft.drawPixel(5, 5, TFT_RED);
// 绘制一条直线,参数:起点的 x 坐标,起点的 y 坐标,终点的 x 坐标,终点的 y 坐标,颜色
tft.drawLine(10, 20, 60, 20, TFT_GREEN);
// 第一行:矩形
// 绘制一个矩形边框,参数:左上角的 x 坐标,左上角的 y 坐标,矩形的宽度,矩形的高度,颜色
tft.drawRect(10, 40, 15, 10, TFT_BLUE);
// 绘制一个矩形填充,参数:左上角的 x 坐标,左上角的 y 坐标,矩形的宽度,矩形的高度,颜色
tft.fillRect(10, 40, 15, 10, TFT_YELLOW);
// 第二行:圆形
// 绘制一个圆形边框,参数:圆心的 x 坐标,圆心的 y 坐标,圆的半径,颜色
tft.drawCircle(65, 35, 7, TFT_MAGENTA);
// 绘制一个圆形填充,参数:圆心的 x 坐标,圆心的 y 坐标,圆的半径,颜色
tft.fillCircle(85, 35, 7, TFT_CYAN);
// 第三行:三角形
// 绘制一个三角形边框,参数:三个顶点的 x 坐标,三个顶点的 y 坐标,颜色
tft.drawTriangle(75, 80, 85, 70, 85, 80, TFT_ORANGE);
// 绘制一个三角形填充,参数:三个顶点的 x 坐标,三个顶点的 y 坐标,颜色
tft.fillTriangle(105, 80, 115, 70, 115, 80, TFT_PURPLE);
// 第四行:圆角矩形
// 绘制一个圆角矩形边框,参数:左上角的 x 坐标,左上角的 y 坐标,矩形的宽度,矩形的高度,圆角的半径,颜色
tft.drawRoundRect(10, 75, 20, 20, 5, TFT_PINK);
// 绘制一个圆角矩形填充,参数:左上角的 x 坐标,左上角的 y 坐标,矩形的宽度,矩形的高度,圆角的半径,颜色
tft.fillRoundRect(35, 75, 20, 20, 5, TFT_BLUE);
// 显示文本
tft.setCursor(10, 10); // 设置文本光标位置,参数:x 坐标,y 坐标
tft.println("Hello, I am Eva!"); // 打印文本,参数:文本内容
delay(2000); // 等待2秒钟
}
技巧:可以先把绘图代码全部注释掉,只把屏幕填充为纯色(当然不是黑色)来检查是否显示完整或者偏移
tft.fillScreen(TFT_WHITE); //白色
四、补充带触摸功能的屏幕配置(以ILI9488的3.5寸屏幕为例)
与基础款相比,多了LED、T_CLK、T_CS、T_DO、T_DIN、T_IRQ、MISO这几个引脚,接下来一一将其配置。
首先板子上标的LED其实是我们之前的TFT_BL(LED back-light),用于控制背光强度,这里将它与正极相连设置为全亮度即可。
其余的T_CLK其实是触摸功能的SCK,T_DIN对应SDI(MOSI),只需要将这两个引脚与对应接口连接即可,T_IRQ悬空即可,不用连接。
还剩下T_CS、T_DO引脚,这里对他们单独配置,定义MISO接到T_DO,TOUCH_CS接到T_CS,这里MISO不用接到屏幕的MISO(如果有的话)。
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 15
#define TFT_DC 2
#define TFT_RST 4
#define TOUCH_CS 21
第二步打开 \Arduino\libraries\TFT_eSPI\User_Setup_Select.h,找到并取消注释
#include <User_Setups/Setup21_ILI9488.h> // Setup file for ESP32 and ILI9488 SPI bus TFT
打开\Arduino\libraries\TFT_eSPI\User_Setups\Setup21_ILI9488.h,进行同样的引脚定义
接下来在ardunio运行一下实例程序,完美运行!
恭喜你已经完成了TFT屏幕配置,点亮了自己的TFT屏幕,接下来也许会出关于TFT屏幕学习的更多教程,显示图片,GIF,时间……做一个电子相册、小时钟、桌面小电视什么的