gt911 --- GT911 五点电容式触摸控制器

gt911 模块为汇顶(Goodix)GT911 投射式电容触摸屏控制器提供驱动,该控制器常与 4.3 英寸到 7 英寸的 800x480 LCD 面板搭配使用。该控制器最多可跟踪五个同时存在的触摸点,并将每个触摸点报告为一个 (x, y, size, id) 元组,其中只要手指仍停留在面板上,id 在多次读取之间保持稳定。

该驱动通过 I2C 与芯片通信,并使用两个额外的 GPIO:

  • 一条 reset 线,在上电期间保持为低电平,并与 IRQ 线一起切换以选择 GT911 的 7 位 I2C 地址(复位期间 IRQ 为低电平时为 0x5D,IRQ 为高电平时为 0x14);

  • 一条 interrupt 线,当触摸事件发生时由控制器置位。

构造完成后,应用程序可以使用 GT911.read_points() 轮询触摸,或者提供一个 touch_callback,使其在 IRQ 引脚的下降沿被调用。

class GT911 -- 五点电容式触摸控制器

class gt911.GT911(bus: machine.I2C, reset_pin: int | str, irq_pin: int | str, address: int = _DEFAULT_ADDR, width: int = 800, height: int = 480, touch_points: int = 1, reverse_x: bool = False, reverse_y: bool = False, reverse_axis: bool = True, sito: bool = True, refresh_rate: int = 240, touch_callback: Callable | None = None)

创建一个 GT911 触摸屏控制器对象。

bus 是 GT911 所连接的 machine.I2C 总线对象。

reset_pin 是连接到 GT911 复位线的引脚编号或名称(不是 Pin 对象)。驱动在复位期间需要改变引脚方向。

irq_pin 是连接到 GT911 中断线的引脚编号或名称(不是 Pin 对象)。驱动在复位期间需要改变引脚方向。

address 是控制器的 I2C 地址。默认为 gt911._DEFAULT_ADDR

width 是触摸面板沿 X 轴的分辨率,以像素为单位。

height 是触摸面板沿 Y 轴的分辨率,以像素为单位。

touch_points 是要报告的最大同时触摸点数量(1 到 5)。

reverse_x 若为 True,则翻转 X 轴。

reverse_y 若为 True,则翻转 Y 轴。

reverse_axis 若为 True,则交换 X 轴和 Y 轴。

sito 为 True 时启用控制器的单输入触摸输出(Single-Input-Touch-Output)模式。

refresh_rate 是触摸报告速率,以 Hz 为单位。

touch_callback 是一个可选的可调用对象,当触摸事件发生时在 IRQ 引脚的下降沿被调用。传入 None 以使用轮询模式。

read_id() bytes

返回包含 GT911 产品 ID 的 4 个字节。

read_points() tuple

返回一个元组 (n, points),其中 n 是活动触摸点的数量,points 是一个包含 5 个 array("H", ...) 条目的列表。每个条目包含 [x, y, size, id]xy 是屏幕坐标,size 是触摸压力,id 是唯一的跟踪 ID,对于某个手指在多次读取之间保持稳定。

只有 points 的前 n 个条目包含有效数据。

reset() None

复位 GT911 控制器,并在提供了 touch_callback 时重新启用 IRQ 处理程序。

常量

gt911._DEFAULT_ADDR: int

GT911 控制器的默认 I2C 地址(0x5D)。