Skip to Content
Lua 自動化Dongle 專屬功能

Dongle 專屬功能

有些裝置(例如 STM32 Dongle)自己提供廠商操作、INT 輸入、匯流排恢復和精確脈衝。 腳本可以直接使用它們,全部只作用在這支腳本自己的匯流排。這些功能需要裝置支援; 模擬後端只有一個回聲操作 echo。

廠商操作:dongle.op

local r = dongle.op("wave", {scl_hz = 100000, sda_hz = 100000}) check(r.tick_hz > 0, "wave started")

參數表用字串鍵寫具名參數,或用 1、2… 依宣告順序寫位置參數。程式會依裝置宣告的 目錄檢查型別與範圍、組出位元組,結果欄位再轉成表:

  • 數字型別 → 數字;bool → 布林;
  • enum → 標籤字串(不在目錄裡的值是數字);
  • hex → 小寫十六進位字串。

打錯操作名稱或參數會丟出清楚的錯誤訊息,腳本以失敗結束。

INT:int.config/int.status/int.events/int.clear

int.config("falling", "up") delay_ms(100) local ev, dropped = int.events() log("info", "edges: " .. #ev .. ", dropped: " .. dropped)

腳本結束時(不論結果)會自動釋放這支腳本的 INT 設定。int.events() 不會等待, 有就回傳、沒有回傳空陣列;它用腳本自己的游標,不會把事件從畫面或 Plugin 手上拿走。

匯流排恢復與脈衝:i2c.recover/gpio.pulse

local pins = i2c.recover() check(pins == 3, "bus released") -- 3:兩條線都已放開 gpio.write(1, 0) local w = gpio.pulse(1, 1, 2000) -- 2000 微秒高電位脈衝

i2c.recover() 做完不代表線已放開,請檢查回傳值。gpio.pulse() 的腳位要先設成輸出。

範例:以 echo 驗證參數編碼

dongle_echo.lua下載 dongle_echo.lua
-- 用模擬後端的回聲操作驗證 dongle.op 的參數編碼:送出什麼就收回什麼。
local r = dongle.op("echo", {data = "0a0B"})
check(r.data == "0a0b", "named argument comes back as lowercase hex")
local r2 = dongle.op("echo", {"deadbeef"})
check(r2.data == "deadbeef", "positional argument works too")
log("info", "dongle_echo done")
預期輸出
CHECK OK: named argument comes back as lowercase hex
CHECK OK: positional argument works too
dongle_echo done

範例:設定方波(需要真實裝置)

dongle_wave.lua下載 dongle_wave.lua
-- 需要支援 "wave" 操作的真實裝置(例如 STM32 Dongle);模擬後端沒有這個操作。
local r = dongle.op("wave", {scl_hz = 100000, sda_hz = 100000})
check(r.tick_hz > 0, "wave started")
log("info", "tick_hz = " .. r.tick_hz)

⚠ 這支範例需要實體硬體才能真的執行,模擬後端(mock)沒有對應的裝置可以回應。

完整函式列表見 API 參考。