利用 Mbed 生態系統加速 IoT 產品開發
資料提供者:DigiKey 北美編輯群
2019-11-20
嵌入式和物聯網 (IoT) 開發團隊時常承受著壓力,須儘快完成並交付設計。為了加緊腳步開發,團隊需要使用經過實證且具有強大生態系統支援的元件和軟體架構。不僅如此,也需要瞭解如何在未來進行系統維護及擴充。有鑑於此,解決方案也必須可移植,甚至在必要時能跨多重硬體平台操作。
然而,開發人員通常會侷限於微控制器廠商指定的生態系統,因此不容易在不同的微控制器之間做切換。此外,微控制器生態系統的軟體工具往往功能不足,其中大部分都是以 C 語言為基礎,因此有可能成為開發團隊的絆腳石。
在這些需求考量下,本文將會介紹 Arm Mbed 平台與作業系統,並說明開發人員如何運用 Mbed 生態系統來加速開發嵌入式產品,並藉此進行擴充,突破微控制器廠商指定之生態系統的侷限。
什麼是 Arm Mbed?
Mbed 是 Arm 公司發起的線上協作平台,可供有意打造 IoT 裝置的開發人員使用1。Mbed 為開發人員提供豐富的資源,可加速開發流程,包括從 Mbed OS 和 Mbed TLS,一直到 Mbed 程式庫所支援的開發板及個別硬體元件。
Mbed 平台設立的緣起是希望促進開發人員善加利用一個龐大的生態系統,以現有的元件、開發工具和程式庫來加速開發流程。此生態系統獲得多方支援,包括線上社群中超過 20 萬名的開發人員,以及各大微控制器廠商,例如 Cypress Semiconductor、NXP Semiconductors 和 STMicroelectronics。使用 Mbed 生態系統有許多優點:
- 程式庫和範例是以 C++ 語言編寫。此現代化物件導向型語言的設計,能讓程式碼進行擴充及重複使用。
- 能善加利用現有的硬體平台,迅速開發出嵌入式產品的原型,以證明其可行性。
- 能存取 Mbed 線上與離線式編譯器以及 Mbed 命令列介面 (CLI),因此能簡化軟體測試開發作業 (許多範例及程式庫甚至直接包含軟體測試項目)。
- 內建 IoT 裝置開發工具,例如雲端連接服務,不僅能輕鬆將裝置連接到雲端,更可透過其他雲端式服務予以管理。
Mbed 採用一般架構模型,能為嵌入式開發人員提供極高的靈活性與擴充性。舉例來說,此架構模型通常分為三個單獨的層 (圖 1):
- 低層級硬體抽象層 (HAL)
- Mbed OS API - 可當作中介軟體,提供儲存、RTOS、安全連線和通訊堆疊等功能
- 高層級 IoT 層 - 包含開發人員的應用程式碼、Mbed OS 程式庫,以及連線用戶端
圖 1:Mbed 架構由三個主要層級構成,每一層都能依據需求擴充及延展,分別是低層級硬體介面 (透過 HAL 抽象化)、Mbed OS API 層 (將中介軟體抽象化),以及高層級層 (用於編寫應用程式碼並運用程式庫及 Pelion 等用戶端)。(圖片來源:Arm Mbed)
架構的設計方式能讓開發人員只納入應用所需的項目,並捨棄其餘不需要的。如此一來,架構就具有擴充性和靈活性,能讓開發人員輕鬆加以運用,以便迅速開發出原型,讓產品在更短的時間內投入生產。
硬體是 Mbed 的起點
Mbed 提供絕佳的軟體基礎,但除了軟體以及開發軟體所需的工具之外,Mbed 的內涵不只如此。對團隊來說,開發產品最快的方式還包括運用 Mbed 硬體生態系統。此生態系統包含三個層面:
- 模組
- 板件
- 元件
模組基本上就是一種以 IoT 為中心的連線裝置,以經過認證且立即可用的封裝方式提供。舉例來說,開發人員要處理可支援 LoRaWAN 的產品時,可能會選擇使用 Multi-Tech Systems 的 MTMDK-XDOT-NA1-A00 xDot 模組開發套件 (圖 2)。xDot 模組在直視線範圍應用中可提供長達 10 英里的雙向通訊距離,在建築物內的通訊距離介於 1 至 3 英里,數據傳輸率介於 293 bit/s 至 20 kbit/s。這款模組使用低功耗的 STMicroelectronics 的 STM32L151CCU6 處理器,工作頻率為 32 MHz,並能透過 SPI、UART 或 I2C 介面,利用 AT 訊息機制進行控制。
圖 2:xDot 模組為開發人員提供經過認證的 LoRaWAN 模組,具有 Mbed 軟體堆疊的支援,能協助開發人員迅速展開作業,大幅縮短開發時間。(圖片來源:Multi-Tech Systems Inc.)
Mbed 板的本質就是開發板,適用於 Mbed 支援的所有不同微控制器系列。每一款開發板,都具有微控制器廠商提供的獨特特點和功能。舉例來說,開發人員若有興趣使用支援低功耗藍牙 (BLE) 的板件,可能也會對 Cypress Semiconductor 的 CY8CKIT-062-BLE 感到興趣 (圖 3)。
圖 3:CY8CKIT-062-BLE 開發板有多個特點有助於開發 IoT 連線裝置,包括 E-Ink 顯示器、電容式觸控按鈕和滑桿、BLE 模組,以及 KitProg2 除錯器。(圖片來源:Cypress Semiconductor)
CY8CKIT 獨到之處在於採用多核心的 PSoC 62 安全微控制器。其中一個核心是 Arm® Cortex®-M4 處理器,一個是低功耗的 Arm Cortex-M0+。因此開發人員能分割應用程式碼 (例如讓一個處理器處理 BLE 通訊),或是將 Cortex-M0+ 核心當作安全處理器,藉此鎖定應用程式。開發人員可運用板上所有可用的 I/O 擴充能力,只要將 Mbed 元件接上,就可輕鬆進行系統原型開發。
Mbed 元件屬於硬體元件,具有 Mbed 支援的程式庫和相關的中介軟體,可當作建構模塊,用來打造產品。舉例來說,從事 IoT 專案的開發人員可能會希望納入溫度感測器。開發人員能搜尋 Mbed 元件中是否有支援的溫度感測器,比如可能會找到 Maxim Integrated 的 MAX31723PMB1,這是一種能用於快速原型開發的周邊裝置模組 (圖 4)。
這種 Mbed 元件的優點在於,幾乎都是以開發板的形式提供,而且提供線路圖。如此一來,開發人員不只能看見讓感測器運作所需的硬體配置,還有軟體程式庫,可讓感測器開始運作。
圖 4:MAX31723PMB1 數位溫度計和恆溫器周邊裝置模組 (線路圖所示) 能輕易插入到 Mbed 開發板中,之後就能利用相關的 Mbed 元件程式庫快速介接溫度感測器並進行互動。(圖片來源:Maxim Integrated)
除了溫度計和濕度計等簡易的感測器之外,Mbed 還能提供其他類型的感測器。舉例來說,醫療裝置的開發人員會發現,Maxim Integrated 的 MAXREFDES220# 模組提供手指型心率和 SpO2 血氧感測器的公版設計 (圖 5)。
圖 5:MAXREFDES220# 模組提供手指型心率及 SpO2 監測用的開發板,可供開發人員使用。(圖片來源:Maxim Integrated)
此外,還有諸如 Seeed Technology 的 114991252 VL53L0X Flow 分接板之類的元件,能用於光感和 3D 飛時測距 (ToF) 距離量測等應用 (圖 6)。例如,開發人員若試著開發邊緣用的手勢型技術,可能就會對這款感測器感興趣。
圖 6:Seeed Technologies 的 114991252 Flow 感測器分接板能輕鬆整合至 Mbed 開發板中,也能用於需要光感測的應用,或者手勢偵測等 3D 飛時測距應用。(圖片來源:Seeed Technology)
選定開發板和元件後,開發人員就能用 Mbed 開始開發,首先要建立 “Hello World” LEDBlinky 應用程式,確認能成功編程板件並讓 LED 燈閃爍。
利用 Mbed 編寫 “Hello World” LEDBlinky 應用程式
有多種方法可開發 Mbed 應用程式,包括透過線上編譯器、離線編譯器,或使用命令列介面 (CLI) 工具。根據個人經驗,建議使用 CLI,因為對開發流程的掌控性較強,也更容易整合到開發流程中,例如測試器具和連續整合伺服器。
CLI 提供命令列介面功能,因此使用 Windows 的開發人員可以使用命令提示來編譯程式碼。建立 LEDBlinky 應用程式的第一步是使用 Mbed 隨附的預製範例。做法是在命令提示中輸入以下命令:
mbed import mbed-os-example-blinky
下載此範例需要幾分鐘的時間,因為也會帶入支援的 Mbed OS 作業系統,以及應用程式可能會使用的其他元件。下載完畢後,開發人員能瀏覽至 mbed-os-example-blinky 資料夾,裡面含有一個 main.cpp 檔案。此模組能以開發人員偏好的編輯器開啟,其內容大致如下:
複製 #include "mbed.h" #include "platform/mbed_thread.h" #include "stats_report.h" DigitalOut led1(LED1); #define SLEEP_TIME 500 // (msec) #define PRINT_AFTER_N_LOOPS 20 // main() runs in its own thread in the OS int main() { SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */); int count = 0; while (true) { // Blink LED and wait 0.5 seconds led1 = !led1; thread_sleep_for(SLEEP_TIME); if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) { // Following the main thread wait, report on the current system status sys_state.report_state(); count = 0; } ++count; } }
開發人員能在此進行修改,但基於本文的目的,這些預設內容無需更動。程式碼的編譯和部署更加有趣。實際使用何種命令來編譯和部署程式碼,將依硬體而定。以下範例顯示如何在單一命令中編譯和編程 Cypress CY8CKIT-062-BLE 開發板:
mbed compile -m CY8CKIT_062_BLE -t GCC_ARM -f
首次編譯專案可能需要幾分鐘,因為工具鏈必須建立所有相關的檔案,這些檔案會自動納入 Mbed 應用程式裡。編譯循環結束後,結果應該會如同下方圖 7 所示。
圖 7:LEDBlinky 專案成功編譯後的 Mbed 編譯器輸出結果。(圖片來源:Jacob Beningo)
命令列中的 -f 選項會自動將編譯的十六進位檔案複製到開發板上,並以 DAPLink 大容量儲存裝置的型式展現。此時,LED 燈應該會閃爍,開發人員就能開始開發主應用程式。
使用 Mbed 的秘訣與訣竅
雖然 Mbed 的使用方式相當直覺,但開發人員也可能面臨一些難題。以下列出一些「秘訣與訣竅」,幫助您開始使用 Mbed 開發產品:
- 避免使用線上編譯器。這對業餘愛好者無妨,但對專業人士來說,將原始程式碼放在別人的伺服器上可能會有問題。而且,雲端來回傳輸也可能會拖慢除錯的速度。Mbed IDE 或 Mbed CLI 等本機編譯器是比較好的選擇。
- Mbed 支援多重執行緒,但依照預先設定,主函數會在自己的執行緒中執行。
- 開始時先使用 Mbed 範例專案,檢視這些專案,瞭解如何更有效率地使用 Mbed 應用程式。
- 運用 Mbed 測試器具,確保應用程式開發作業並未意外毀損 Mbed 架構裡的任何元素。
- 使用 Mbed 硬體網站搜尋開發板、元件和模組。這些項目能迅速整合,以利產品開發。
遵循這些祕訣,有助於確保開發人員盡快以最短的時間開發嵌入式產品。
結論
嵌入式和 IoT 開發人員需要受到妥善支援的生態系統,從中獲得現代化的工具、流程與軟體,以加速開發作業並將開發成本減至最低。如本文所示,Mbed 平台和 OS 是開發人員能善加利用的潛在選擇。
Mbed 提供可擴充且靈活的軟體架構,許多元件已經整合並通過測試。有了涵蓋多種硬體模組、板件和元件的龐大支援當作後盾,開發人員就能輕鬆建立產品原型,之後還能進行擴充,運用到生產解決方案當中。
參考資料

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。