ESP32-CYD(2432S028)液晶2.8寸屏开发板使用ESP32-WROOM-32模块作为主控,主控是一款双核MCU,集成了Wi-Fi和蓝牙功能,主频可达240MHz,具有520KB的SRAM、448KB的ROM,闪存容量为4MB+4MB,显示分辨率为240x320,采用电阻式触控式屏幕。该模块包括LCD显示器、背光控制电路、触控式屏幕控制电路、扬声器驱动电路、光敏电路和RGB LED控制电路。支持TF卡界面、序列界面、温湿度感测器界面(DHT11界面)和保留的IO口界面,该模块支持在Arduino IDE、ESP IDE、MicroPython和Mixly中进行开发。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十八:ESP32 CYD开发板WiFi蓝牙2.8寸240*320智能液晶显示屏带触摸屏TFT模块
项目实验之十七:ESP32 CYD液晶2.8寸开发板显示文本和测试触摸屏
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百三十八:ESP32 CYD开发板WiFi蓝牙2.8寸240*320智能液晶显示屏带触摸屏TFT模块
项目实验之十七:ESP32 CYD液晶2.8寸开发板显示文本和测试触摸屏
*/
#include <SPI.h> // 引入SPI库,用于与触摸屏通信
#include <TFT_eSPI.h> // 引入TFT_eSPI库,用于驱动TFT显示屏
#include <XPT2046_Touchscreen.h> // 引入XPT2046触摸屏库
TFT_eSPI tft = TFT_eSPI(); // 创建TFT_eSPI对象,用于操作显示屏
// 定义触摸屏的引脚
#define XPT2046_IRQ 36 // 触摸屏中断引脚
#define XPT2046_MOSI 32 // 触摸屏MOSI引脚
#define XPT2046_MISO 39 // 触摸屏MISO引脚
#define XPT2046_CLK 25 // 触摸屏时钟引脚
#define XPT2046_CS 33 // 触摸屏片选引脚
// 创建一个SPI类对象,用于触摸屏通信
SPIClass touchscreenSPI = SPIClass(VSPI); // 使用VSPI端口
XPT2046_Touchscreen touchscreen(XPT2046_CS, XPT2046_IRQ); // 创建XPT2046触摸屏对象
#define SCREEN_WIDTH 320 // 显示屏宽度
#define SCREEN_HEIGHT 240 // 显示屏高度
#define FONT_SIZE 2 // 字体大小
// 存储触摸屏坐标:(x, y) 和压力(z)
int x, y, z;
// 在串口监视器上打印触摸屏信息,包括X、Y和压力(Z)
void printTouchToSerial(int touchX, int touchY, int touchZ) {
Serial.print("X = ");
Serial.print(touchX);
Serial.print(" | Y = ");
Serial.print(touchY);
Serial.print(" | Pressure = ");
Serial.print(touchZ);
Serial.println();
}
// 在TFT显示屏上打印触摸屏信息,包括X、Y和压力(Z)
void printTouchToDisplay(int touchX, int touchY, int touchZ) {
// 清空TFT屏幕
tft.fillScreen(TFT_WHITE);
tft.setTextColor(TFT_BLACK, TFT_WHITE); // 设置文本颜色和背景色
int centerX = SCREEN_WIDTH / 2;
int textY = 80;
String tempText = "X = " + String(touchX);
tft.drawCentreString(tempText, centerX, textY, FONT_SIZE); // 绘制文本
textY += 20;
tempText = "Y = " + String(touchY);
tft.drawCentreString(tempText, centerX, textY, FONT_SIZE);
textY += 20;
tempText = "Pressure = " + String(touchZ);
tft.drawCentreString(tempText, centerX, textY, FONT_SIZE);
}
void setup() {
Serial.begin(115200); // 开启串口通信,波特率为115200
// 初始化触摸屏的SPI通信并启动触摸屏
touchscreenSPI.begin(XPT2046_CLK, XPT2046_MISO, XPT2046_MOSI, XPT2046_CS);
touchscreen.begin(touchscreenSPI);
// 设置触摸屏旋转为横向模式
// 注意:有些显示屏的触摸屏可能需要设置旋转为3:touchscreen.setRotation(3);
touchscreen.setRotation(1);
// 启动TFT显示屏
tft.init();
// 设置TFT显示屏旋转为横向模式
tft.setRotation(1);
// 清空屏幕,准备写入
tft.fillScreen(TFT_WHITE);
tft.setTextColor(TFT_BLACK, TFT_WHITE); // 设置文本颜色和背景色
// 设置显示中心的X和Y坐标
int centerX = SCREEN_WIDTH / 2;
int centerY = SCREEN_HEIGHT / 2;
tft.drawCentreString("Hello, world!", centerX, 30, FONT_SIZE); // 绘制文本
tft.drawCentreString("Touch screen to test", centerX, centerY, FONT_SIZE);
}
void loop() {
// 检查触摸屏是否被触摸,并在TFT显示屏和串口监视器上打印X、Y和压力(Z)信息
if (touchscreen.tirqTouched() && touchscreen.touched()) {
// 获取触摸屏坐标点
TS_Point p = touchscreen.getPoint();
// 使用map函数校准触摸屏坐标点到正确的宽度和高度
x = map(p.x, 200, 3700, 1, SCREEN_WIDTH);
y = map(p.y, 240, 3800, 1, SCREEN_HEIGHT);
z = p.z;
printTouchToSerial(x, y, z); // 打印到串口监视器
printTouchToDisplay(x, y, z); // 打印到TFT显示屏
delay(100); // 延时100毫秒
}
}
代码解读
1、库文件引入:
SPI.h:引入SPI通信协议库,用于与触摸屏和TFT显示屏进行数据通信。
TFT_eSPI.h:引入TFT_eSPI库,用于驱动和管理TFT显示屏。
XPT2046_Touchscreen.h:引入XPT2046_Touchscreen库,专门用于驱动XPT2046触摸屏控制器芯片。
2、TFT显示屏初始化:
创建TFT_eSPI对象tft,用于后续的显示屏操作。
通过tft.init()初始化TFT显示屏,设置显示参数。
设置显示屏的旋转模式,使其与物理连接相匹配。
3、触摸屏初始化:
定义触摸屏的控制引脚,并创建SPIClass对象touchscreenSPI和XPT2046_Touchscreen对象touchscreen。
通过touchscreen.begin()初始化触摸屏,设置其通信协议和中断引脚。
4、屏幕和触摸屏参数设置:
定义屏幕的宽度、高度和字体大小,这些参数用于后续的显示和触摸校准。
定义变量x、y、z来存储触摸屏的坐标和压力值。
5、触摸屏数据处理:
printTouchToSerial()函数用于将触摸数据输出到串口监视器,方便调试。
printTouchToDisplay()函数用于将触摸数据实时显示在TFT屏幕上,增强用户交互体验。
6、主循环中的触摸检测:
在loop()函数中,通过touchscreen.tirqTouched()和touchscreen.touched()检测触摸屏是否被触摸。
使用touchscreen.getPoint()获取触摸点的原始数据,并使用map()函数将这些数据转换为屏幕坐标系。
调用printTouchToSerial()和printTouchToDisplay()函数,将触摸信息输出到串口和显示屏。
7、触摸屏校准:
使用map()函数对触摸屏的原始坐标进行校准,以匹配TFT显示屏的实际分辨率。
8、用户界面反馈:
在TFT显示屏上显示触摸点的坐标和压力值,提供即时的用户操作反馈。
以上要点涵盖了从库文件引入、硬件初始化、参数设置到用户交互的全过程,展示了如何使用Arduino和相应的库来实现一个基本的触摸屏应用。
实验串口返回情况
实验场景图
评论