[ESP][驱动]GT911 ESP系列驱动

news2024/10/5 23:28:33

GT911ForESP

GT911在ESP系列上的驱动,基于IDF5.0,ESP32S3编写

本库使用面向对象思想编写,可创建多设备多实例

Github,Gitee同步更新,Gitee仅作为下载仓库,提交Issue和Pull request请到Github

Github: https://github.com/taxue-alfred/GT911ForESP

Gitee: https://gitee.com/TaXue_TianXing/GT911ForESP

1. IDF 4.4 是否可用?

理论可用,未经实践

2. 注意点

以下内容基于编程开发手册REV11.0

1. 0x8040寄存器貌似不再支持软重启

如果按照旧手册使用软重启,读取0x814E会一直返回128(0x80),即使对寄存器写入0。也是坑,如果你买的设备使用的芯片出厂较早,那么网上一些驱动可用。但是我是新芯片,没错又浪费时间了。。。

image-20230120202422455

2. 0x814E状态寄存器必须在读取完或开机之后写入0再读取

这个挺坑的,我就被坑了。。一开始找到的是旧的编程文档,并没有说明这一项。。时间被白白浪费了。。。

image-20230120202625308

3. 目录结构

├─components
│  └─Alfred_GT911
│      │  Alfred_GT911.c 驱动文件
│      │  CMakeLists.txt
│      │
│      └─includes
│              Alfred_GT911.h
│
└─main
        CMakeLists.txt
        GT911ForESP.c 示例文件

4. 如何移植?

1. Alfred_GT911结构体修改

/**类结构体**/
//根据不同平台修改此项
typedef struct {
    i2c_config_t gt911_i2c_config; 
    i2c_port_t i2c_num;
    uint8_t gt911_addr;
    uint16_t height;
    uint16_t width;
    uint8_t rotation;
    TP_point_info points_info[TOUCH_POINT_TOTAL]; //用于存储五个触控点的坐标
}Alfred_GT911;

2. GT911_write_regs() & GT911_read_regs()修改

这两个函数定义了数据发送结构,构成其读写协议。

编写协议函数时注意传入类实例指针,不传入也可以,不过上面的结构体就没有意义了

不同平台按照以下形式构建:

image-20230120203507285

3. 日志打印函数修改

GT911_init()函数中:

    uint8_t buf[5] = {0};
    GT911_read_regs(alfredGt911, GT911_PRODUCT_ID, buf, 4);
    printf("GT911 PRODUCT ID: %s\n", buf);

替换成平台对应的打印函数,如果不想要,删除即可。

5. 参考驱动

https://github.com/TAMCTec/gt911-arduino

https://gitee.com/andida/esp32s3-gt911

此库在我的芯片不可用,修改后可用,已在库中提交Pull Request

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

具体芯片的I2C_Adapter驱动分析

具体芯片的I2C_Adapter驱动分析 文章目录具体芯片的I2C_Adapter驱动分析参考资料:一、 I2C控制器内部结构1.1 通用的简化结构1.2 IMX6ULL的I2C控制器内部结构二、 I2C控制器操作方法三、 分析代码3.1 设备树3.2 驱动程序分析致谢参考资料: Linux内核真正…

03_筛选标记2.0版和3.0版FIND及ColorIndex

文章目录2.0版工作簿筛选标记筛选sheet标记取消筛选标记3.0版ColorIndex 下标代码特别鸣谢,大佬的分享FIND方法的使用2.0版 工作簿筛选标记 Option Explicit Sub 自动筛选()Dim Town As StringDim wsh As WorksheetCall 初始化 初始化表格状态Town InputBox("请输入街…

SLAM笔记——turtlebot传感器ekf实验实验

这里写目录标题实验内容实验准备msg数据类型给uwb和odom增加噪声robot_pose_ekf发布路径实验结果实验内容 本实验将在gazebo仿真环境中使用ekf进行传感器数据融合。本文使用turtlebot3进行实验,turtlebot本身会发布odom和imu。imu的误差可以在urdf文件中进行调整&a…

追梦之旅【数据结构篇】——对数据结构的认知 + 初识时间复杂度和空间复杂度~

详解C语言函数模块知识(下篇)😎前言🙌浅谈数据结构~🙌1、什么是数据结构?(ˇˍˇ) 想~2、什么是算法?ˇˍˇ) 想~3、数据结构和算法的重要性😊4、如何才能学好数据结构呢…

初识 NodeJS(基于 Chrome V8 引擎的 JavaScript 运行时环境)

初识 NodeJS(基于 Chrome V8 引擎的 JavaScript 运行时环境)参考描述NodeJSNodeJS 可以做什么?特点用武之地获取检测运行JavaScript 运行时环境JavsScript 引擎浏览器中的 JavaScript 运行时环境Chrome 浏览器运行时环境NodeJS 中的 JavaScri…

【着色器实现海面效果_菲尼尔/Unlit/Transparent】

1.水体颜色 2.反射,水面波纹流动 3.折射、水底、水底透明度和折射 4.焦散,在水底接近岸边的水域 5.岸边泡沫,水花接近岸边的泡沫 6.水体运动,顶点动画 用灯光模式是Light Model :Unilt Render Type:Transparent 获取水面深度 利用这个节点,从深度图获取世界空间的位…

