arduino-esp32:基于TFT-eSPI库实现触摸显示屏_arduino tft屏幕ui设计

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

那么如果按照这个文件中所标识的引脚,将显示屏上的引脚对应的接上,其实显示部分就可以正常运作了。所以如果仅仅需要显示,需要做的工作只有两步:

  • 下载TFT-eSPI库。
  • 修改上述的头文件包含。

但是买个触摸屏只用来显示多少有点亏。TFT-eSPI也编写了对于触摸模块的驱动代码,只不过需要进行一些额外的操作,当然这也并不难。

触摸流程

在上图中的头文件里可以看到有一个TOUCH_CS的宏定义。我们要使用触摸驱动就必须把这个的注释取消掉。但是这也只有一个CS,其他的引脚似乎并没有在任何地方定义,可是显示屏的引脚上对触摸驱动也是有SPI引脚引出的。那么如果你直接把这CS引脚接上ESP32的26引脚,会发现这并没有任何用处。
在这里插入图片描述
其实这跟SPI这个协议有关。了解SPI这个协议的通信方式之后,其实就很容易解决了。
先来看看SPI协议中主机与从机的通信连接方式:
在这里插入图片描述
太具体的就不说了,网上好多。对我们这里有用的就是:
如果只存在一个SPI从设备,例如我们这里的显示模块,那么主机(ESP32)的SPI接口就可以直接通过杜邦线将两个设备的SPI接口相互连接即可正常通信。此时CS引脚直接拉低或接地即可。
但是如果存在多个SPI从设备,例如我们这里的显示模块加上触摸模块,那么根据这张图,可以发现,其实一个主设备和多个从设备的SCK、MISO、MOSI,是共享线路的,而CS引脚在这里就起到了重要的作用。它能够让主设备选择某一时刻与哪一个从设备进行通信。那么说到这里,结合上面的头文件中只定义了一个TOUCH_CS引脚,怎么驱动显示和触摸设备就很显而易见了:

我们只需要将主设备的SCK、MISO、MOSI引脚引出,然后将多个从设备的SCK、MISO、MOSI引脚分别接在引出的三条对应的线路上,最后通过程序设置CS引脚来分时的选通从设备,就可以在这里实现对触摸显示屏的正常驱动。

至于这个引出的线路怎么实现,用面包板就行了。
在这里插入图片描述
它的底部其实就是一条金属条。
在这里插入图片描述
原理就是这样,具体怎么接都行。比如我是这么接的。最上面一排的三根接ESP32的SCK、MISO、MOSI引脚,把这三条线路引到面包板上,这就对应了前文中的SPI连接图上的那三根引出的线。接下来就把从设备的SCK、MISO、MOSI引脚接在对应的线路上就行了。比如我这个面包板上下两层不连通,我用一根跳线把上面下面连通了,然后把显示屏的显示模块和触摸模块的SCK、MISO、MOSI接口分别接在了下面部分的两排上。
只有这三根线需要通过面包板来连接,其他的线直接接入ESP32原生的引脚即可。
在这里插入图片描述

踩坑

那么如果你就这样把ESP32的SCK、MISO、MOSI引脚接入了面包板,并把显示和触摸的SCK、MISO、MOSI分别接到了对应的线路上,然后把代码那么一上传,会发现这个校准的触摸程序,依旧不能实现触摸🙃。不过原因其实也很简单(虽然我找了很久🙃)。
回到上面的这个头文件,这里其实有一句注释:

leave TFT SDO disconnected if other SPI devices share MISO

意思就是:

如果有其他的SPI设备共享了MISO这条线路,那么就让TFT显示屏的SDO接口别连接这条线路。

