GPIO: 讀取、驅動與脈衝¶
GPIO 輔助方法位於 AqProtocolExerciser: 它們直接與儀器的 GPIO 層溝通(不是匯流排裝置)。從 aqpxlib 或 aqpxlib.gpio 匯入列舉與 GPIO protobuf 型別——一般腳本不需要 aqpxlib.message。
from aqpxlib import AqProtocolExerciser, PxIoState
with AqProtocolExerciser.connect(host="localhost", port=60600) as px:
...
型別參考: GPIO (API)。
邏輯準位(PxIoState)¶
驅動或解讀狀態時使用 PxIoState:
| 成員 | 意義 |
|---|---|
PxIoState.LOW |
驅動或取樣為低 |
PxIoState.HIGH |
驅動或取樣為高 |
PxIoState.HIGH_Z |
高阻抗(未主動驅動) |
讀取接腳狀態(get_gpio_state)¶
Exerciser 會回報所有接腳的狀態;函式庫再依 gpio_idx 選出單一 PxGpioPinState,欄位如下: | 欄位 | 意義 |
| ----- | ------- |
| pin_idx | 接腳索引(對應硬體編號) |
| output_state | 儀器正在驅動的準位(未驅動時為 None/未設定) |
| input_state | 最近一次取樣的輸入準位(無法取得時為 None/未設定) |
若 gpio_idx 為負值,或超過回應中的最後一個接腳,函式庫會拋出 ValueError。
驅動靜態準位(set_gpio_state)¶
這會對單一接腳送出設定狀態操作。若該 GPIO 已被儀器上的其他協定佔用,伺服器可能拒絕請求。
此處對 gpio_idx 沒有 Python 端限制(與脈衝不同);有效索引取決於硬體與韌體。
發送脈衝(send_gpio_pulse)¶
發出一個脈衝: idle → 以active_time_ns維持 active → idle。
px.send_gpio_pulse(
gpio_idx=8,
active_state=PxIoState.HIGH,
idle_state=PxIoState.LOW,
active_time_ns=5000,
)
| 限制 | 說明 |
|---|---|
| 接腳 | 僅限 gpio_idx 8 或 9(與脈衝寬度觸發工具相同)。 |
| 寬度 | active_time_ns 必須大於 5 ns 且小於 1 秒(1_000_000_000 ns)。 |
另見: GPIO 脈衝寬度觸發 的 set_gpio_trigger 與 gpio_trigger 全域事件。
相關 GPIO (API)。