如何做流程图?这几个实用的制作流程图方法分享给你

说到流程图的制作,相信大家都并不陌生,在日常的工作和学习中,我们都会根据需求接触到各种各样的流程图,有时还要自己动手绘制流程图并使用,但你是否会因为不会绘制流程图而感到苦恼呢?没关系,今…

vue中利用ref实现更灵活的子向父传值

目录前言一,基础代码二,层次递进的讲解用法2.1 给子组件设置ref2.2 自定义事件2.3 给子组件设置一个自定义事件三,灵活性四,注意后记前言 目前我们熟知的子向父传值有两种方式: 一种是在父组件中定义函数,…

【AI】Windows配置GPU Cuda驱动和Pytorch框架

目录 1、Cuda驱动安装 1.1 查看显卡硬件 1.2 查看cuda版本 2、Annaconda python环境准备 2.1 创建pytorch_gpu 2.2 查看python版本 3、Pytorch和torchVsion软件安装 4、验证测试 在进行AI项目开发的时候,经常要在GPU环境中运行代码,对于没有配置…

动手深度学习-pytorch线性代数

标量简单操作长度向量简单操作长度其他操作矩阵简单操作乘法(矩阵*向量)乘法(矩阵*矩阵)范数取决于如何衡量b和c的长度常见范数矩阵范数:最小的满足的上面公式的值Frobenius范数特殊矩阵对称和反对称正定正交矩阵置换矩…

Solidity 中的数学(第 4 部分:复利)

本文是关于在 Solidity 中进行数学运算的系列文章中的第四篇。这次的主题是:复利。 介绍 在我们之前的文章中,我们讨论了百分比以及它们是如何在 Solidity 中计算的。在金融数学中,百分比通常与贷款和存款支付的利息有关。在每个时间段结束时…

深度学习入门基础CNN系列——批归一化(Batch Normalization)和丢弃法(dropout)

想要入门深度学习的小伙伴们,可以了解下本博主的其它基础内容: 🏠我的个人主页 🚀深度学习入门基础CNN系列——卷积计算 🌟深度学习入门基础CNN系列——填充(padding)与步幅(stride&…

CSS 搜索框

CSS 搜索框 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>搜索框</title><style type"text/css">* {margin: 0;padding: 0;}.search-container {margin: 50px;display: flex;width: 500px;height:…

rtthread pwm

1、配置PWM设备驱动相关宏定义 1.1 配置PWM和TIM设备驱动 在RT-Thread Settings 配置界面中&#xff0c;在设备驱动程序目录下勾选 HWTIMER 和 PWM设备驱动程序&#xff0c;如下图所示&#xff1a; 配置完后在 rtconfig.h 中可以查看刚刚配置的 RT_USING_HWTIMER 和 RT_U…

Ribbon策略改变实现步骤(基于Eureka服务注册中心)

前言 Ribbon作为服务调用的作用&#xff0c;自带的默认负载均衡机制是轮询机制也就是轮流访问机制。当然有时候并不是业务上都需要这种机制&#xff0c;这时候就需要改变。 机制类型 RoundRobinRule 轮询 RandomRule 随机 RetryRule 先进行轮询策略获取服务&#xff0c;如…

本地怎么画最简单的监控图

当我们需要监测程序是否正常运行&#xff0c;或者需要观测程序运行是否平稳&#xff0c;或者需要知道特定场景下指标的状态时&#xff0c;那我们都需要将监控可视化。今天我简单记录下&#xff0c;本地是如何监控可视化~ 目录简单调试阶段——仅使用prometheus1.安装promethues…

【Redis】GEO(地理坐标)数据结构

【Redis】GEO(地理坐标)数据结构 文章目录【Redis】GEO(地理坐标)数据结构1. GEO简介1.1 GEO常用命令2. 实战示例2.1 场景介绍2.2 实战2.2.1 将店铺数据导入Redis2.2.2 根据地理坐标进行分页查询1. GEO简介 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2…

BFS判重和双向广搜

目录 一、前言 二、BFS判重 1、set 判重 2、字典判重 3、跳蚱蜢&#xff08;2017年省赛&#xff0c;lanqiaoOJ题号642&#xff09; &#xff08;1&#xff09;字典去重、用 list 实现队列 &#xff08;2&#xff09;set() 去重、用 list 实现队列 &#xff08;3&#x…

setDaemon python守护进程,队列通信子线程

使用setDaemon()和守护线程这方面知识有关&#xff0c; 比如在启动线程前设置thread.setDaemon(True)&#xff0c;就是设置该线程为守护线程&#xff0c;表示该线程是不重要的,进程退出时不需要等待这个线程执行完成。这样做的意义在于&#xff1a;避免子线程无限死循环&#x…

IK分词工具

https://code.google.com/archive/p/ik-analyzer/ IK Analyzer是一个开源的&#xff0c;基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始&#xff0c; IKAnalyzer已经推出了4个大版本。最初&#xff0c;它是以开源项目Luence为应用主体的&#xff0c;结合…