Jak wykonywać aktualizacje bezprzewodowe (OTA) za pomocą mikrokontrolera ESP32 i platformy rozwojowej ESP-IDF
Przekazane przez: Północnoamerykańscy redaktorzy DigiKey
2021-08-10
Projektanci produktów Internetu rzeczy (IoT) muszą stale oceniać dobór platformy i komponentów pod kątem obniżenia kosztów i mocy przy jednoczesnej poprawie wydajności i przyspieszeniu projektowania aplikacji komunikacyjnych. Obecnie istnieje wiele rozwiązań do wyboru, ale projektanci stają przed wyzwaniem wykonywania aktualizacji bezprzewodowych (OTA - ang. Over-The-Air) w celu utrzymania aktualności oprogramowania układowego urządzenia po wdrożeniu.
Kluczem jest przyjrzenie się dostępnym platformom, aby sprawdzić, z jakimi dodatkowymi narzędziami i wsparciem pozwalającym na obsługę aktualizacji OTA są dostarczane. Takie wsparcie może znacznie uprościć proces, ale może wymagać wcześniejszej uwagi.
W artykule omówiono podstawy technologii OTA i dlaczego jest to kluczowa funkcja, którą musi obsługiwać prawie każdy system Internetu rzeczy, pomimo wyzwań, przed którymi stoją developerzy. W dalszej części wykorzystano mikrokontroler ESP32 firmy Espressif Systems obsługujący technologię Bluetooth i Wi-Fi, wraz z powiązanymi modułami, zestawami i platformą rozwojową Internetu rzeczy ESP (ESP-IDF), aby zademonstrować sposób tworzenia partycji OTA i wykorzystać skrypt otatool.py do przeprowadzenia aktualizacji oprogramowania układowego w czasie działania aplikacji.
Wprowadzenie do aktualizacji bezprzewodowych (OTA)
Głównym celem większości zespołów programistycznych jest wdrożenie funkcji specyficznych dla produktu, czyli logiki biznesowej, która wyróżnia ich produkt. Jednak każdy produkt Internetu rzeczy ma podstawowy zestaw funkcji, który należy wdrożyć, skonfigurować i utrzymywać przez cały okres eksploatacji urządzenia. Dobrym przykładem są aktualizacje zabezpieczeń. Biorąc pod uwagę potrzebę przeprowadzania tych aktualizacji, ważną, ale łatwo pomijaną funkcją podczas oceny odpowiedniej platformy programistycznej jest funkcja aktualizacji bezprzewodowej oprogramowania układowego (FOTA) lub programu ładującego (czasami określanej jako OTA).
Funkcja OTA daje inżynierom możliwość zdalnej konserwacji i aktualizacji produktów w odpowiedzi na wymagania techniczne i biznesowe bez konieczności wysyłania personelu konserwacyjnego do urządzenia lub aktywnego wykonywania czynności przez klienta końcowego. Zamiast tego, wszystkie te koszty można wyeliminować, w sposób niezauważalny aktualizując oprogramowanie układowe w tle lub podczas postoju technicznego, na przykład w środku nocy.
Architektury OTA mogą występować w wielu różnych formach i konfiguracjach, od niestandardowych rozwiązań po standardowe implementacje dostarczane przez dostawców usług chmurowych. Typowy przykład architektury ukazano na ilustracji 1.
Ilustracja 1: wygląd ogólny architektury OTA, ukazujący przykładowy proces aktualizacji oprogramowania układowego aplikacji w terenie na wdrożonych urządzeniach. (Źródło ilustracji: Beningo Embedded Group)
W tym przykładzie producent OEM używa usługi Amazon Web Services (AWS) IoT Core do przesyłania nowych wersji oprogramowania układowego, a następnie wykorzystuje wbudowane funkcje zadań do wdrażania aktualizacji na urządzeniach w terenie. To tylko jeden z wielu przykładów, a prawie każdy dostawca usług chmurowych ma podobne rozwiązanie.
Obecnie dostępnych jest wiele mikrokontrolerów obsługujących technologię OTA. Jednym z popularnych mikrokontrolerów, wykorzystywanym zarówno do tanich systemów, jak przez producentów, jest urządzenie ESP32. Istnieje kilka powodów, dla których mikrokontroler ESP32 jest tak popularny, m.in.:
- Posiada zintegrowany mikrokontroler z dostępnymi modułami certyfikacji Wi-Fi/Bluetooth
- Niski koszt
- Otwartoźródłowe środowisko programistyczne i struktury oprogramowania, takie jak ESP-IDF i platforma rozwojowa audio ESP (ESP-ADF)
- Wiele istniejących przykładów aplikacji dostępnych bezpłatnie w sieci
Wybór modułu ESP32 do testów funkcji OTA
Dostępnych jest kilka różnych modułów ESP32 i płytek rozwojowych, które użytkownicy mogą kupić, aby zapoznać się z przykładami OTA. Weźmy na przykład płytkę 3405 ESP32 Huzzah Feather firmy Adafruit (ilustracja 2). Jest to niedroga płytka rozwojowa, która zawiera wszystkie obwody do programowania mikrokontrolera ESP32 i zasilania przez złącze USB.
Ilustracja 2: płytka 3405 Huzzah Feather zawiera moduł Wi-Fi/Bluetooth z certyfikatem ESP32 WROOM-32D i pamięć flash 4MB. Płytka ta zawiera kompletny sprzęt niezbędny do programowania i komunikacji z modułem przez USB. (Źródło ilustracji: Adafruit)
Sercem płytki 3405 jest moduł ESP32-WROOM-32D wyposażony w 4MB pamięci flash, technologię Wi-Fi, Bluetooth i kompletny zestaw urządzeń peryferyjnych do prawie każdego zastosowania.
Inną płytką rozwojową, której można użyć, jest płytka audio ESP32-LYRATD-SYNA firmy Espressif Systems (ilustracja 3). Ta płytka rozwojowa zawiera moduł ESP32-WROVER-B.
Ilustracja 3: płytka ESP32-LYRATD-SYNA jest oparta na module Wi-Fi/Bluetooth z certyfikatem ESP32 WROVER-B i zawiera 4MB pamięci flash. Oprócz umożliwienia projektantom programowania i komunikacji z modułem przez USB, posiada również obwody potrzebne do tworzenia aplikacji audio. (Źródło ilustracji: Espressif Systems)
Moduł ESP32-LYRATD-SYNA posiada również 4MB pamięci flash, a także wszystkie obwody do zastosowań audio. Płytka zawiera kodek audio, wzmacniacz audio oraz gniazda słuchawkowe i głośnikowe, umożliwiając pełne przetestowanie aplikacji audio.
Ostatnią płytką rozwojową, którą można wykorzystać do testowania funkcji OTA, jest płytka rozwojowa ESP32-S2-SAOLA-1RI firmy Espressif (ilustracja 4). Jeśli chodzi o płytki rozwojowe, ta jest najtańsza. Płytka zawiera moduł ESP32 Wrover wraz z obwodami do programowania układu. Posiada on tylko styki, które umożliwiają łatwe włożenie jej do płytki prototypowej w celu przetestowania.
Ilustracja 4: płytka rozwojowa ESP32-S2-SAOLA-1RI oparta na module Wrover jest wyposażona w absolutne minimum, jest niedroga, ale zawiera wystarczającą ilość obwodów do zaprogramowania modułu na płytce. (Źródło ilustracji: Espressif Systems)
Wybór konkretnej płytki do testów nie ma większego znaczenia, ponieważ każdy moduł ESP32 wykorzystuje platformę ESP-IDF. Ma ona na celu ułatwienie deweloperom działań związanych z tworzeniem oprogramowania poprzez uwzględnienie sterowników, oprogramowania pośredniczącego, systemu RTOS oraz programów ładujących i bibliotek OTA, co jest ważne z punktu widzenia niniejszego artykułu.
Program ładujący pozwala deweloperom na wykorzystanie aktualizacji bezprzewodowych (OTA) i partycjonowanie pamięci w celu aktualizacji oprogramowania układowego, gdy podstawowa aplikacja nadal działa, co pomaga zminimalizować przestoje. Konfiguracja programu ładującego może początkowo wydawać się skomplikowana, ale jest prosta, jeśli poprowadzi się ją odpowiednio.
Tok pracy przy opracowywaniu aktualizacji OTA
Tok pracy przy opracowywaniu aktualizacji OTA dla mikrokontrolera ESP32 będzie się nieznacznie różnić w zależności od potrzeb biznesowych i wyboru komponentów produktu. Na przykład pracownicy wykorzystujący platformę Amazon Web Services (AWS), aby uruchomić swoje rozwiązanie do aktualizacji bezprzewodowych (OTA) z wykorzystaniem mikrokontrolera ESP32, prawdopodobnie użyją poradników dla początkujących i przykładów wprowadzających do platformy AWS. Z drugiej strony firma, która tworzy własne niestandardowe rozwiązanie, prawdopodobnie skorzysta z dokumentacji mikrokontrolera ESP32. W niniejszym artykule przyjrzymy się elementom realizacji na poziomie mikrokontrolera ESP32, a nie w chmurze. Powodem jest to, że elementy te są ogólne i mają zastosowanie do aktualizacji bezprzewodowych (OTA) z wykorzystaniem mikrokontrolera ESP32, niezależnie od wykorzystywanego dostawcy usług chmurowych lub rozwiązania.
Ogólnie proces konfiguracji aktualizacji OTA na mikrokontrolerze ESP32 obejmuje następujące czynności:
- Konfiguracja tabeli partycji ESP32
- Pobranie oprogramowania układowego obsługującego funkcje OTA
- Opracowanie narzędzia, które będzie działać jako serwer i wgrywać nowe oprogramowanie układowe
- Pobranie najnowszego oprogramowania układowego na mikrokontroler ESP32
- Zamiana aplikacji na nową
Oczywiście jest to podejście uproszczone. Deweloperzy powinni ponownie spojrzeć na ilustrację 1, aby przyjrzeć się ogólnemu procesowi aktualizacji oprogramowania układowego. Ten proces może być dość skomplikowany, dlatego zaleca się wykorzystanie istniejących przykładów aktualizacji bezprzewodowych (OTA) z wykorzystaniem mikrokontrolera ESP32 znajdujących się w serwisie GitHub. Oto kilka krytycznych przykładów:
- Aktualizacje OTA HTTPS
- Natywne aktualizacje OTA
- Proste aktualizacje OTA
- Narzędzie OTA (przykład skryptów w języku Python)
Ilustracja 5 przedstawia etapy procesu wdrażania i aktualizacji. Aby wdrożyć rozwiązanie OTA w module ESP32, deweloper musi najpierw wykonać czynności zaznaczone na czerwono. Kolejnym etapem są czynności oznaczone kolorem pomarańczowym, które wykonuje się w celu ułatwienia aktualizacji bezprzewodowej (OTA).
Rysunek 5: przykłady aktualizacji bezprzewodowych (OTA) firmy Espressif Systems znajdujące się w serwisie GitHub dostarczają deweloperom kilku prostych wskazówek, jak przeprowadzić aktualizację OTA w module ESP32. (Źródło ilustracji: Espressif Systems)
Konfiguracja aplikacji ESP32 do aktualizacji bezprzewodowej (OTA)
Moduł ESP32 zawiera tabelę partycji, która opisuje, jaki rodzaj danych znajduje się na mikrokontrolerze i gdzie się znajduje. Na przykład standardowa tabela partycji ESP32 wygląda podobnie do tabeli 1:
Tabela 1: standardowa tabela partycji ESP32 pokazująca typ danych i ich lokalizację w mikrokontrolerze. (Źródło ilustracji: Beningo Embedded)
Mamy aplikację fabryczną, a następnie sekcję dla biblioteki NVS i danych inicjalizacji warstwy fizycznej (PHY). Aby korzystać z funkcji aktualizacji OTA, ta tabela musi zostać zaktualizowana, aby oprócz aplikacji podstawowej (fabrycznej) były określone lokalizacje pamięci dla oprogramowania układowego aktualizacji OTA. W przypadku aktualizacji OTA zazwyczaj do aktualizacji przydzielane są dwie partycje. Jedna dla aktywnego aktualizowanego oprogramowania układowego, a druga dla pobieranego oprogramowania układowego, które stanie się najnowszą wersją. Dzięki temu aplikacja fabryczna pozostanie nienaruszona. Zaktualizowana tabela partycji aktualizacji OTA wyglądałaby podobnie do ukazanej w tabeli 2.
Tabela 2: typowa zaktualizowana tabela partycji OTA ESP32. (Źródło ilustracji: Beningo Embedded)
Oprócz sekcji danych (otadata) będącej pamięcią RAM przydzieloną dla procesu aktualizacji mamy teraz też sekcję aplikacji ota_0 i ota_1 o rozmiarze 1MB. Deweloperzy mogą modyfikować i aktualizować tę tabelę w celu dostosowania jej do danej aplikacji.
W uruchomieniu przykładowej aktualizacji bezprzewodowej (OTA) pomoże nam prosty zestaw instrukcji, które są dostępne w serwisie GitHub w sekcji „How to use the examples” (Jak korzystać z przykładów). Opisano w nim, jak zbudować i zaprogramować aplikację.
Dostępne jest również narzędzie otatool, które można wykorzystać do aktualizacji oprogramowania układowego. Ten skrypt jest zwykle używany do:
- Odczytywania, zapisywania i usuwania partycji OTA
- Przełączania partycji rozruchowych
- Przełączania na partycję fabryczną
Przykładowy skrypt można wykonać po prostu uruchamiając przykład w terminalu za pomocą polecenia:
./otatool_example.sh
lub używając języka Python:
python otatool_example.py
Jeśli chodzi o konfigurację mikrokontrolera ESP32 do aktualizacji bezprzewodowych (OTA), krytycznym krokiem jest upewnienie się, że partycje są skonfigurowane.
Porady i wskazówki dotyczące używania
Rozwiązanie aktualizacji bezprzewodowej (OTA) modułu EPS32 może przyspieszyć i uprościć proces aktualizacji oprogramowania układowego przez dewelopera. Aby rozwiązanie nie obciążało procesu rozwojowego, należy pamiętać o kilku poradach i wskazówkach:
- Jeśli to możliwe, należy wykorzystać istniejącą platformę aktualizacji bezprzewodowych (OTA) od dostawcy usług chmurowych. Może to radykalnie uprościć programowanie i integrację.
- Do testowania możliwości aktualizacji bezprzewodowych (OTA) i programów ładujących należy używać niedrogich płytek rozwojowych. Moduł ESP32 posiada szereg opcji i może wymagać pewnej liczby eksperymentów, aby określić, która z nich jest najlepsza dla danej aplikacji.
- W przypadku niestandardowych rozwiązań należy wykorzystać przykłady aktualizacji OTA dla mikrokontrolera ESP32 z serwisu GitHub.
- W przypadku aplikacji, w których produkt działa jako router lub koncentrator Wi-Fi, należy rozważyć pobranie obrazu oprogramowania układowego do pamięci zewnętrznej i wykonanie aktualizacji z urządzenia pamięci masowej.
- Trzeba poświęcić trochę czasu na przejrzenie dokumentacji mikrokontrolera ESP32 dotyczącej tabeli partycji. Omawiana implementacja mikrokontrolera nieco różni się od typowej.
- Ze względów bezpieczeństwa najlepiej jest wyłączyć przywracanie poprzedniego stanu aplikacji. Jeśli aplikacja będzie w stanie wrócić do poprzedniej wersji, potencjalni atakujący będą mogli wgrać wersję ze znanym programem wykorzystującym luki i włamać się do systemu.
Deweloperzy, którzy zastosują się do powyższych wskazówek i porad mogą zaoszczędzić sobie sporo czasu i frustracji podczas prób wykorzystania modułu ESP32 czy innego rozwiązania do aktualizacji bezprzewodowych (OTA).
Podsumowanie
Aktualizacje bezprzewodowe (OTA) są funkcją kluczową dla coraz większej liczby systemów Internetu rzeczy (IoT) i systemów wbudowanych. Deweloperzy muszą dobrze wiedzieć, jak robić to skutecznie, aby zaoszczędzić czas na samym początku procesu projektowania i rozwoju, a także po dostarczeniu produktu.
Bezprzewodowy mikrokontroler ESP32 znalazł się w szerokiej gamie urządzeń i zawiera gotowe rozwiązanie aktualizacji bezprzewodowej (OTA). Korzystając z platformy rozwojowej ESP-IDF i powiązanych modułów oraz platform, a także kierując się poradami i wskazówkami opartymi na doświadczeniu, deweloperzy mogą znacznie skrócić czas projektowania i uruchomić własne rozwiązanie aktualizacji bezprzewodowej (OTA).
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.




