Tento článek pojednává o základech bezdrátové aktualizace (OTA) a o tom, proč je tato funkce tak důležitá. Podíváme na řešení OTA funkce u mikrokontroleru ESP32 od Espressif Systems. ESP32 nabízí konektivitu Bluetooth a Wi-Fi, kde softwarový balíček ESP IoT Development Framework (ESP-IDF) slouží pro bezproblémovou bezdrátovou aktualizaci. V článku si ukážeme, jak vytvořit oddíl OTA pomocí skriptu otatool.py, který je součástí frameworku ESP-IDF. Díky tomu lze provádět bezpečný upgrade zatímco je aplikace stále spuštěna.
Úvod do OTA
Hlavním zaměřením většiny vývojových týmů je implementace aplikačních funkcí, které odlišují jejich produkt od konkurence. Každé IoT zařízení však má základní sadu funkcí, kterou je potřeba nakonfigurovat a udržovat po celou dobu životnosti zařízení. Do těchto funkcí patří například aktualizace firmware. OTA poskytuje možnost vzdáleně udržovat a upgradovat produkty v reakci na technické i obchodní požadavky, aniž by bylo nutné k zařízení posílat technika nebo celou aktualizaci nechat na koncovém uživateli. Zařízení lze aktualizovat i na pozadí nebo během provozních „odstávek“, jako je noc. Architektury OTA mohou mít mnoho různých forem a konfigurací. Od řešeních vytvořených na míru až po standardní implementaci cloudovými poskytovateli. Typická architektura je uvedena na obrázku 1.
Obrázek 1: Příklad architektury OTA. (Zdroj obrázku: Beningo Embedded Group)
Na obrázku je uveden příklad OEM, který používá IoT Core Amazon Web Services (AWS) k nahrání nových verzí firmware a poté používá vestavěné funkce Job k aktualizaci jednotlivých zařízení. Toto je jen jeden z mnoha příkladů architektury, ale téměř každý poskytovatel cloudu má podobné řešení. Jedním z populárních mikrokontrolerů s podporou OTA je ESP32. Existuje několik důvodů, proč je ESP32 tak populární:
- Obsahuje integrovaný mikrokontroler s certifikačními moduly Wi-Fi/Bluetooth
- Poměrně nízká cena
- Open-source vývojové prostředí a softwarový framework ESP-IDF a ESP Audio Development Framework (ESP-ADF)
- Mnoho příkladů aplikací volně dostupných na webu
Výběr modulu ESP32
Existuje několik různých modulů ESP32 a vývojových desek s podporou OTA. Například deska Adafruit 3405 ESP32 Huzzah Feather (obrázek 2). Jedná se o vývojovou desku, která obsahuje všechen hardware pro programování ESP32 a komunikaci přes USB. Napájení je rovněž řešeno přes USB.
Obrázek 2: Feather Board 3405 Huzzah Feather Board obsahuje certifikovaný modul Wi-Fi/Bluetooth ESP32 WROOM-32D se 4 MB pamětí Flash. Deska obsahuje veškerý hardware nezbytný k programování a komunikaci s modulem přes USB. (Zdroj obrázku: Adafruit)
Jádrem desky Adafruit 3405 je modul ESP32-WROOM-32D, který je dodáván se 4 MB Flash pamětí, Wi-Fi, Bluetooth a periferiemi pro téměř jakoukoli aplikaci.
Další vývojová deska je ESP32-LYRATD-SYNA od společnosti Espressif Systems (obrázek 3). Tato vývojová deska obsahuje modul ESP32-WROVER-B zaměřený na zvukové aplikace.
Obrázek 3: Deska ESP32-LYRATD-SYNA je založena na modulu Wi-Fi/Bluetooth ESP32 WROVER-B se 4 MB Flash pamětí. Umožňuje návrhářům programovat a komunikovat s modulem přes USB, má také obvody potřebné k vývoji zvukových aplikací. (Zdroj obrázku: Espressif Systems)
Modul ESP32-LYRATD-SYNA má také 4 MB Flash paměť a všechen hardware pro zvukové aplikace. Deska obsahuje audio kodek, zesilovač a konektory pro sluchátka a reproduktory, které plně otestují kvalitu zvuku.
Poslední vývojovou deskou, kterou lze použít pro testování OTA, je vývojová deska Espressif ESP32-S2-SAOLA-1RI (obrázek 4). Deska obsahuje modul ESP32 Wrover spolu s obvody pro programování přímo čipu. Obsahuje dva hřebínkové konektory, které umožňují snadné vložení do testovacích desek.
Obrázek 4: ESP32-S2-SAOLA-1RI založený na modulu Wrover je nejjednodušší vývojová deska, ale obsahuje dostatek obvodů pro provedení OTA. (Zdroj obrázku: Espressif Systems)
Na konkrétní desce vybrané pro testování OTA příliš nezáleží, protože každý modul ESP32 využívá framework ESP-IDF. Tento framework je navržen tak, aby vývojářům usnadnil vývoj softwaru tím, že obsahuje ovladače, middleware, RTOS a hlavně bootloader a knihovny pro OTA. Bootloader umožňuje vývojářům využít aktualizace OTA a rozdělit paměť pro aktualizaci firmware, zatímco je primární aplikace stále spuštěna. Nastavení bootloaderu se může na první pohled zdát komplikované, ale pokud je dodržen správný postup, je to jednoduché.
Pracovní postup vývoje OTA
Pracovní postup vývoje OTA pro ESP32 se bude mírně lišit v závislosti na potřebách a výběru produktových komponent. Například tým využívající AWS bude pravděpodobně používat průvodce a příklady AWS, aby jejich řešení ESP32 OTA fungovalo. Zaměříme se na konfiguraci a práci s ESP32 a ne konfiguraci cloudu. Důvodem je to, že tato procedura je obecná a platí pro OTA s ESP32 bez ohledu na to, který cloudový poskytovatel nebo řešení je použit. Proces nastavení aktualizace OTA na ESP32 obecně zahrnuje následující kroky:
- Konfigurace tabulky oddílů ESP32
- Stáhnutí firmware, který podporuje OTA
- Vyvinout nástroj, který bude fungovat jako server a bude nabízet nový firmware
- Stáhnout si nejnovější firmware do ESP32
- Přepnutí na novou aplikaci
Uvedený postup je zjednodušený. Je vhodné využít příklady ESP32 OTA umístěné na GitHubu. Tyto příklady poskytují několik přístupů OTA:
- HTTPS OTA
- Nativní OTA
- Jednoduchý OTA
- Nástroj OTA (příklad skriptů pythonu)
Vývojář bude muset nejprve provést kroky označené červeně (obrázek 5), aby vložil řešení OTA do modulu ESP32. Kroky oranžové barvy jsou prováděny za účelem usnadnění aktualizace OTA.
Obrázek 5: Příklady aktualizací OTA Espressif Systems umístěné na GitHubu poskytují vývojářům několik jednoduchých příkladů, jak přimět ESP32 k provádění aktualizací OTA. (Zdroj obrázku: Espressif Systems)
Konfigurace ESP32 pro OTA
ESP32 obsahuje tabulku oddílů, která popisuje typ uložených dat na konkrétních místech. Například standardní tabulka oddílů ESP32 vypadá přibližně jako Tabulka 1:
Tabulka 1: Standardní tabulka oddílů ESP32 ukazující typ dat a místo, které se nacházejí v mikrokontroleru. (Zdroj tabulky: Beningo Embedded)
Aby bylo možné používat funkce OTA, je třeba tuto tabulku modifikovat, aby byla kromě primárního (továrního) rozdělení specifikována také pro kód aktualizace OTA. Pro OTA existují obvykle dva oddíly, které jsou alokovány pro aktualizaci. Jeden pro aktivní firmware a jeden pro nový firmware. To umožňuje, aby aplikace zůstala nedotčena. Modifikovaná tabulka oddílů OTA vypadá následovně:
Tabulka 2: Typická modifikovaná tabulka oddílů OTA ESP32. (Zdroj tabulky: Beningo Embedded)
Jak je ukázáno, nyní existuje aplikační část ota_0 a ota_1 o velikosti 1 MB a datová část (otadata), která je přidělena pro proces aktualizace. Tato tabulka může být modifikována tak, aby vyhovovala dané aplikaci. K dispozici je také otatool, který lze použít k aktualizaci firmware. Tento skript se obvykle používá k:
- Čtení, zápisu a smazání oddílu OTA
- Přepnutí spouštěcí oddíly
- Přepnutí na tovární oddíl
Ukázkový skript lze spustit jednoduchým příkazem na terminálu:
./otatool_example.sh
Nebo pomocí Pythonu:
python otatool_example.py
Pokud jde o konfiguraci ESP32 pro OTA, je klíčovým krokem nastavení oddílů.
Tipy a triky
Řešení EPS32 OTA může urychlit a zjednodušit aktualizaci firmwaru. Aby se řešení nestalo zátěží vývoje, je třeba mít na paměti několik „tipů a triků“:
- Pokud je to možné, využijte stávající framework OTA, který je součástí cloudového poskytovatele společnosti. To může dramaticky zjednodušit vývoj a integraci.
- Pomocí vývojové desky otestujte možnosti OTA a bootloaderu. ESP32 má několik vývojových desek. Která z nich je pro danou aplikaci nejvhodnější, může zabrat nějakou dobu.
- Pro vlastní řešení využijte příklady ESP32 OTA na GitHubu.
- U aplikací, kde produkt funguje jako směrovač nebo rozbočovač Wi-Fi, zvažte stažení bitové kopie firmwaru do externí paměti a provedení aktualizace z velkokapacitního paměťového zařízení.
- Z bezpečnostních důvodů je nejlepší zakázat tzv. donwgrade. Pokud se aplikace může vrátit k předchozím verzím, potenciální útočníci by mohli poslat starší verzi s upraveným kódem a tak ohrozit systém.
Závěr
Aktualizace OTA je zásadní funkcí pro rostoucí počet IoT a vestavěných systémů. Bezdrátový mikrokontroler ESP32 si našel cestu do široké škály zařízení a jak ukazuje, má hotové spolehlivé řešení OTA. Využitím frameforku ESP-IDF a souvisejících modulů a platforem lze zkrátit dobu vývoje a věnovat se aplikační části, kde lze získat konkurenční výhodu.
Článek vyšel v originále na webu DigiKey.com, autorem je Jacob Beningo.