219浏览
查看: 219|回复: 6

[项目] 【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏

[复制链接]
【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图2

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动手做(238)--ESP32 CYD 测试触摸屏图1

驴友花雕  中级技神
 楼主|

发表于 2024-11-8 18:50:05

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百三十八:ESP32 CYD开发板WiFi蓝牙2.8寸240*320智能液晶显示屏带触摸屏TFT模块
  项目实验之十七:ESP32 CYD液晶2.8寸开发板显示文本和测试触摸屏

实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百三十八:ESP32 CYD开发板WiFi蓝牙2.8寸240*320智能液晶显示屏带触摸屏TFT模块
  4.   项目实验之十七:ESP32 CYD液晶2.8寸开发板显示文本和测试触摸屏
  5. */
  6. #include <SPI.h>  // 引入SPI库,用于与触摸屏通信
  7. #include <TFT_eSPI.h>  // 引入TFT_eSPI库,用于驱动TFT显示屏
  8. #include <XPT2046_Touchscreen.h>  // 引入XPT2046触摸屏库
  9. TFT_eSPI tft = TFT_eSPI(); // 创建TFT_eSPI对象,用于操作显示屏
  10. // 定义触摸屏的引脚
  11. #define XPT2046_IRQ 36 // 触摸屏中断引脚
  12. #define XPT2046_MOSI 32 // 触摸屏MOSI引脚
  13. #define XPT2046_MISO 39 // 触摸屏MISO引脚
  14. #define XPT2046_CLK 25 // 触摸屏时钟引脚
  15. #define XPT2046_CS 33 // 触摸屏片选引脚
  16. // 创建一个SPI类对象,用于触摸屏通信
  17. SPIClass touchscreenSPI = SPIClass(VSPI); // 使用VSPI端口
  18. XPT2046_Touchscreen touchscreen(XPT2046_CS, XPT2046_IRQ); // 创建XPT2046触摸屏对象
  19. #define SCREEN_WIDTH 320 // 显示屏宽度
  20. #define SCREEN_HEIGHT 240 // 显示屏高度
  21. #define FONT_SIZE 2 // 字体大小
  22. // 存储触摸屏坐标:(x, y) 和压力(z)
  23. int x, y, z;
  24. // 在串口监视器上打印触摸屏信息,包括X、Y和压力(Z)
  25. void printTouchToSerial(int touchX, int touchY, int touchZ) {
  26.   Serial.print("X = ");
  27.   Serial.print(touchX);
  28.   Serial.print(" | Y = ");
  29.   Serial.print(touchY);
  30.   Serial.print(" | Pressure = ");
  31.   Serial.print(touchZ);
  32.   Serial.println();
  33. }
  34. // 在TFT显示屏上打印触摸屏信息,包括X、Y和压力(Z)
  35. void printTouchToDisplay(int touchX, int touchY, int touchZ) {
  36.   // 清空TFT屏幕
  37.   tft.fillScreen(TFT_WHITE);
  38.   tft.setTextColor(TFT_BLACK, TFT_WHITE);  // 设置文本颜色和背景色
  39.   int centerX = SCREEN_WIDTH / 2;
  40.   int textY = 80;
  41.   
  42.   String tempText = "X = " + String(touchX);
  43.   tft.drawCentreString(tempText, centerX, textY, FONT_SIZE);  // 绘制文本
  44.   textY += 20;
  45.   tempText = "Y = " + String(touchY);
  46.   tft.drawCentreString(tempText, centerX, textY, FONT_SIZE);
  47.   textY += 20;
  48.   tempText = "Pressure = " + String(touchZ);
  49.   tft.drawCentreString(tempText, centerX, textY, FONT_SIZE);
  50. }
  51. void setup() {
  52.   Serial.begin(115200);  // 开启串口通信,波特率为115200
  53.   // 初始化触摸屏的SPI通信并启动触摸屏
  54.   touchscreenSPI.begin(XPT2046_CLK, XPT2046_MISO, XPT2046_MOSI, XPT2046_CS);
  55.   touchscreen.begin(touchscreenSPI);
  56.   // 设置触摸屏旋转为横向模式
  57.   // 注意:有些显示屏的触摸屏可能需要设置旋转为3:touchscreen.setRotation(3);
  58.   touchscreen.setRotation(1);
  59.   // 启动TFT显示屏
  60.   tft.init();
  61.   // 设置TFT显示屏旋转为横向模式
  62.   tft.setRotation(1);
  63.   // 清空屏幕,准备写入
  64.   tft.fillScreen(TFT_WHITE);
  65.   tft.setTextColor(TFT_BLACK, TFT_WHITE);  // 设置文本颜色和背景色
  66.   
  67.   // 设置显示中心的X和Y坐标
  68.   int centerX = SCREEN_WIDTH / 2;
  69.   int centerY = SCREEN_HEIGHT / 2;
  70.   tft.drawCentreString("Hello, world!", centerX, 30, FONT_SIZE);  // 绘制文本
  71.   tft.drawCentreString("Touch screen to test", centerX, centerY, FONT_SIZE);
  72. }
  73. void loop() {
  74.   // 检查触摸屏是否被触摸,并在TFT显示屏和串口监视器上打印X、Y和压力(Z)信息
  75.   if (touchscreen.tirqTouched() && touchscreen.touched()) {
  76.     // 获取触摸屏坐标点
  77.     TS_Point p = touchscreen.getPoint();
  78.     // 使用map函数校准触摸屏坐标点到正确的宽度和高度
  79.     x = map(p.x, 200, 3700, 1, SCREEN_WIDTH);
  80.     y = map(p.y, 240, 3800, 1, SCREEN_HEIGHT);
  81.     z = p.z;
  82.     printTouchToSerial(x, y, z);  // 打印到串口监视器
  83.     printTouchToDisplay(x, y, z);  // 打印到TFT显示屏
  84.     delay(100);  // 延时100毫秒
  85.   }
  86. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-11-8 18:52:07

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏

代码解读
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和相应的库来实现一个基本的触摸屏应用。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-11-8 18:54:17

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏

实验串口返回情况

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-11-8 18:56:41

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏

实验场景图

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图1

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-11-8 18:58:31

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图1

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2024-11-8 19:00:35

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图1

【花雕学编程】Arduino动手做(238)--ESP32 CYD 测试触摸屏图2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail