由 MCU 主控的 Edge Box 1.0 已完成驗收,今天要啟動 UNO Q 的另一個大腦 MPU,有請 Python 閃亮登場。
前十天的程式都集中在 sketch/sketch.ino,由 MCU 直接讀取按鈕、保存 ledState 並控制 LED,這條路徑反應直接,也不需要等待作業系統或網路服務,因此適合保留現場最基本的控制功能。
MPU 的任務不同,它執行 Python,後續會整理訊息、承接通訊與管理畫面,不必直接取代 MCU 已經完成的硬體控制,Day 11 的目標只是讓第二套程式正式啟動,先確認兩邊能在同一個 App 中各自工作。
本系列的專案骨架早已建立 python/main.py,檔案位於 python 資料夾,代表其中的內容會交給 MPU 執行,與放在 sketch 資料夾中的 Arduino C++ 程式屬於不同環境。
Day 3 曾在這個檔案放入一行啟動訊息,用來確認專案位置沒有錯誤,今天將它改成較完整的第一支 Python 程式,加入服務名稱與啟動狀態,讓終端輸出不只是一句固定文字。
Day 11 的程式包仍保留前一階段完成的 sketch/sketch.ino,本日只修改 python/main.py,重新執行 App 時,既有 MCU 程式與新的 Python 程式都會留在同一份專案中。
開啟 python/main.py,將內容改成以下程式。
edge_box_name = "智慧路口 Edge Box"
service_ready = True
print("服務名稱:", edge_box_name)
print("MPU Python 已啟動:", service_ready)
service_name 保存字串,文字必須放在引號中,service_ready 保存布林值,Python 使用 True 與 False 表示真假,而且第一個字母必須大寫。
Python 建立變數時不必像 C++ 一樣先寫出 bool 或其他型別,只要使用等號指定資料即可,這裡沒有複雜運算,兩個變數的目的只是留下可讀的服務資訊,並確認 MPU 能正確處理字串與布林值。
print() 會把括號中的內容送到 Python Console,逗號可以同時輸出說明文字與變數內容,這也是目前最直接的檢查方式,程式若能顯示預期結果,就代表 main.py 已由 MPU 執行。
按下 App Lab 的 Run,等待 App 啟動後查看 Python Console,畫面應出現以下結果。

第一行顯示服務名稱,第二行顯示布林狀態,若終端沒有輸出,先確認修改的是 python/main.py,再檢查字串引號、變數名稱及 True 的大小寫,Python 對大小寫敏感,true 不等於合法的布林值。
目前程式輸出兩行後便執行完畢,這不代表發生錯誤,而是因為檔案中還沒有持續等待事件的內容,本篇只確認 Python 能啟動,長時間運作的服務機制會在後續完成。
Python Console 顯示啟動訊息後,再按下 D9 實體按鈕,D2 LED 應維持一次按下切換一次,長按也不會連續跳動,這項測試用來確認啟動 MPU 程式後,前一階段完成的 MCU 現場控制仍然存在。
此時兩顆大腦尚未交換命令或狀態,MCU 繼續處理按鈕與 LED,MPU 只執行自己的 Python 程式,先維持清楚的工作邊界,後續增加功能時才不會把硬體控制與上層邏輯混在一起。
python/main.py。print() 確認 Python 執行結果。現在 Python 已經能在 MPU 上啟動,但程式還只是照順序執行,沒有固定位置可以接住未來的硬體狀態或網頁命令,下一篇要用函式把這些訊息入口先整理好。
下一篇|用 Python 函式處理訊息