物件導向的Python 到Micro:bit

在英國為了推動中小學生的程式教育,BBC公司推出了一款非常小的Micro:bit 晶片作為程式與IoT 教育重要的教具,與其說Micro:bit 是一個晶片,Micro:bit 本身幾乎具有一個完整電腦大部分的功能,只是非常陽春。Micro:bit 的長相很可愛小巧,在寬5cm 高4公分這樣的小板子上(如下圖),Micro:bit 有一個5x5 的LED 燈號輸出,可以顯示簡單的圖形字元或是以跑馬燈的方式顯示字串。 

Micro:bit 的正面有A, B 兩個按鈕,背面有一個重新啟動的按鈕,下方有3個主要的輸出Pin 腳,一個電源輸出與接地,上方有一個microUsb 的電源(資料輸入)插孔,還有一個雙接腳的電源輸入孔。Micro:bit 面積雖小卻有許多感測器在其上,例如重力感測器,溫度感測器,亮度感測器,磁力感測器與濕度感測器。透過這些感測器作為偵測訊號的來源,Micro:bit 可以作為物聯網(IoT) 教育非常好的教學工具。

在Micro:bit 的主網站(http://microbit.org/code/)上提供了兩個線上寫code 的環境,一個是用JavaScript Blocks 的方式,讓孩童寫程式就像是玩積木一樣;另外一個是使用MicroPython 程式語言來驅動Micro:bit 晶片。由於微軟公司的支持,Micro:bit 在JavaScript Blocks 的線上寫作環境做得相當好,即使沒有Microbit 這個小硬體也可以單單利用網站上的模擬器來進行程式教育。主網頁的MicroPython 的Mu editor 雖然也可以寫程式,但要確認程式是否正確就必須把程式刷在板子才能知道正確與否,相較於JavaScript Blocks 的寫作環境還是有點差距。雖然在withcode.uk的網站上有MicroPython 的模擬器,但在模擬器上面執行程式的結果與真實在板子上執行的結果會有差異。亦即,在模擬器上成功可以執行的程式未必可以在板子上執行。

雖然Micro:bit 的網站似乎有主推 JavaScript Blocks 的味道,但是作為中學生的程式教育,個人還是推薦以MicroPython 作為入門為佳。我們可以在這裡取得MicroPython 程式入門的英文內容。Python 語言是一個處處充滿物件導向的語言,無論是Python 中的變數或是套件的使用,一貫的物件導向的邏輯套用到MicroPython 對Micro:bit 的驅動就是在自然也不過了。 

我們先介紹一個最基本的MicroPython 程式,讓各位理解為什麼有了Micro:bit 再搭配MicroPython 後,對於物件導向的程式教學會有這麼大的幫助。

 

from microbit import *

display.scroll("Hello!")
sleep(1000)

while True:
    display.show(Image.HAPPY)

上述程式的第一行我們引入microbit 的套件,這樣我們就可以輕鬆使用套件內的函數與物件,例如接者出現的diaplay 與sleep 函數。display.scroll 就是用跑馬燈的形式來顯示字串"Hello!",sleep是延時的意思,再來的wihile True: 用法和python 一樣,就是製作出一個無窮的迴圈,讓硬體不斷執行其中的程式。迴圈內的內容是顯示內建的HAPPY 圖像。

從這樣一個簡單的程式我們就可以體會到如何對Microbit 上的硬體進行控制,例如button_a.is_pressed() 這個函數,就會傳回A 按鈕是否被按壓了。這樣我們在說明物件導向的概念上,就可以更直覺的指出在display 這個類別下有scroll() 函數與show() 函數可以使用,在button_a 這個類別下有is_pressed() 這個函數可以使用以及在Image 這個類別下有HAPPY 這個屬性可以使用。這使得具有物件導向概念的學生可以輕易地了解程式如何在硬體上驅動。