13.5. MicroPython 工具

MicroPython 專案在語言本身之外,還提供了一套執行於主機端的工具鏈。其中有兩項工具對任何脫離 IDE 進行的 OpenMV cam 工作流程都相當實用;兩者都能以單一指令從 PyPI 安裝,且都能對 cam 本身已開放的同一組 USB 序列埠/檔案系統介面運作。

13.5.1. mpremote

mpremote 是 OpenMV IDE 的命令列替代方案。IDE 透過其檔案瀏覽器、終端機以及執行指令碼按鈕所完成的工作,這裡只需一道指令即可涵蓋:透過 USB 序列埠連線至 cam、操作 REPL、在 cam 的檔案系統之間複製檔案進出、在不上傳的情況下對 cam 執行主機端的指令碼,以及使用 mip 安裝第三方套件:

$ pip install --user mpremote
$ mpremote                          # interactive REPL
$ mpremote cp main.py :             # upload to cam
$ mpremote run local_script.py      # run host script on cam
$ mpremote ls                       # list cam filesystem
$ mpremote mip install aioble       # install package on cam

對於自動化測試平台、無頭部署、用於燒錄全新映像並執行冒煙測試的 CI 指令碼,以及任何執行 GUI 顯得多餘的工作流程而言,這正是合適的工具。mpremote 參考文件 記載了每一道指令與選項。

13.5.2. mpy-cross

mpy-cross 是一款交叉編譯器,可將 .py 原始檔轉換為 .mpy 二進位容器,以便在 cam 上直接匯入。提前編譯可省去 cam 在匯入時解析原始碼的負擔,使磁碟佔用空間更小,同時也是讓以 @native@viper 修飾的函式取得與 cam MCU 架構相符之建置的唯一途徑:

$ pip install --user mpy-cross
$ mpy-cross foo.py
$ mpremote cp foo.mpy :

對於烘焙進韌體映像中的凍結模組,以及隨韌體一同出貨的 ROMFS 分割區,同一款工具會在韌體建置過程中自動執行——建置系統在產生 .bin 的過程中,會對 scripts/ 之下的每一個 .py 檔呼叫 mpy-cross。當應用程式想要讓 .mpy 與韌體分開出貨,或想從建置指令碼中驅動編譯器時,才會直接呼叫此工具。

.mpy 檔案參考文件中的 mpy-cross 章節 涵蓋了命令列旗標、最佳化等級、-march 對照矩陣,以及 Python 模組進入點。