認識SAMD21系列微控制板(三):燒錄與執行CircuitPython

Trinket M0(以下簡稱M0板)是美國電子零組件供應商Adafruit Industries推出的微型控制板,採用32位元的ATSAMD21E18 (Cortex M0+) 微控器,MCU本身的工作電壓介於1.62~3.63V。M0板的開發程式語言∕工具包括Arduino IDE、CircuitPython和微軟MakeCode(JavaScript語言),但控制板出貨時預先內建的是CircuitPython

位於紐約的Adafruit,擁有非常熱血的Maker(自造者)靈魂,該公司研發生產的各種控制板、感應器模組和微電腦板,軟硬體全部都開源,他們也開發眾多被Arduino玩家廣泛使用的程式庫,像OLED顯示器16路伺服馬達I2C驅動程式和其他感應器的程式庫。近年來,他們的研發資源多挹注在32位元微控制板和CircuitPython。

CircuitPython簡介

CircuitPython是一種在微控器運行的Python 3語言環境,由Adafruit公司維護並開放原始碼。CircuitPython其實是從另一個也是在微控器上執行的MicroPython移植過來的,Adafruit官網的這篇文章提到,CircuitPython和MicroPython有98%相同,解譯器核心也相同,只是有些程式庫的命名與結構不同。

MicroPython把硬體相關的指令都歸納在machine程式庫(參閱《超圖解 Python 物聯網實作入門》,3-5頁),CircuitPython則是依照硬體類型把指令歸納到不同套件:

  • audioio:聲音I/O
  • analogio:類比I/O
  • busio:匯流排I/O
  • digitalio:數位I/O
  • pulseio:時脈I/O
  • touchio:觸控I/O
  • microcontroller:微控制器
  • board:控制板
  • bitbangio:Bit Banging I/O,純軟體模擬I2C或SPI介面通訊訊號,目前僅支援SAMD21系列和ESP8266。

SAMD21系列處理器微控板的CircuitPython沒有machine程式庫

此外,為了跟電腦版Python 3區別,MicroPython的一些程式庫名稱前面會加上‘u’,如電腦版的os和request,在MicroPython改名成uos和urequest;CircuitPython沒有改名,沿用電腦版的程式庫命名。

CircuitPython也有新增API指令,例如處理儲存媒介的storage模組,完整的API指令說明,可查閱Adafruit CircuitPython線上文件

把M0相容控制板插入電腦USB埠充電,M0板將以USB隨身碟的型式呈現。Mac和Linux系統無須安裝驅動程式,Windows 10系統會自行下載安裝驅動程式,或者,你也可以自行下載安裝驅動程式

這是此M0板預設韌體的磁碟內容,其中的CURRENT.UF2檔是目前燒錄在MCU中的韌體。

M0板預設韌體的磁碟內容

只需按兩次控制板上的Reset鍵,再把新的韌體拖入它所代表的隨身碟,控制板將立即燒入新韌體。

M0板的韌體檔格式為UF2(USB Flashing Format,USB燒錄格式)。在Adafruit的CircuitPython開放原始碼專案網站,可下載適用於各種控制板、預先編譯好的CircuitPython韌體:

下載CircuitPython韌體

原廠M0板在進入燒錄韌體模式時,板子上的RGB LED會變成綠色。韌體燒錄完畢後,控制板會自行重新啟動,燒入CircuitPython之後的「隨身碟」名稱變成“CIRCUITPY”。

CIRCUITPY磁碟內容

安裝Mu程式編輯器

Python程式可以用任何文字編輯器編寫,Adafruit推薦使用開放原始碼的Mu,因為它內建支援控制板的序列通訊還有數據繪圖(Plotter)功能。

Mu程式編輯器本身採用Python編寫而成,只要你的電腦系統已事先安裝好Python 3執行環境,在「命令提示字元」或「終端機」輸入底下的命令即可安裝:

安裝mu-editor

在Linux系統裝置(如:樹莓派)上,pip指令要改成pip3。或者,你也可以在Mu編輯器的官方下載頁,下載Windows和Mac系統用的可執行檔。

使用Mu編寫Python程式

Mu安裝完畢後,請先把M0控制板插入USB,然後在命令行輸入mu-editor開啟程式編輯器。

執行mu-editor

第一次開啟Mu編輯器時,它會要求你選擇一種編輯模式(Mode),請選擇Adadruit CircuitPython。

選擇Mu模式

Mu編輯器會自動連接插在USB的“CIRCUITPY”隨身碟。在筆者的Windows 10系統上,Mu編輯器自動呈現簡體中文介面。

Mu編輯器

編寫一個閃爍LED的Python程式測試看看。由於此M0相容板第13腳沒有連接LED,所以我改接D4腳:

import board
import digitalio
import time

led = digitalio.DigitalInOut(board.D4)      # 建立連接D4腳的數位I/O物件
led.direction = digitalio.Direction.OUTPUT  # D4腳設為「輸出」模式

while True:
    led.value = True   # 輸出高電位
    time.sleep(0.5)
    led.value = False  # 輸出低電位
    time.sleep(0.5)

把程式碼命名成code.py檔儲存,Mu編輯器會自動把程式檔存入控制板的“CIRCUITPY”隨身碟,然後重新啟動控制板。 程式檔名可命名成下列4個之一:

  • code.txt
  • code.py
  • main.txt
  • main.py

CircuitPython會在開機啟動時,依照上面的順序找尋並執行找到的第一個檔案。Python程式檔習慣上以.py結尾,因此CircuitPython的程式檔通常被命名為code.py

儲存(相當於Arduino的「上傳」)程式檔的過程中,不要按下Reset鍵,也不要將控制板從USB拔除。

儲存程式檔之後,接在D4腳的LED開始閃爍。這個自行組裝的M0相容板有個1F容量的超級電容,將它從電腦USB拔除之後,能持續控制LED閃爍約33秒。

M0控制板接LED

根據微控器晶片製造商Microchip的ATSAMD21E18技術文件Power Consumption(電力消耗)單元指出,在全速運作下,此MCU電力最高消耗約7mA,執行普通的while(1)迴圈,甚至不到4mA,遠比LED省電。

開啟序列埠窗格

CircuitPython程式中的print()敘述,將輸出在序列埠窗格。例如,修改上面程式的while迴圈再存檔:

while True:
    led.value = True
    time.sleep(.5)
    led.value = False
    time.sleep(2)
    print("Hello, World!")

接著按下Mu編輯器上方工具列的Serial(序列)鈕,將開啟序列埠窗格,顯示“Hello, World!”訊息:

序列埠窗格

進入與離開REPL模式

用滑鼠按一下Mu程式碼編輯器底下的序列埠窗格,然後先按下Ctrl和C鍵、再按下Entter鍵,將令M0控制板進入REPL模式。你可以在此模式下,輸入任何Python敘述並立即在控制板上執行:

REPL模式

按下Ctrl和D鍵,即可退出REPL模式,控制板將自動重置並重新執行之前的程式碼。

延伸閱讀

Posts created 470

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top