Python 程式實習:MakeCode Python 如何指揮 micro:bit 硬體?
當我們寫下 radio.send_value("x", 35) 或 cuteBot.motors(60, 60) 時,真正發生了什麼?本教材帶你理解:程式碼不是直接碰觸硬體,而是經過編譯、執行環境與硬體介面,最後才變成 LED、無線訊號、感測器讀值與馬達動作。
一、學習目標
- 分辨 MakeCode Python、MicroPython 與電腦 IDLE Python 的差異。
- 說明 MakeCode Python 從程式碼到 micro:bit 硬體動作的流程。
- 理解事件驅動程式與一般由上而下執行程式的差別。
- 能從 API 名稱推論其操作的硬體資源與通訊方式。
二、先釐清:它們不在同一個 Python 世界
| 環境 | 主要用途 | 程式在哪裡執行? |
|---|---|---|
| MakeCode Python | 以 Python 風格控制 micro:bit、Radio、馬達與感測器 | 編譯後,在 micro:bit 上執行 |
| IDLE Python | 檔案、資料分析、網頁、AI 與一般軟體開發 | 電腦上的 CPython |
| MicroPython | 在微控制器上執行 Python 直譯器 | 支援 MicroPython 韌體的微控制器 |
三者都有 if、for、while、def 等共通語法;但可呼叫的函式庫、執行方式與目標硬體不同。MakeCode Python 的重點是「用接近 Python 的語法,使用 MakeCode 的硬體 API」。
三、從程式碼到硬體:中間經過了什麼?
Python
與編譯
機器碼
執行環境
腳位、I2C、馬達
你按下「下載」時,MakeCode 會將程式編譯成 micro:bit 的 ARM 處理器可執行的 .hex 檔。下載到開發板後,micro:bit 的執行環境才依序處理按鍵、時間、無線接收與硬體控制。
四、API 是硬體的翻譯字典
| MakeCode Python | 它要做什麼? | 底層硬體資源 |
|---|---|---|
basic.show_number(51) | 在板子上顯示 51 | 5×5 LED 矩陣 |
radio.send_value("x", 35) | 送出 x 軸控制資料 | 2.4 GHz 無線電 |
pins.digital_write_pin(...) | 輸出高、低電位 | GPIO 腳位 |
cuteBot.motors(60, 60) | 設定左右輪速度 | 腳位或 I2C 與馬達驅動板 |
擴充功能的價值,是將複雜的電路與通訊細節包裝成可讀的 API。學生仍要理解:函式不是魔法,它是在請底層系統操作某項硬體資源。
五、MakeCode 為什麼常用事件?
在 IDLE 中,我們常把程式想成由上而下執行;但硬體系統必須隨時等候按鍵、無線資料或感測器變化,因此 MakeCode 常採用事件驅動。
def on_received_value(name, value):
if name == "x":
xValue = value
radio.on_received_value(on_received_value)
這段程式的意思不是「立刻執行一次後結束」,而是向執行環境登記:以後只要收到廣播鍵值,就呼叫這個函式。
相對地,basic.forever() 則適合放需要持續檢查的工作,例如馬達輸出、逾時判斷或感測距離。
六、程式實驗:觀察同一個概念在不同環境的差異
實驗 A:顯示與輸出
# MakeCode Python:對硬體說話
basic.show_number(51)
# IDLE Python:對終端機說話
print(51)
實驗 B:重複執行與逾時安全
def on_forever():
if control.millis() - lastReceiveTime > 500:
cuteBot.motors(0, 0)
basic.forever(on_forever)
請學生回答:這段程式為何要持續執行?若只檢查一次,斷線安全還有效嗎?
七、常見錯誤與除錯方法
| 現象 | 可能原因 | 檢查方式 |
|---|---|---|
IDLE 找不到 basic | 在錯誤環境執行 MakeCode API | 改回 MakeCode Python;或重寫為電腦版程式。 |
| 程式不能轉回積木 | 某些 Python 寫法無法雙向轉換 | 保留 Python 模式並檢查是否可編譯下載。 |
| 小車不動 | 群組不同、未收到資料或安全條件成立 | 先顯示群組、資料值與逾時計時。 |
八、挑戰任務:從硬體控制走向系統設計
- 為 Q霸小車新增一個「狀態回報」訊息,讓搖桿知道小車是否避障或斷線。
- 把遙控系統畫成資料流圖,標示程式、執行環境、無線傳輸與硬體輸出。
- 比較 MakeCode Python 與 IDLE Python:若要做「兒童館小車使用紀錄」應在哪一端執行?為什麼?
沒有留言:
張貼留言