一、Seeed Studio XIAO 家族
XIAO (小)系列開發板是 SeeedStudio 從 2020 年開始生產販售的微型開發板,主打超小體積、擴充彈性、性能強悍以及可以直接當作 SOM 量產使用!XIAO 系列到目前為止已經有量產七個產品,搭配五種常見的微控制器核心,包含 ESP32-C3、ESP32-S3、nRF52840、RP2040,以及今天要開箱的 SAMD21。
XIAO SAMD21 是此列最早推出的產品,主因也是 Microchip 的 SAMD21 已被 Arduino 官方多次使用在不同產品上,包含 Zero 與 MKR 全系列超過 10 塊開發板,都是使用 SAMD21 作為核心處理器,除了 Arduino IDE 以外,SAMD21 還可以使用 micropython 與 circuit python 進行開發,相容性會較使用其他 MCU 的開發板來得好上許多。
Seeed Studio 將其小型化,但同時保有高性能與高相容性的優勢,對於 Maker 的產品接納度一定是會有所提升。本篇除了要開箱 XIAO SAMD21 之外,同時準備了 XIAO Expansion Board 擴充板,並且搭配環境感測器,實作一個 Data Logger 資料收集器,Let’s go!
二、外觀與硬體規格
XIAO SAMD21 有販售兩種不同的規版本,差異在於是否有焊接排針,如果是要當作開發板測試使用,建議直接買焊接好排針版本,若是想要當成模組打件在自行設計的 PCB 上的話就可以買未焊接的版本。剪開外包裝看到開發板的本體以及附帶的貼紙三張,這三張貼紙都是用於標示各引腳的功能,只是顏色不同,可以按照自己的喜好選擇並且貼在開發板鐵殼上方。
看到 XIAO SAMD21 的外觀,整個體積非常小巧,長寬分別只有 2 公分與 1.75 公分,比一個十元硬幣還要來得小。零件布局也非常簡潔,僅有一個 USB Type-C 傳輸介面與鐵殼。在 Type-C 旁邊保有四顆 LED,分別代表電源指示、使用者定義 P13、以及 UART TX RX 傳輸指示,雖說是 UART 指示功能,但這兩顆 TX RX 指示燈也可以透過程式碼控制。Type C 另一側有兩個測試點,上方寫者 RST 代表 Reset,為了節省體積省去了按鈕改以測試點替代,若開發者需要重置系統可以使用排針或杜邦線使其短路。翻過來背面部分完全沒有任何零件,這是為了可以讓 XIAO SAMD21 可以貼片在其他的電路板上,僅保留了 SWD 的測試點以及電源輸入測試點。側邊部分也做了類似郵票貼的銅箔,在執行貼片工序時可以更加牢固,不過我們今天拿到的是有焊接排針的版本,如果需要當成模組使用務必選擇沒焊排針版本。
三、XIAO Expansion Board
一般而言要使用開發板連接週邊模組通常會使用麵包板進行擴充,由於 XIAO 的體積非常迷你,官方也特別製作了 XIAO Expansion Board 方便擴充週邊設備。擴充板整體的體積也不大,上方有雙排母座可以對接 XIAO 的 pinout 引腳,或是 adafruit 生產 QT py 系列開發板,這兩系列是 pin to pin 相容的。插上開發板之後也可以再使用杜邦線連接旁邊的排母連接週邊。擴充板中間有一個 0.96” OLED 螢幕,解析度 128×64 可以顯示感測器與開發板資訊。周圍有四個 Grove 連接器包含兩組 I2C,一組 UART 與一組 GPIO,此外板上還有一個 RTC 時鐘晶片(型號為 PCF8563)、micro SD 卡槽與一個蜂鳴器。
供電部分除了透過 XIAO 開發板上的 USB Type-C 進行供電以外,可以使用 JST 2.0 連接鋰電池擴充板上帶有一個電池管理 IC 控制鋰電池的充放電,讓這塊擴充板能夠成為獨立的感測器節點。背面另外有一個 CR1220 的電池座,則是專門供給 RTC 時鐘 IC 電源做使用,確保系統斷電後 RTC 依然可以記錄時間變化。
四、Arduino IDE 設定
要使用 Arduino IDE (本篇使用 Arduino IDE 2.1.0 版本為例)開發 XIAO SAMD21 需要在「File」 > 「Preference」 中的 「Additional boards manger URLs」 (額外的開發板網址) 添加 Seeed Studio 開發板支援網址 https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
,之後在「Board Manager」 開發板管理側邊欄輸入「SAMD」即會出現 Seeed SAMD Boards 支援,點選「Install」等待安裝完成。
安裝完開發板支援將板子接到電腦,開發版選擇「Seeed SAMD Boards」 > 「Seeeduino XIAO」 以及其對應的 COM Port,開啟 「Example」 > 「01.Basics」 > 「Blink」 直接進行燒錄,藉此即可驗證開發環境已設定無誤。這塊 XIAO SAMD21 板子上除了內建 LED 外,在程式中也可以使用「PIN_LED2」(連動 UART RX) 與「PIN_LED3」(連動 UART TX) 控制額外兩顆 LED。
五、實作溫濕度記錄器範例 Data Logger Example
接下來筆者將使用 XIAO SAMD21 與 Expansion Board 擴充板搭配 SHT30 溫濕度感測器與 SGP30 TVOC 感測器,實作簡易的 data logger 記錄器,將所有感測數據與時間戳記儲存在 micro SD 卡內。將上述模組以及鋰電池、 micro SD 卡依序連接到擴充板,呈現樣貌如下圖所示。
為了順利跟周邊模組進行溝通,需要在 Arduino IDE 上安裝額外的函式庫 Library 包含:
- Adafruit SHT31 Library
- Adafruit SGP30 Sensor
- U8g2
- RTClib
程式碼在 setup() 階段會依序初始化 SHT30、SGP30、RTC(PCF8563) 與 SD Card,並將狀態顯示在 OLED 上,如果有模組沒辦法被順利初始化,便會卡在這一階段不會往下繼續執行。loop() 階段有四項任務(task),分別為讀取按鈕事件(切換OLED頁面)、讀取感測器數值、更新OLED顯示與寫入 SD Card。為了不讓各個任務會互相干涉,已將程式碼所有 delay() 都修改為使用時間戳記來判讀任務是否執行的方式進行規劃。若想要調整個程式的執行週期,可以修改程式碼最上方的 #define XXX_INTERVAL 的定義即可。
正常運作時 SAMD21 每秒會去讀取 SHT30 與 SGP30 的感測資訊並更新在OLED上,預設情況可以看到 OLED 上顯示溫度與濕度以及日期時間資訊,若想要看 TVOC 與 eCO2 的資訊可以按下擴充板右下角的按鈕進行頁面的切換,可以切換顯示不同的感測資訊。同時每 5 秒會將感測數值與時間已 CSV 的格式儲存在 SD 卡中,方便後續做數值分析使用。若有搭配鋰電池則此記錄器便能離機使用,放置到任何想要感測的位置。
大部分的程式碼皆是參考各模組的範例程式整合在一起,完整的範例程式可於 CIRCUS Pi 的 GitHub Repo 取得,程式碼內也有說明註解,歡迎自行取用參考。
小結-能當量產品的開發板
XIAO 系列所有產品都維持著一貫小型化設計,除了當作開發板以外,要放在量產品上做為模組也絲毫不違和。XIAO SAMD21 和 Arduino 官方的 MKR 系列使用相同的微控制器,但價錢只要 USD $5.4,為 MKR Zero (USD $30.3) 兩成不到的價錢,算是相當的實惠。推薦給有小型化專案開發需求使用的 Maker!