如何使用 ESP32 微控制器及其 ESP-IDF 執行空中 (OTA) 更新
資料提供者:DigiKey 北美編輯群
2021-08-10
物聯網 (IoT) 產品設計人員需要以降低成本與功率的觀點來持續評估平台與元件選擇,同時要增進效能和加速連線應用設計工作。目前有眾多解決方案可供選擇,但設計人員所面臨的挑戰在於執行無線、空中 (OTA) 更新,以確保裝置韌體完成部署後維持最新狀態。
其中的關鍵在於研究可用的平台,瞭解支援 OTA 更新會用到哪些額外工具與支援。這種支援可大幅簡化流程,但前期可能需要一些關注。
本文將探討 OTA 基礎知識,及其為何在開發人員面臨挑戰的情況下,仍為幾乎所有 IoT 系統必需的關鍵功能。隨後會運用 Espressif Systems 的 ESP32 藍牙與支援 Wi-Fi 的微控制器、相關模組、套件以及 ESP IoT 開發架構 (ESP-IDF),說明如何建立 OTA 分割區並使用 otatool.py 腳本語言,在應用程式仍處於運作狀態下執行韌體更新。
OTA 更新簡介
大多數開發團隊的核心焦點在於實作產品特定功能,亦即讓產品脫穎而出的商業邏輯。不過,所有 IoT 產品在裝置的整個生命週期中,皆有需要部署、設定和維護的基礎功能集。安全性更新就是一個好範例。在需要執行這些更新的前提下,當評估適合的開發平台時,啟動程式或韌體 OTA (FOTA) 更新 (有時直接稱為 OTA) 功能往往是重要但容易被忽略的功能。
OTA 讓工程師能夠遠端維護和升級產品來回應技術與業務需求,而無須派送維護人員前往裝置端,或讓用戶端主動參與執行裝置更新。而是讓裝置透過無聲方式在背景中升級韌體,或是在午夜時分等執行作業「停機時間」期間升級,即可節省上述所有成本費用。
OTA 架構可能有眾多不同的形式與設定,從客製化型解決方案直到所有雲端供應商提供的標準實作。圖 1 展示典型的架構範例。
圖 1:OTA 架構概覽圖展示針對已部署裝置實地執行應用程式韌體更新的範例流程。(圖片來源:Beningo Embedded Group)
在本範例中,OEM 使用 Amazon Web Services (AWS) IoT Core 來上傳新韌體版本,然後再使用內建的「工作」功能實地為裝置部署更新。這僅是眾多範例之一,幾乎所有雲端供應商皆提供類似的解決方案。
現今市面上具有眾多支援 OTA 的微控制器可供選擇。ESP32 就是一款針對低成本系統和創客的熱門微控制器。ESP32 之所以如此受歡迎有眾多原因,包括:
- 其中的整合微控制器具有 Wi-Fi/藍牙認證模組可用
- 低成本
- 開源開發環境與軟體架構,例如 ESP-IDF 與 ESP 音訊開發架構 (ESP-ADF)
- 透過網路免費提供眾多現有應用範例
選擇 ESP32 模組執行 OTA 測試
使用者可選購數種不同的 ESP32 模組和開發板來瞭解 OTA 範例。以 Adafruit 的 3405 ESP32 Huzzah Feather 板為例 (圖 2)。此為低成本開發板,內含的所有電路可供對 ESP32 進行編程並透過 USB 連接器進行供電。
圖 2:3405 Huzzah Feather 板內含 ESP32 WROOM-32D 認證 Wi-Fi/藍牙模組,且此模組配備 4 MB 快閃記憶體。此板包括透過 USB 編程和進行模組通訊的所有必要硬體。(圖片來源:Adafruit)
3405 的核心為 ESP32-WROOM-32D 模組,其配備 4 MB 快閃記憶體、Wi-Fi、藍牙,以及適用於幾乎所有應用的完整周邊裝置組合。
另一款可選用的開發板為 Espressif Systems 的 ESP32-LYRATD-SYNA 音訊板 (圖 3)。此開發板包括 ESP32-WROVER-B 模組。
圖 3:ESP32-LYRATD-SYNA 板是以 ESP32 WROVER-B 認證 Wi-Fi/藍牙模組為基礎,且此模組配備 4 MB 快閃記憶體。除了可讓設計人員透過 USB 編程和進行模組通訊外,此板還配備音訊應用開發所需的電路。(圖片來源:Espressif Systems)
此外,ESP32-LYRATD-SYNA 模組亦配備 4 MB 快閃記憶體,以及適用於音訊應用的所有電路。此板包括音訊編解碼器、音訊放大器以及耳機和揚聲器插孔,可執行完整的音訊應用測試。
最後一款可用於 OTA 測試的開發板為 Espressif 的 ESP32-S2-SAOLA-1RI 開發板 (圖 4)。此為最經濟實惠的開發板產品。此板包含 ESP32 Wrover 模組以及晶片編程電路。其採用樸實的功能設計,僅包含可輕鬆置入試驗電路板執行測試的引腳。
圖 4:以 Wrover 模組為基礎的 ESP32-S2-SAOLA-1RI 是一款純粹的開發板,價格經濟實惠但包含足夠的電路供板載模組編程。(圖片來源:Espressif Systems)
由於每個 ESP32 模組皆採用 ESP-IDF,因此無須選用特定板來執行測試。此架構旨在協助開發人員輕鬆執行軟體開發活動,其包含驅動程式、中介軟體、RTOS,以及本文最主要探討的啟動程式和 OTA 程式庫。
啟動程式可讓開發人員運用 OTA 更新和分割記憶體來更新韌體,同時讓主要應用維持運作狀態,這有助於將停機時間縮至最短。啟動程式設定作業可能一開始看似複雜,但在適當引導下其實非常直觀。
OTA 開發工作流程
ESP32 的 OTA 開發工作流程會根據業務需求和產品元件選擇而略有差異。例如,採用 AWS 的團隊可能會使用 AWS 入門指南和範例,來運作 ESP32 OTA 解決方案。另一方面,採用自家解決方案的公司則可能會使用 ESP32 文件。本文探討的是 ESP32 層級而非雲端元件。其原因在於這些元件為通用型,且適用於採用 ESP32 的 OTA,而與使用的雲端供應商或解決方案無關。
一般而言,ESP32 的 OTA 更新設定流程包含以下步驟:
- 設定 ESP32 分割區資料表
- 下載支援 OTA 的韌體
- 開發工具以充當伺服器和推送新韌體
- 將最新韌體下載至 ESP32
- 切換至新的應用
很顯然,此做法非常輕鬆簡易。開發人員應再次查看圖 1,以瞭解整體韌體更新流程。此流程可能較為複雜,建議您利用位於 GitHub 的現有 ESP32 OTA 範例。這些範例提供諸如以下的數種重要範例:
- HTTPS OTA
- 原生 OTA
- 簡易 OTA
- OTA 工具 (python 腳本語言範例)
圖 5 顯示開發與更新流程步驟。開發人員將需要先執行紅色標示的步驟,以將 OTA 解決方案部署至 ESP32 模組。接著再執行橘色標示的步驟,以便執行 OTA 更新。
圖 5:Espressif Systems 的 OTA 更新範例位於 GitHub,為開發人員提供數種用於讓 ESP32 執行 OTA 更新的簡易範例。(圖片來源:Espressif Systems)
設定 ESP32 應用執行 OTA
ESP32 內含分割區資料表,其中描述微控制器上的資料類型及資料所處位置。例如,標準 ESP32 分割區資料表看起來類似於表 1:
表 1:標準 ESP32 分割區資料表顯示微控制器上的資料類型以及資料位置。(表格來源:Beningo Embedded)
其中含有原廠應用,接著則是 NVS 資料庫和實體層 (PHY) 初始化 (init) 資料區段。為了使用 OTA 功能,此資料表還需要進行更新,以便確保為 OTA 更新韌體以及主要 (原廠) 應用指定記憶體位置。針對 OTA,通常會有兩個分割區,能分配用於執行更新。其中一個用於主動更新韌體,另一個則用於目前正在下載且會成為最新版本的韌體。這樣可讓原廠應用保持不變。更新後的 OTA 分割區資料表將會如表 2 所示。
表 2:一般 ESP32 更新後 OTA 分割區資料表。(表格來源:Beningo Embedded)
如上所示,除了已分配 RAM 用來執行更新流程的資料區段 (otadata) 外,現在還有大小為 1 MB 的 ota_0 與 ota_1 應用區段。開發人員可以修改和更新此資料表,以便符合應用需求。
為了執行 OTA 範例,在 GitHub 的「如何使用範例」區段下列有簡易指令集。這說明了如何建置與編程應用。
此外,還提供可用於更新韌體的 otatool。此腳本語言通常用於執行以下作業:
- 讀取、寫入和抹除 OTA 分割區
- 切換開機磁碟分割
- 切換為原廠分割區
只要使用以下命令在終端執行範例,即可執行範例腳本語言:
./otatool_example.sh
或是使用 Python:
python otatool_example.py
設定 ESP32 執行 OTA 時,確認設定分割區為關鍵步驟。
使用訣竅與秘訣
EPS32 OTA 解決方案可加速和簡化開發人員的韌體更新解決方案。為了避免讓解決方案成為開發負擔,請銘記幾個「訣竅和秘訣」:
- 盡可能使用公司雲端供應商隨附的現有 OTA 架構。這樣可大幅簡化開發與整合作業。
- 使用低成本開發板來測試 OTA 功能和啟動程式。ESP32 具有數種選項,可透過一些實驗來決定最適合現有應用的選項。
- 針對客製化解決方案,利用 GitHub 上的 ESP32 OTA 範例。
- 針對產品充當 Wi-Fi 路由器或集線器的應用,請考慮下載韌體映像至外部記憶卡,以透過大容量儲存裝置來執行更新。
- 請花點時間查閱分割區資料表上的 ESP32 文件。這與一般微控制器實作有些許不同。
- 基於安全考量,最好停用應用回復。若應用能回復為先前版本,潛在攻擊者可能會推送含已知漏洞的版本,並破壞系統。
開發人員若遵循這些「訣竅和秘訣」,便可在嘗試利用 ESP32 或其他任何 OTA 解決方案 (若適用) 時,省下大量時間與麻煩。
結論
OTA 更新是提升 IoT 與嵌入式系統數量的關鍵功能。開發人員需要好好掌握如何有效率地執行更新,以便在設計與開發流程甚或產品出貨後節省前置時間。
ESP32 無線微控制器在眾多裝置上都非常有用,並且如上所述,其擁有現成的 OTA 解決方案。開發人員可運用 ESP-IDF 以及相關模組和平台,並使用一些基於經驗的訣竅和秘訣,來大幅縮短設計時間並取得可快速完成和運作的 OTA 解決方案。

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