意思很简单,就是如果你是单个的SPI设备,直接对着连接。但是如果存在多个SPI设备(比如我们这里有显示模块和触摸模块两个),那么就让显示模块对应的MISO接口不要接入这条线路。也就是只让其他的设备的MISO接入这条线路。
在这里插入图片描述
那么根据这条注释,我们把原来的接线改动一下。ESP32所引出的SCK、MISO、MOSI不需要改动。触摸模块的SCK、MISO、MOSI也不需要改动。把显示模块的MISO引脚和面包板上的ESP32的MISO线路的接线直接断开,不接了。如下图:
在这里插入图片描述
面包板上的具体接线如下图:
在这里插入图片描述

LED引脚的小技巧

LED引脚是用来控制背光的,但是其实这个头文件中是没有定义的。所以你需要自己手动的定义一个引脚让它输出高电平,或是接在3.3V的引脚上,抑或是输出PWM信号调节亮度,否则显示屏是不会亮的。但是如果你并不需要调节亮度这种功能,插拔杜邦线比较方便,又懒得自定义一个引脚的话,可以试试用这个办法:
在下载代码之前,把LED引脚空接。代码下载完毕后,将LED引脚接在ESP32的EN引脚上。
如下图:
在这里插入图片描述
这样的话,不需要你重新定义一个LED引脚,也不需要额外找一个3.3V的接口,显示屏也能够在上电后正常运作。不过记得在下载代码时要断开,否则下不进去。

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

### ESP32-S3 触摸屏驱动使用教程 #### 1. 硬件概述 ESP32-S3 是一款功能强大的微控制器,支持 Wi-Fi 和蓝牙连接。当其与 LVGL 图形结合时,可以高效地开发图形用户界面 (GUI) 应用程序。对于 1.69 英寸电容触摸屏的支持,主要依赖于两个核心组件:ST7789 显示驱动芯片和 CST816 触摸控制芯片[^1]。 #### 2. 软件环境准备 为了成功运行该项目,需完成以下软件配置: - 安装最新版本的 Espressif IoT Development Framework (ESP-IDF)。 - 下载并安装 LVGL 图形及其相关依赖项。 - 配置 IDE 或命令行工具链以便编译和上传代码到 ESP32-S3 设备。 #### 3. 屏幕初始化设置 屏幕初始化涉及对 ST7789 的基本参数设定以及触控校准过程。以下是部分关键代码片段: ```c #include "lvgl/lvgl.h" #include "driver/spi_master.h" void initialize_display(void){ // 初始化 SPI 总线用于通信 spi_bus_config_t buscfg = { .mosi_io_num=GPIO_NUM_19, .miso_io_num=-1, .sclk_io_num=GPIO_NUM_18, .quadwp_io_num=-1, .quadhd_io_num=-1 }; esp_err_t ret; ret = spi_bus_initialize(VSPI_HOST, &buscfg, SPI_DMA_CH_AUTO); assert(ret==ESP_OK); // 设置显示屏具体参数... } ``` 上述代码展示了如何通过 SPI 接口来初始化硬件设备。 #### 4. 触摸事件处理 CST816 提供了高精度多点触控能力,在实际应用中可通过中断方式捕获用户的输入动作,并将其映射至 GUI 中的对象上。 ```c static void touch_read(lv_indev_drv_t *indev_driver, lv_indev_data_t *data){ uint16_t touch_x, touch_y; bool touched; /* Read the coordinates and state from the TS interface */ if(ts_read(&touch_x, &touch_y)){ data->state = LV_INDEV_STATE_PR; data->point.x = touch_x; data->point.y = touch_y; }else{ data->state = LV_INDEV_STATE_REL; } } // 注册该函数作为输入设备驱动的一部分 lv_indev_drv_register(touch_read); ``` 此段代码定义了一个读取触摸位置的方法,并注册它成为 LVGL 输入系统的回调接口之一。 #### 5. 运行效果展示 一旦所有模块都被正确定义并且相互关联起来之后,则可以在屏幕上看到由 LVGL 渲染出来的各种 UI 组件,比如按钮、滑块或者列表框等等。这些元素不仅外观精美而且响应迅速,极大地提升了用户体验质量[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值