MicroPython 作為 Python 3 的精簡高效能實作,特別適用於微控制器和嵌入式系統。本文將引導讀者設定 PyBoard、BBC micro:bit 和 Adafruit Circuit Playground Express 等開發板的開發環境,並提供實用的程式碼範例。從硬體連線、韌體更新到 REPL 互動,循序漸進地說明 MicroPython 的應用,讓讀者快速上手嵌入式開發。文章涵蓋了不同開發板的特性和差異,例如 PyBoard 的檔案系統操作、micro:bit 的 LED 矩陣控制以及 Circuit Playground Express 的豐富感測器應用,並提供程式碼範例和解析,幫助讀者理解 MicroPython 在嵌入式系統中的實際應用。
PyBoard 開發環境設定
硬體需求與韌體更新
首先,您需要準備一條適合的導線來連線 DFU(Device Firmware Update)針腳與 3.3V 針腳。這些針腳在 PyBoard 的背面有標示,在正面也可以透過圖片(如圖 2-4 所示)辨識。
圖 2-4:PyBoard 正面的 DFU 和 3.3V 針腳
要更新 PyBoard 的韌體,您需要下載最新的 MicroPython 韌體。下載完成後,請斷開 PyBoard 與所有裝置的連線,並使用一條公對公的跳線將 DFU 針腳與 3.3V 針腳連線。
更新韌體
更新 PyBoard 的韌體需要使用 DFU 工具。有兩個可用的選項:dfu-util 和 pydfu。您可以根據自己的作業系統從 dfu-util 專案的網站下載安裝說明,或從 MicroPython 的 GitHub 儲存函式庫下載 pydfu 指令碼。
安裝 DFU 工具
dfu-util的安裝說明可參考其官方網站。pydfu可從 MicroPython 的 GitHub 儲存函式庫下載,並依賴libusb和pyusb。
更新韌體
- 使用
dfu-util更新韌體:請將$ sudo dfu-util --alt 0 -D firmware.dfufirmware.dfu替換為您從 MicroPython 官網下載的最新韌體檔案。 - 使用
pydfu更新韌體:$ sudo python pydfu.py -u firmware.dfu
- 使用
連線 PyBoard 與電腦
更新完韌體後,請斷開 PyBoard 與電腦的連線,並移除 DFU 和 3.3V 針腳之間的跳線。重新連線後,PyBoard 將顯示為一個可移除的 USB 磁碟,內含四個檔案:boot.py、main.py、README.txt 和 pybcdc.inf。
- boot.py:在裝置啟動時執行,設定各種組態選項。
- main.py:包含您的主要程式碼,在
boot.py之後執行。 - README.txt:包含有關 PyBoard 的基本資訊。
- pybcdc.inf:Windows 驅動程式,用於設定 USB 序列連線。
編寫第一個 MicroPython 程式
開啟
main.py檔案,並將原有的程式碼註解替換為以下程式碼:import pyb pyb.LED(4).on()這段程式碼會開啟 PyBoard 上的藍色 LED(LED 4)。
儲存並關閉
main.py,然後離開(或解除安裝)USB 磁碟。按下 PyBoard 上微型 USB 連線埠下方的 RST 按鈕以重置板子。藍色 LED 應該會亮起。
連線 REPL
要與 PyBoard 互動,您需要透過 REPL(Read-Eval-Print Loop)連線到板子。
在 Windows 上: 使用
putty.exe連線到板子。您需要使用裝置管理員來找出 PyBoard 所連線的 COM 連線埠。在 macOS 和 Linux 上: 您可以使用
picocom或screen命令來連線 REPL。- 使用
picocom:或$ picocom --baud=115200 /dev/tty.usbmodem*$ picocom --baud=115200 /dev/ttyACM0 - 使用
screen:要離開$ screen /dev/tty.usbmodem* 115200screen,請輸入CTRL-A CTRL-\。
- 使用
REPL 操作範例
>>> print("Hello, World!")
Hello, World!
>>> 1 + 1
2
>>> 7 / 5
1.4
>>> "hello".upper()
'HELLO'
>>> import pyb
>>> pyb.LED(1).on()
>>> pyb.LED(1).off()
>>> while True:
... pyb.LED(1).toggle()
... pyb.delay(500)
...
請記得使用 CTRL-C 中斷無限迴圈。
BBC micro:bit:開啟數位創意的關鍵
BBC micro:bit 是一款專為初學者設計的簡易而強大的運算裝置。它體積小巧、價格親民且易於使用。英國廣播公司(BBC)推出這款裝置的目的是為了促進數位創意,培養人們使用電腦創造有趣事物的技能和信心。
歷史脈絡與啟發
事實上,BBC 並非第一次為初學者開發運算裝置。在 1980 年代,我曾經在 8 位元的 BBC 微電腦上學習程式設計(見圖 3-1)。每個英國學校都配備了一台這樣的電腦,而我的父親恰好是一位校長。
某個週末,他帶回了幾個大箱子,裡面裝著顯示器、電腦、連線線和各種手冊。他的本意是學習如何在學校裡使用這台電腦。然而,不到半個小時,我和弟弟就接管了這台裝置(當時我才八歲)。
與現代電腦相比,這台 BBC 微電腦並不特別強大,也不太易用。當你開啟它的電源時,它會發出「嘀嘀」的聲音,並顯示一個閃爍的游標。對於當時的我來說,它就像在挑戰我輸入一些東西。
我記得自己第一次與電腦互動時,輸入了「HELLO」,按下 ENTER 鍵,然後得到了「Mistake」的結果。
我完全不知道為什麼電腦會認為我犯了錯誤,但我記得當時感到非常興奮,因為電腦居然對我輸入的內容做出了反應。後來我才知道,原來我犯了一個語法錯誤:電腦無法理解我的指令。我很快就學到了,電腦並不懂英文。
然而,BBC 微電腦能夠理解一種簡單的程式語言,叫做 BBC BASIC。這是一種友好的語言,因為許多讓電腦執行有趣任務的指令都是英文單詞。此外,BASIC 中的所有指令都寫在編號的行上,所以你清楚地知道自己在程式中的位置,以及指令執行的順序。
以下是我當初寫的第一個 BASIC 程式。你能猜出它是做什麼的嗎?
10 CLS
20 PRINT "YOU ARE AN IDIOT"
30 GOTO 20
內容解密:
10 CLS:清除螢幕上的內容,讓畫面變乾淨。20 PRINT "YOU ARE AN IDIOT":在螢幕上顯示「YOU ARE AN IDIOT」這段文字。30 GOTO 20:跳回第 20 行繼續執行,形成無限迴圈,不斷顯示「YOU ARE AN IDIOT」。
這讓我覺得自己像是在施展一種特殊的魔法,讓電腦按照我的意願運作。我只需要想出正確的「咒語」或「法術」。
BBC micro:bit 的硬體設計
BBC micro:bit 的大小約如信用卡,內含多種標示清晰的硬體元件。
裝置正面有兩個按鈕,分別標示為 A 和 B。按鈕之間是一個 5x5 的 LED 矩陣,可作為簡單的顯示螢幕(見圖 3-2)。這些 LED 可以以九種不同的亮度發出紅光。
裝置底部的邊緣聯結器用於將裝置連線到其他裝置。這就是通用輸入/輸出(GPIO),它允許裝置接收來自其他元件的輸入,或向其他元件輸出訊號。
邊緣聯結器由多個稱為「針腳」(pins)的連線點組成。這些針腳之所以被稱為「pin」,是因為許多其他型別的裝置上的 GPIO 硬體介面通常是實際的針腳,而非邊緣聯結器。其中一些針腳較寬,可以標示名稱,並可夾上鱷魚夾。其他的針腳最好透過將裝置插入連線到麵包板(一個可以輕鬆放置和重新排列電子元件的裝置)的女性邊緣聯結器來存取。
整個佈局看起來像一張臉。兩個按鈕像是眼睛,LED 矩陣像是鼻子,而邊緣聯結器則像是牙齒。這種擬人化的設計讓裝置看起來很有趣,即使在關閉狀態下也頗具吸引力。
裝置背面揭示了各種標示清晰的元件,這些元件使裝置運作(見圖 3-3)。
邊緣聯結器(標示為 PINS)在背面繼續延伸。在它上方和左側分別是裝置的針(NXP/Freescale MAG3110 三軸磁力計感測器)和加速度計(NXP/Freescale MMA8652)。這些感測器使裝置能夠判斷其指向的方向、在空間中的方位,並檢測諸如搖晃或翻轉等手勢。
在這些感測器上方是裝置的微控制器「大腦」。它是一個 32 位元的 Nordic nRF51822 ARM Cortex-M0 處理器,執行頻率為 16 MHz,擁有 256 KB 的快閃記憶體、16 KB 的 RAM,以及支援藍牙低能耗(BLE)網路的 2.4 GHz 無線電模組。無線電的天線就在微處理器的上方(看起來像城堡上的垛口圖案)。
為何 BBC micro:bit 能夠激發新一代程式設計師?
BBC micro:bit 不僅是一款裝置,也代表著一種理念。正如當年長官 BBC 微電腦開發團隊的人所說:
我們的目標是讓運算變得民主化。我們不希望人們被電腦控制,而是希望人們能夠控制它。 — David Allen,BBC 電腦識讀計畫專案編輯
如果沒有深刻體會到自己能夠讓電腦做出有趣的事情,我就不會成為今天的程式設計師。BBC micro:bit 繼承了這種精神,並且在現代技術的基礎上進一步發展,為新一代的初學者提供了更便捷、更具創意的學習工具。
BBC micro:bit 開發者設定
BBC micro:bit 是一款專為教育設計的微控制器板,具備多種硬體功能,包括 LED 顯示矩陣、按鈕、加速度計、針等。其硬體設計完全開放,軟體方面同樣遵循開放原始碼的原則。
硬體特性與開放性
micro:bit 的硬體設計具有高度的開放性,其電路圖完全公開,並採用寬鬆的開放原始碼授權。這意味著任何人都可以自由地使用、修改甚至製造該裝置。
- 微型 USB 連線埠:裝置頂部設有一個微型 USB 連線埠,用於連線電腦進行程式燒錄和電源供應。
- 重置按鈕:USB 連線埠右側設有重置按鈕,用於重新啟動裝置。
- 電池連線埠:裝置右上角設有電池連線埠,可連線電池供電。
值得注意的是,micro:bit 的藍牙功能在 MicroPython 中未被支援,因為相關軟體需要佔用大量的快閃記憶體和 RAM。然而,MicroPython 提供了一個簡易的無線模組,使裝置間能夠進行簡單的無線通訊。
開發環境設定
將 micro:bit 連線到電腦後,它會顯示為一個 USB 磁碟機。與 PyBoard 類別似,也可以連線到 MicroPython 的 REPL 環境。
燒錄程式到 micro:bit
與 PyBoard 不同的是,micro:bit 通常需要將 MicroPython 執行環境和使用者程式碼合併成一個 hex 檔案,然後將該檔案燒錄到裝置上。這個過程是透過將 hex 檔案複製到 USB 磁碟機來完成的。燒錄後,裝置會重新啟動,並還原成一個相對空的 USB 磁碟機。
# 以下是一個簡單的範例程式,用於展示如何讓 micro:bit 的 LED 矩陣顯示一個笑臉
from microbit import *
# 無窮迴圈
while True:
# 顯示笑臉圖案
display.show(Image.HAPPY)
# 等待 2 秒
sleep(2000)
# 清除顯示
display.clear()
# 等待 1 秒
sleep(1000)
程式碼解析:
from microbit import *:匯入 micro:bit 模組的所有功能。while True::建立一個無窮迴圈,不斷執行迴圈內的程式碼。display.show(Image.HAPPY):在 LED 矩陣上顯示一個預定義的笑臉圖案。sleep(2000):暫停程式執行 2 秒,讓圖案保持顯示。display.clear():清除 LED 矩陣的顯示內容。sleep(1000):暫停程式執行 1 秒,然後再次進入迴圈。
使用檔案系統
micro:bit 內建了一個小型的檔案系統(約 20kB),儲存在快閃記憶體中。每次燒錄新的 hex 檔案時,這個檔案系統會被清空。然而,如果只燒錄 MicroPython 執行環境(不包含使用者程式碼),則可以手動複製 main.py 到裝置中,MicroPython 會在啟動時自動執行該檔案。
瀏覽器編輯器與 Mu 編輯器
開發者可以使用瀏覽器編輯器或 Mu 編輯器來撰寫和燒錄程式到 micro:bit。瀏覽器編輯器的使用方式是下載 hex 檔案後拖曳到 micro:bit 的 USB 磁碟機中。
Mu 編輯器則提供了一個更友善的開發環境,支援 Windows、macOS、Linux 和 Raspberry Pi 等多種作業系統。使用者只需按下「燒錄」按鈕即可將程式碼燒錄到 micro:bit,並且可以直接存取 REPL 環境和檔案系統。
Mu 編輯器的設計理念
Mu 編輯器遵循極簡主義哲學:
- Less is more. 只保留最基本的功能,避免介面過於複雜。
- Keep it simple. 簡單易學,降低新手使用門檻。
- Walk the path of least resistance. 提供唯一的最佳實踐路徑,簡化操作流程。
- Have fun. 讓學習過程變得有趣,能夠快速建立並測試程式碼。
綜上所述,BBC micro:bit 提供了一個強大且靈活的開發平台,無論是對於初學者還是有經驗的開發者,都能夠滿足不同的需求。透過 MicroPython 和相關開發工具,可以輕鬆地進行各種創意專案開發。
Adafruit Circuit Playground Express:探索嵌入式開發的新世界
Adafruit的Circuit Playground Express是一款功能強大的嵌入式開發板,讓Python程式設計師能夠輕鬆地探索嵌入式開發的世界。這款開發板具備多種感測器和反饋模式,讓使用者能夠快速學習嵌入式開發的基礎知識。
Circuit Playground Express 的特色
Circuit Playground Express 讓使用者能夠像科幻小說中的角色一樣,使用先進的技術來探索世界。它具備多種感測器和輸出裝置,例如LED燈、喇叭和加速度計,讓使用者能夠創造出各種有趣的專案。
使用 MicroPython 進行開發
與BBC micro:bit類別似,Circuit Playground Express也支援MicroPython,讓使用者能夠使用Python語言進行開發。使用者可以使用Mu編輯器或其他Python編輯器來編寫和上傳程式碼到開發板上。
REPL 和偵錯
使用者可以使用REPL(Read-Eval-Print Loop)來與開發板互動,偵錯和測試程式碼。Mu編輯器提供了REPL功能,讓使用者能夠輕鬆地與開發板互動。
開始使用 Circuit Playground Express
要開始使用Circuit Playground Express,使用者需要先安裝必要的工具和程式函式庫。首先,需要安裝uf2工具,用於將程式碼上傳到開發板上。接著,使用者可以使用Mu編輯器或其他Python編輯器來編寫和上傳程式碼。
安裝 uf2 工具
$ pip install uf2
使用 Mu 編輯器上傳程式碼
使用者可以使用Mu編輯器來編寫和上傳程式碼到開發板上。首先,需要將開發板連線到電腦,然後在Mu編輯器中選擇正確的開發板。接著,使用者可以編寫程式碼並上傳到開發板上。
範例程式碼
import time
from adafruit_circuitplayground.express import cpx
while True:
cpx.red_led = True
time.sleep(0.5)
cpx.red_led = False
time.sleep(0.5)
程式碼解析:
此範例程式碼使用了 adafruit_circuitplayground.express 模組來控制 Circuit Playground Express 開發板上的紅色LED燈。程式碼中,首先匯入了 time 模組和 cpx 物件。接著,使用無窮迴圈來控制LED燈的閃爍。在迴圈中,LED燈被開啟和關閉,每次持續0.5秒。
Adafruit Circuit Playground Express 硬體與開發環境介紹
Adafruit Circuit Playground Express 是一款功能豐富的開發板,具備多種輸入(感測)和輸出(訊號)功能。與前述開發板相同,使用者可透過兩種方式與裝置互動:儲存在板載快閃記憶體檔案系統中的程式碼和 REPL(互動式直譯器)。
連線與互動方式
當透過 micro USB 線將裝置連線到電腦時,裝置會顯示為一個快閃記憶體儲存裝置,並且可以像 PyBoard 和 micro:bit 一樣存取 REPL。
硬體規格與特色
市面上有兩種版本的 Circuit Playground Express:舊版使用 ATmega32u4 微處理器,不支援 MicroPython;新版則使用 ATSAMD21G18 ARM Cortex M0 微處理器,是本文所使用的版本。
主要元件與功能
- 緣邊的 14 個焊墊便於使用鰐魚夾連線其他裝置,其中部分焊墊具備電容式觸控感應功能。
- 電源連線埠可接受 3.5V 至 6.5V 的直流電壓,並自動調節至 3.3V,適合使用 3 x AAA 電池盒或其他電池方案。
- 10 個 NeoPixel LED 位於焊墊內側,可獨立設定 RGB 顏色,用於狀態指示或視覺回饋。
- 三個按鈕(A、B 和 RESET)提供使用者輸入功能,其中 A 和 B 按鈕可用於任意開/關互動。
- 位於電池連線埠上方的滑動開關可用於保持狀態的開/關輸入。
- 紅外線發射器和接收器位於重置按鈕兩側,允許裝置之間進行紅外線通訊。
- 各類別環境感測器包括:
- 位於按鈕 A 上方的類別比光感測器,用於測量環境光亮度。
- 按鈕 B 上方的熱敏電阻,用於測量環境溫度。
- 重置按鈕下方的三軸加速計,可測量 X、Y 和 Z 軸的重力加速度,用於偵測傾斜、運動和手勢。
- 按鈕 B 下方的麥克風,用於檢測音訊訊號。
- 按鈕 A 下方的小型揚聲器可用於輸出簡單的聲音或旋律。
微控制器規格
ATSAMD21G18 微控制器運作頻率為 48 MHz,具備 256 KB 的板載快閃記憶體和 32 KB 的 RAM,並額外提供 2 MB 的快閃記憶體儲存空間。
開發環境:CircuitPython
Adafruit 使用名為 CircuitPython 的 MicroPython 分支作為開發環境。CircuitPython 是一個開放原始碼專案,歡迎社群貢獻,並且會跟蹤 MicroPython 的主要版本更新。雖然目前仍標示為「測試版」,但大多數 API 已趨於穩定。
安裝與更新 CircuitPython
Circuit Playground Express 可能未預先安裝 CircuitPython,因此建議更新至最新版本的韌體以取得最新的錯誤修復和功能。更新過程非常簡單,透過 UF2 引導程式,只需將裝置置於引導模式,然後將 .uf2 檔案拖曳至裝置即可。
- 將裝置連線到電腦,並雙擊重置按鈕以進入引導模式。裝置會顯示為名為
CPLAYBOOT的 USB 大容量儲存裝置。 - 從 GitHub 下載最新的 CircuitPython UF2 版本至裝置。
透過使用 CircuitPython,開發者可以確保在 Adafruit 各類別開發板上保持 API 的一致性,從而輕鬆將技能和知識轉移至其他支援 CircuitPython 的 Adafruit 裝置。
#### CircuitPython 的主要優勢
- 確保跨 Adafruit 開發板的一致性
- 穩定的 API(儘管專案仍在持續開發中)
- 簡化的開發體驗,特別是在 Adafruit 生態系統內