Durchführung von OTA-Updates (Over-The-Air) mit dem ESP32-Mikrocontroller und dem ESP-IDF
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2021-08-10
Entwickler von IoT-Produkten (Internet-of-Things) müssen die Auswahl von Plattformen und Komponenten kontinuierlich überprüfen, um Kosten und Stromverbrauch zu senken, die Leistung zu verbessern und die Entwicklung von Netzwerkanwendungen zu beschleunigen. Derzeit gibt es eine ganze Reihe von Lösungen, aber die Entwickler stehen vor der Herausforderung, drahtlose OTA-Updates (Over-the-Air) durchzuführen, um die Geräte-Firmware auf dem neuesten Stand zu halten, wenn sie einmal installiert ist.
Entscheidend ist, dass man sich die verfügbaren Plattformen ansieht, um zu sehen, welche zusätzlichen Tools und welche Unterstützung sie für OTA-Updates bieten. Eine solche Unterstützung kann den Prozess erheblich vereinfachen, erfordert aber möglicherweise im Vorfeld einige Aufmerksamkeit.
In diesem Artikel werden die OTA-Grundlagen erörtert und es wird erläutert, warum es sich dabei um eine kritische Funktion handelt, die von nahezu jedem IoT-System unterstützt werden muss - trotz der Herausforderungen, denen sich Entwickler gegenübersehen. Anschließend wird anhand des Bluetooth- und Wi-Fi-fähigen Mikrocontrollers ESP32 von Espressif Systems mit den zugehörigen Modulen, Kits und dem ESP IoT Development Framework (ESP-IDF) gezeigt, wie man eine OTA-Partition erstellt und das Skript otatool.py verwendet, um ein Firmware-Update durchzuführen, während eine Anwendung noch läuft.
Einführung in OTA-Updates
Das Hauptaugenmerk der meisten Entwicklungsteams liegt auf der Implementierung ihrer produktspezifischen Funktionen, d. h. der Geschäftslogik, die ihr Produkt auszeichnet. Jedes IoT-Produkt verfügt jedoch über einen Grundfunktionssatz, der während der gesamten Lebensdauer des Geräts bereitgestellt, konfiguriert und gewartet werden muss. Sicherheitsupdates sind ein gutes Beispiel. Angesichts der Notwendigkeit, diese Aktualisierungen durchzuführen, ist ein wichtiges, aber leicht zu übersehendes Merkmal bei der Bewertung einer geeigneten Entwicklungsplattform die Bootloader- bzw. Firmware-OTA(FOTA)-Update-Fähigkeit (manchmal einfach als OTA bezeichnet).
OTA bietet Ingenieuren die Möglichkeit, ihre Produkte aus der Ferne zu warten und zu aktualisieren, um technischen und geschäftlichen Anforderungen gerecht zu werden, ohne dass Wartungspersonal zum Gerät geschickt werden muss oder der Endkunde aktiv etwas am Gerät tun muss, um es zu aktualisieren. Stattdessen können all diese Kosten vermieden werden, indem die Geräte ihre Firmware im Hintergrund oder während der betrieblichen „Ausfallzeiten“, z. B. mitten in der Nacht, aktualisieren.
OTA-Architekturen gibt es in vielen verschiedenen Formen und Konfigurationen, von maßgeschneiderten Lösungen bis hin zu Standardimplementierungen, die von Cloud-Anbietern bereitgestellt werden. Ein typisches Architekturbeispiel ist in Abbildung 1 zu sehen.
Abbildung 1: Ein Überblick über die OTA-Architektur, die einen Beispielprozess für die Aktualisierung der Anwendungsfirmware im Feld auf den eingesetzten Geräten zeigt. (Bildquelle: Beningo Embedded Group)
In diesem Beispiel verwendet ein OEM den Dienst AWS-IoT-Core (AWS: Amazon Web Services), um neue Firmware-Versionen hochzuladen, und nutzt dann die integrierten Job-Funktionen, um Updates für Geräte im Feld bereitzustellen. Dies ist nur eines von vielen Beispielen, und fast jeder Cloud-Anbieter hat eine ähnliche Lösung.
Es gibt heute eine Vielzahl von Mikrocontrollern, die OTA unterstützen. Ein beliebter Mikrocontroller sowohl für kostengünstige Systeme als auch bei Herstellern ist der ESP32. Es gibt mehrere Gründe, warum der ESP32 so beliebt ist, unter anderem:
- Er verfügt über einen integrierten Mikrocontroller mit Wi-Fi/Bluetooth-Zertifizierungsmodulen
- Niedrige Kosten
- Open-Source-Entwicklungsumgebung und Software-Frameworks wie ESP-IDF und ESP Audio Development Framework (ESP-ADF)
- Viele bestehende Anwendungsbeispiele sind im Internet frei verfügbar
Auswählen eines ESP32-Moduls für OTA-Tests
Es sind verschiedene ESP32-Module und Entwicklungsplatinen erhältlich, die Benutzer erwerben können, um die OTA-Beispiele zu testen. Nehmen Sie zum Beispiel das ESP32-Huzzah-Feather-Board 3405 von Adafruit (Abbildung 2). Dies ist ein kostengünstiges Entwicklungsboard, das alle Schaltkreise enthält, um einen ESP32 zu programmieren und ihn über einen USB-Anschluss mit Strom zu versorgen.
Abbildung 2: Das Huzzah-Feather-Board 3405 enthält ein ESP32-WROOM-32D-zertifiziertes Modul für Wi-Fi/Bluetooth mit 4 MByte Flash. Das Board enthält die gesamte Hardware, die zur Programmierung und Kommunikation mit dem Modul über USB erforderlich ist. (Bildquelle: Adafruit)
Das Herzstück des 3405 ist ein ESP32-WROOM-32D-Modul, das mit 4 MByte Flash, Wi-Fi, Bluetooth und einem kompletten Peripheriesatz für nahezu jede Anwendung ausgestattet ist.
Ein weiteres Entwicklungsboard, das verwendet werden kann, ist die ESP32-LYRATD-SYNA-Soundkarte von Espressif Systems (Abbildung 3). Dieses Entwicklungsboard enthält das Modul ESP32-WROVER-B.
Abbildung 3: Das Board ESP32-LYRATD-SYNA basiert auf einem ESP32-WROVER-B-zertifizierten Modul für Wi-Fi/Bluetooth mit 4 MByte Flash. Neben der Möglichkeit, das Modul über USB zu programmieren und mit ihm zu kommunizieren, verfügt es auch über die für die Entwicklung von Audioanwendungen erforderlichen Schaltungen. (Bildquelle: Espressif Systems)
Das Modul ESP32-LYRATD-SYNA verfügt außerdem über 4 MByte Flash sowie alle Schaltkreise für Audioanwendungen. Das Board enthält einen Audiocodec, einen Audioverstärker sowie Kopfhörer- und Lautsprecherbuchsen, um eine Audioanwendung umfassend zu testen.
Ein letztes Entwicklungsboard, das für OTA-Tests verwendet werden kann, ist das Entwicklungsboard ESP32-S2-SAOLA-1RI von Espressif (Abbildung 4). Wenn es um Entwicklungsboards geht, ist dies das günstigste. Das Board enthält ein ESP32-Wrover-Modul zusammen mit der Schaltung zur Programmierung des Chips. Es gibt keinen anderen Schnickschnack als die Tatsache, dass es Pins enthält, die es ermöglichen, es zum Testen leicht in ein Breadboard zu stecken.
Abbildung 4: Das ESP32-S2-SAOLA-1RI, das auf dem Wrover-Modul basiert, ist ein kostengünstiges nacktes Entwicklungsboard, das jedoch genügend Schaltungen zur Programmierung des On-Board-Moduls enthält. (Bildquelle: Espressif Systems)
Das für den Test ausgewählte Board spielt keine große Rolle, da jedes ESP32-Modul das ESP-IDF nutzt. Dieses Framework soll den Entwicklern die Softwareentwicklung erleichtern, indem es Treiber, Middleware, ein RTOS und - für die Zwecke dieses Artikels wichtig - Bootloader und OTA-Bibliotheken umfasst.
Der Bootloader ermöglicht es Entwicklern, OTA-Updates zu nutzen und ihren Speicher zu partitionieren, um die Firmware zu aktualisieren, während die primäre Anwendung noch läuft, was die Ausfallzeiten minimiert. Die Einrichtung des Bootloaders kann auf den ersten Blick kompliziert erscheinen, ist aber bei richtiger Anleitung sehr einfach.
Der OTA-Entwicklungsablauf
Der OTA-Entwicklungsfluß für den ESP32 wird je nach Geschäftsanforderungen und Auswahl der Produktkomponenten leicht variieren. So wird ein Team, das AWS nutzt, wahrscheinlich die AWS-Anleitungen und Beispiele verwenden, um seine ESP32-OTA-Lösung zum Laufen zu bringen. Ein Unternehmen, das seine eigene Lösung anpasst, wird dagegen wahrscheinlich die ESP32-Dokumentation nutzen. In diesem Artikel werden wir uns die Teile auf der ESP32-Ebene und nicht in der Cloud ansehen. Der Grund dafür ist, dass diese Teile generisch sind und für OTA mit dem ESP32 gelten, unabhängig davon, welcher Cloud-Anbieter oder welche Lösung verwendet wird.
Im Allgemeinen umfasst der Prozess zum Einrichten eines OTA-Updates auf dem ESP32 die folgenden Schritte:
- Konfigurieren der ESP32-Partitionstabelle
- Download der OTA-unterstützenden Firmware
- Entwicklung eines Tools, das als Server fungiert und neue Firmware bereitstellt
- Download der neuesten Firmware auf den ESP32
- Wechseln zur neuen Anwendung
Dies ist natürlich der vereinfachte Ansatz. Entwickler sollten sich Abbildung 1 noch einmal ansehen, um sich einen Überblick über den gesamten Prozess der Firmware-Aktualisierung zu verschaffen. Dieser Prozess kann recht aufwändig sein, daher ist es ratsam, die vorhandenen ESP32-OTA-Beispiele auf GitHubzu nutzen. Diese Beispiele liefern mehrere kritische Beispiele wie:
- HTTPS OTA
- Native OTA
- Einfaches OTA
- OTA-Tool (Beispiel für Python-Skripte)
Abbildung 5 zeigt die Schritte des Bereitstellungs- und Aktualisierungsprozesses. Ein Entwickler muss zuerst die Schritte in Rot ausführen, um die OTA-Lösung auf dem ESP32-Modul zu installieren. Die orangefarbenen Schritte sind die nächsten und werden ausgeführt, um ein OTA-Update zu ermöglichen.
Abbildung 5: Die OTA-Update-Beispiele von Espressif Systems auf GitHub bieten Entwicklern mehrere einfache Beispiele, um ihren ESP32 dazu zu bringen, OTA-Updates durchzuführen. (Bildquelle: Espressif Systems)
Konfigurieren einer ESP32-Anwendung für OTA
Der ESP32 enthält eine Partitionstabelle, die beschreibt, welche Art von Daten sich auf dem Mikrocontroller befinden und wo sie gespeichert sind. Eine Standard-ESP32-Partitionstabelle sieht zum Beispiel so aus wie Tabelle 1:
Tabelle 1: Eine Standard-ESP32-Partitionstabelle, die die Art der Daten und ihren Speicherort auf dem Mikrocontroller zeigt. (Quelle der Tabelle: Beningo Embedded)
Es gibt die Werksanwendung und dann einen Abschnitt für die NVS-Bibliothek und die Initialisierungsdaten der physikalischen Schicht (PHY) (init). Um die OTA-Funktionalität nutzen zu können, muss diese Tabelle aktualisiert werden, damit neben der primären (werkseitigen) Anwendung auch Speicherplätze für die OTA-Update-Firmware angegeben werden. Bei OTA gibt es in der Regel zwei Partitionen, die für Updates vorgesehen sind. Eine für die aktive aktualisierte Firmware und eine für die Firmware, die gerade heruntergeladen wird und die dann die neueste Version sein wird. Dadurch bleibt die werkseitige Anwendung intakt. Eine aktualisierte OTA-Partitionstabelle würde etwa wie Tabelle 2 aussehen.
Tabelle 2: Typische ESP32-aktualisierte OTA-Partitionstabelle. (Quelle der Tabelle: Beningo Embedded)
Wie gezeigt, gibt es jetzt einen ota_0- und einen ota_1-Anwendungsbereich, die jeweils 1 MByte groß sind, sowie einen Datenbereich (otadata), der für den Aktualisierungsprozess reserviert ist. Diese Tabelle kann vom Entwickler an die jeweilige Anwendung angepasst und aktualisiert werden.
Um das OTA-Beispiel auszuführen, gibt es eine einfache Anleitung, die auf GitHub unter dem Abschnitt „How to use the examples“ zu finden ist. Hier wird beschrieben, wie man die Anwendung erstellt und programmiert.
Es gibt auch das otatool, das zum Aktualisieren der Firmware verwendet werden kann. Dieses Skript wird normalerweise für folgendes verwendet:
- Lesen, Schreiben und Löschen der OTA-Partitionen
- Wechseln der Bootpartitionen
- Wechsel zur Werkspartition
Das Beispielskript kann einfach in einem Terminal mit dem folgenden Befehl ausgeführt werden:
./otatool_example.sh
Oder mit Python:
python otatool_example.py
Wenn es darum geht, den ESP32 für OTA zu konfigurieren, ist die Einrichtung der Partitionen ein wichtiger Schritt.
Tipps und Tricks zur Verwendung
Die EPS32-OTA-Lösung kann die Firmware-Update-Lösung eines Entwicklers beschleunigen und vereinfachen. Um zu verhindern, dass die Lösung zu einer Belastung für die Entwicklung wird, gibt es einige „Tipps und Tricks“, die beachtet werden sollten:
- Wenn möglich, nutzen Sie ein bestehendes OTA-Framework, das zum Cloud-Anbieter des Unternehmens gehört. Dies kann die Entwicklung und Integration drastisch vereinfachen.
- Verwenden Sie ein kostengünstiges Entwicklungsboard, um OTA-Funktionen und Bootloader zu testen. Der ESP32 verfügt über mehrere Optionen, und es kann einige Experimente erfordern, um herauszufinden, welche für die jeweilige Anwendung am besten geeignet ist.
- Für kundenspezifische Lösungen können Sie die ESP32-OTA-Beispiele auf GitHub nutzen.
- Für Anwendungen, bei denen das Produkt als Wi-Fi-Router oder -Hub fungiert, sollten Sie in Erwägung ziehen, das Firmware-Image auf einen externen Speicher herunterzuladen und eine Aktualisierung über ein Massenspeichergerät durchzuführen.
- Nehmen Sie sich etwas Zeit, um die ESP32-Dokumentation über Partitionstabellen zu lesen. Dies unterscheidet sich ein wenig von der typischen Mikrocontroller-Implementierung.
- Aus Sicherheitsgründen ist es ratsam, das Anwendungs-Rollback zu deaktivieren. Wenn die Anwendung zu früheren Versionen zurückkehren kann, könnten Angreifer möglicherweise zu einer Version mit einer bekannten Schwachstelle zurückkehren und das System kompromittieren.
Entwickler, die diese „Tipps und Tricks“ befolgen, werden feststellen, dass sie eine Menge Zeit und Ärger sparen, wenn sie versuchen, den ESP32 oder eine andere OTA-Lösung zu nutzen.
Fazit
OTA-Updates sind für eine wachsende Zahl von IoT- und eingebetteten Systemen ein wichtiges Merkmal. Entwickler müssen wissen, wie sie dies effektiv implementieren, um im Vorfeld, während des Entwurfs- und Entwicklungsprozesses und nach der Auslieferung des Produkts Zeit zu sparen.
Der drahtlose Mikrocontroller ESP32 hat seinen Weg in eine Vielzahl von Geräten gefunden, und wie gezeigt, verfügt er über eine fertige OTA-Lösung. Durch die Nutzung der Vorteile von ESP-IDF und der zugehörigen Module und Plattformen sowie durch einige erfahrungsbasierte Tipps und Tricks können Entwickler ihre Entwicklungszeit drastisch verkürzen und ihre eigene OTA-Lösung zum Laufen bringen.

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.