Skip to Content
Lua 自動化第一次跑腳本

第一次跑腳本

不用接硬體:模擬後端 mock

程式內建一個模擬後端叫 mock:它在電腦裡假裝有一顆晶片,讀寫都是真的會改變 內容,只是資料留在記憶體裡,不會真的送到任何實體裝置上。學這個教學、練習寫腳本, 從頭到尾都可以只用 mock,完全不需要接任何硬體。

開一個終端機視窗

要跑腳本得先打指令,打指令要用終端機(一個只能用打字操作的視窗,跟平常點滑鼠 的視窗不一樣;Windows 內建的兩種叫「命令提示字元」跟「PowerShell」,這裡用哪一種 都可以)。最簡單的開法:

  1. 找到 nexus_tui.exe 所在的資料夾——開始功能表找到程式的捷徑,滑鼠右鍵→ 「開啟檔案所在位置」,會開一個指到那個資料夾的檔案總管視窗(免安裝版的話,就是 你解壓出來的那個資料夾)。
  2. 點一下視窗最上面的網址列(顯示目前路徑的那一條),把裡面的路徑選起來,直接 打 cmd 再按 Enter——會在這個資料夾開一個命令提示字元視窗。

⚠ 如果你開的是 PowerShell(打 powershell 而不是 cmd):等一下打指令時, nexus_tui.exe 前面要多加 .\,寫成 .\nexus_tui.exe。這是 PowerShell 特有的 安全限制——它不會直接執行「目前資料夾裡的檔案」,一定要用 .\ 明講「就是這個 資料夾裡的那個檔案」。命令提示字元沒有這個限制,直接打 nexus_tui.exe 就可以。 下面的範例都用命令提示字元的寫法,PowerShell 的話自己在 nexus_tui.exe 前面補上 .\ 即可。

下載並儲存範例

下面每一個範例都可以用「下載」連結存下來。存到一個你自己記得住、路徑裡沒有 空白字元的地方最單純,這篇教學統一假設存到了 C:\lua\——所以 hello.lua 存下來 之後就是 C:\lua\hello.lua。

跑第一支腳本

最簡單的範例只做兩件事:用 print() 印一行字、用 log() 寫一筆 Log。

-- 最簡單的範例:確認腳本能執行,並認識 print()/log() 兩種輸出方式。
print("hello from Lua")
log("info", "hello, nexus")
預期輸出
hello from Lua
hello, nexus

用批次模式跑最簡單,一行指令就結束,結果直接印在終端機畫面上:

nexus_tui.exe --dongle mock --batch --run C:\lua\hello.lua

--dongle mock 讓程式一開機就用模擬後端,--batch --run C:\lua\hello.lua 執行完 hello.lua 就結束。你會看到「預期輸出」那兩行,加上幾行程式自己附加的摘要(見下面 「預期輸出」是什麼)。

這裡故意寫的是完整路徑 C:\lua\hello.lua,不是只寫 hello.lua。 程式找腳本 是照著終端機目前所在的資料夾去找檔名的,不是照你存檔案的那個資料夾——這兩個 資料夾通常不是同一個。只寫檔名的話,程式會回報打不開這個檔案(結束時代表失敗的 數字是 7);寫完整路徑就一定找得到,不管你的終端機開在哪裡都一樣。之後幾頁的 範例指令為了簡短會直接寫檔名(像 --run i2c_rw.lua),實際照著打的時候,請自己 換成你存檔案的完整路徑。

也可以互動著跑:正常開啟程式(不加任何參數,或加 --dongle mock),在下方指令列 輸入 dongle mock 切到模擬後端,再輸入 run C:\lua\hello.lua 執行;這種跑法的 輸出要到 Log 面板去看,不是印在指令列上。互動模式的 run 指令是照空白字元分開 每個字,路徑裡如果有空白會被誤判成兩個東西而失敗,這也是前面建議存到沒有空白 路徑的原因(批次模式的 --run 用雙引號包住路徑就能處理空白,但不如一開始就避開 空白單純)。

「預期輸出」是什麼

每個範例的「預期輸出」只列出腳本自己寫下的那幾行——也就是 log()/ print()/check() 產生的內容。實際執行時,你會多看到幾行程式自動附加的英文 摘要,跑 hello.lua 實際看到的完整內容大概是這樣:

Script start: C:\lua\hello.lua hello from Lua hello, nexus Script PASSED (0 checks): C:\lua\hello.lua Script 'C:\lua\hello.lua' completed.

Script start: ...、Script PASSED (...): ...、Script '...' completed. 這三行 都是引擎自動附加的(開始執行一行、結束時的判定摘要兩行),跟你腳本裡有沒有 check() 無關。如果你自己額外用 --cmd 先下了其他指令(例如 addr 58),每個 --cmd 也會各自多印一行確認(addr 58 對應 ADDR: 0x58)——後面幾頁的範例都是 腳本自己設定前置條件,不需要你另外下 --cmd,但這個附加行為本身跟哪一頁無關。 這些附加的行,每一頁的「預期輸出」方塊都不會重複列出來——你自己畫面上多看到這幾行 是正常的,不是哪裡跑錯了。

接下來

下一頁開始從頭認識 Lua 最基本的語法:變數、數字、字串。