arduino-esp32:基于TFT-eSPI库实现触摸显示屏

这篇具有很好参考价值的文章主要介绍了arduino-esp32:基于TFT-eSPI库实现触摸显示屏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

在arduino的IDE上已经搭建好了ESP32环境的话,写写小应用的话还是很简单的,毕竟有这么多优秀的库。
之前用自己买的TFT屏试了一下TFT-eSPI库的驱动效果,显示效果挺好的,但是触摸一直没用上。最近有空了弄了一下。
我的屏幕是2.2寸/2.4/2.8/3.2/3.5/4.0寸TFT触摸彩色SPI串口液晶屏显示模块,这个3.5寸的。
arduino-esp32:基于TFT-eSPI库实现触摸显示屏
接口长这样:
arduino-esp32:基于TFT-eSPI库实现触摸显示屏

显示流程

  • 下载TFT-eSPI库。直接到arduino的库管理器里下:
    arduino-esp32:基于TFT-eSPI库实现触摸显示屏
    或者去github上把源代码下载下来,然后解压到上一篇中说的sketchbook目录下的libraries文件夹下即可。
    arduino-esp32:基于TFT-eSPI库实现触摸显示屏
    arduino-esp32:基于TFT-eSPI库实现触摸显示屏
    重启arduino就可以在示例里找到这个库提供的例子了。这里直接打开这个触摸校准的例子。
    arduino-esp32:基于TFT-eSPI库实现触摸显示屏
    直接编译上传的话肯定是没用的,还需要对底层的驱动代码做一定的修改。
  • 找到刚才下载的TFT-eSPI库的源文件夹,直接打开User_Setup_Select.h。这里就以我的显示屏驱动为例。
    arduino-esp32:基于TFT-eSPI库实现触摸显示屏
    刚下载来是默认开启第22行的头文件的。也就是上图中的User_Setup.h。这是一个用户自定义的头文件,里面包含的是对硬件引脚分配、SPI速率、相关宏定义等的一些自定义选项,用户可以根据自己的情况自行分配选择。
    而下面的头文件就是作者已经写好的对某些特定的常用的驱动芯片的一些基本的参数配置,这里我们直接用这个写好的。我的芯片是ILI9488,板子是ESP32。这里直接将22行注释掉,取消注释第47行的头文件包含。 然后这里就不需要任何修改了。
    arduino-esp32:基于TFT-eSPI库实现触摸显示屏
    接下来直接找到上图里的头文件位置。可以看到这个驱动芯片的显示部分的SPI引脚定义在这里已经定义好了。当然这也不是随便定义的。
    arduino-esp32:基于TFT-eSPI库实现触摸显示屏

这是我的板子的引脚资源分配图。可以看到ESP32的硬件SPI中的VSPI的各个引脚就是上图中头文件里分配的SPI引脚。
arduino-esp32:基于TFT-eSPI库实现触摸显示屏
那么如果按照这个文件中所标识的引脚,将显示屏上的引脚对应的接上,其实显示部分就可以正常运作了。所以如果仅仅需要显示,需要做的工作只有两步:

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

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

触摸流程

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

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

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

踩坑

那么如果你就这样把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接入这条线路。
arduino-esp32:基于TFT-eSPI库实现触摸显示屏
那么根据这条注释,我们把原来的接线改动一下。ESP32所引出的SCK、MISO、MOSI不需要改动。触摸模块的SCK、MISO、MOSI也不需要改动。把显示模块的MISO引脚和面包板上的ESP32的MISO线路的接线直接断开,不接了。如下图:
arduino-esp32:基于TFT-eSPI库实现触摸显示屏
面包板上的具体接线如下图:
arduino-esp32:基于TFT-eSPI库实现触摸显示屏

LED引脚的小技巧

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

效果

图片:
arduino-esp32:基于TFT-eSPI库实现触摸显示屏
GIF:
arduino-esp32:基于TFT-eSPI库实现触摸显示屏文章来源地址https://www.toymoban.com/news/detail-406177.html

