gt911 --- GT911 五點電容式觸控控制器

gt911 模組提供 Goodix GT911 投射式電容觸控螢幕控制器的驅動程式,常與 4.3"--7" 800x480 LCD 面板搭配使用。該控制器可追蹤多達五個同時觸控點,並將每個觸控點回報為 (x, y, size, id) tuple,其中只要手指仍停留在面板上,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 reset 線的接腳編號或名稱(而非 Pin 物件)。驅動程式需要在重置期間改變接腳方向。

irq_pin 是連接到 GT911 interrupt 線的接腳編號或名稱(而非 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

傳回一個 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)。