到了这里,关于arduino-esp32:基于TFT-eSPI库实现触摸显示屏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Arduino开发-TFT_eSPI库学习

    TFT_eSPI库是通过SPI方式驱动LCD屏幕的一个Arduino库,并且支持PlatformIOIDE一键下载使用。对于Arduino模式开发的屏幕开发既便捷又稳定。 同时LVGLGUI开发的底层驱动接口也是使用TFT_eSPI库的API。 基于PlatformIO IDE 讲解。 首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。 TFT_

    2023年04月08日
    浏览(34)
  • 解决Arduino LVGL TFT_eSPI 屏幕偏移问题

    本教程适用于使用 TFT-eSPI 驱动屏幕(横屏!横屏!(竖屏测试没问题))显示不全的问题 基于合宙esp32c3 arduinoLVGL框架,屏幕为中景园 1.47(172x320) 1.14(135x240) 先贴两张显示不全的图片 User-Setup.h配置 在TFT-eSPI初始化函数后面 添加 按住Ctrl再点击setRotation进入(再点击右边高亮)

    2024年02月10日
    浏览(36)
  • ESP8266网络相框采用TFT_eSPI库TJpg_Decoder库mixly库UDP库实现图片传送

    用ESP8266和TFT_ESPI模块来显示图片数据。具体来说,我们将使用ILI9431显示器作为显示设备,并通过UDP协议将图片数据从发送端传输到ESP8266。最后,我们将解析这些数据并在TFT屏幕上显示出来。在这个过程中,我们将面临一些编程挑战,但我们将尽力克服它们。 首先,我们需要

    2024年01月25日
    浏览(37)
  • TFT屏幕在arduino (esp 32)下的驱动,汉字显示和字库比较

    绝大多数的tft屏幕在esp32 下都可以被 TFT_eSPI 驱动显示,以下清单中的驱动模块都可以用tft_espi来显示: 上面的驱动表基本囊括了主要的TFT显示模块,所以除非不在这个清单中,所以别找第三方驱动了。 二、TFT模块的汉字显示方式和字库调用 在TFT_eSPI 的官方系统中提供了pro

    2024年02月07日
    浏览(43)
  • 基于 Arduino 库实现 ESP32 TCP Server 应用例程

    ESP32 开启 WiFi Station 模式连接路由器 连上路由器后将获取到分配的 IP 地址 基于分配的 IP 地址创建 TCP Server 手机与 ESP32 连接同一路由器 查看 UART0 日志打印,获取 TCP Server 的 IP 地址 使用手机端 TCP 调试 APP 与 ESP32 创建的 TCP Server 建立连接

    2024年02月12日
    浏览(58)
  • 基于 Arduino 库实现 ESP32 使能 WiFi AP + TCP Server 的应用

    ESP32 开启 WiFi AP 模式创建 WiFi 热点 定义 IP 地址 创建 TCP Server 使用手机连接 ESP32 创建的 AP 热点 查看 UART0 日志打印,获取 TCP Server 的 IP 地址 使用手机端 TCP 调试 APP( 网络助手 ) 与 ESP32 创建的 TCP Server 建立连接

    2024年02月12日
    浏览(43)
  • 开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32发送指令、ESP32接收指令,实现小车毫秒级完美控制_公羽兴

    发文希望能够帮忙物联网爱好者少走弯路,少被割韭菜。如果觉得此文对您有帮助的话帮忙点个赞,感谢!!! 哔哩哔哩网址: 开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32发送指令、ESP32接收指令,实现小车毫秒级完美控制_公羽兴_哔哩哔哩_bilibili 开源免

    2024年02月05日
    浏览(65)
  • Arduino+esp8266+1.3寸TFT屏(st7789驱动)显示图片教程

    Arduino下载TFT_eSPI和JPEGDecoder库 步骤:项目-加载库-管理库 修改User_Setup.h 驱动 #define ST7789_DRIVER 屏尺寸(我的是240*240) #define TFT_WIDTH 240 #define TFT_HEIGHT 240 连接引脚 #define TFT_CS PIN_D8 // Chip select control pin D8 #define TFT_DC PIN_D3 // Data Command control pin #define TFT_RST PIN_D4 // Reset pin (could co

    2023年04月25日
    浏览(46)
  • ESP32经典蓝牙和BLE的使用 (基于Arduino)

    经典蓝牙串口通信 该程序效果如下 ESP32完成初始化后生成一个蓝牙信号 手机通过蓝牙串口发送字符 B ,LED点亮 手机通过蓝牙串口发送字符 A ,LED熄灭 低功耗蓝牙 BLE (常用) BLE GATT协议 GATT全称Generic Attribute Profile, GATT 代表通用属性,它定义了暴露给连接的BLE设备的分层数据结

    2024年02月01日
    浏览(48)
  • TFT_eSPI使用

    参考:TFT-eSPI入门使用教程 Arduino开发-TFT_eSPI库学习 使用VS Code 搭建 platformio 平台 基于arduino的ESP32 学习笔记(二) TFT_eSPI和LVGL库使用笔记 https://b23.tv/VVhmXSp 硬件及软件环境 开发板:ESP32-S3 屏驱动是:ST7789_DRIVER 开发环境:VS Code + PlatformIO 搭建开发环境教程:使用VS Code 搭建

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包