Klik hier voor de Engelse versie van de broncode.

Hoe over-the-air (OTA) updates uitvoeren met de ESP32-microcontroller en zijn ESP-IDF

Door Jacob Beningo

Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey

Ontwerpers van Internet of Things (IoT)-producten moeten de keuze van platforms en componenten voortdurend evalueren om de kosten en het energieverbruik te verlagen, de prestaties te verbeteren en het ontwerp van connectiviteitstoepassingen te versnellen. Er zijn momenteel heel wat oplossingen om uit te kiezen, maar ontwerpers worden geconfronteerd met de uitdaging om draadloze, over-the-air (OTA) updates uit te voeren om de firmware van het toestel up-to-date te houden, eens het is geïnstalleerd.

Het komt erop aan de beschikbare platforms te bekijken om te zien met welke extra tools en ondersteuning ze komen om OTA-updates te ondersteunen. Dergelijke steun kan het proces sterk vereenvoudigen, maar vergt wellicht enige aandacht vooraf.

Dit artikel bespreekt de basisprincipes van OTA en waarom het een kritieke functie is die bijna elk IoT-systeem moet ondersteunen, ondanks de uitdagingen waarmee ontwikkelaars worden geconfronteerd. Vervolgens wordt gebruik gemaakt van de ESP32 Bluetooth en Wi-Fi-microcontroller van Espressif Systems, met bijbehorende modules, kits en het ESP IoT Development Framework (ESP-IDF), om te laten zien hoe een OTA-partitie kan worden gemaakt en hoe het otatool.py script kan worden gebruikt om een firmware-update uit te voeren terwijl een toepassing nog actief is.

Inleiding tot OTA-updates

De focus van de meeste ontwikkelteams ligt op het implementeren van hun productspecifieke functies, dat wil zeggen, de bedrijfslogica die hun product onderscheidt. Elk ivd-product heeft echter een basisfunctieset die moet worden ingezet, geconfigureerd en onderhouden tijdens de levensduur van het apparaat. Beveiligingsupdates zijn een goed voorbeeld. Gezien de noodzaak om deze updates uit te voeren, is een belangrijk maar gemakkelijk over het hoofd te zien kenmerk bij de evaluatie van een geschikt ontwikkelingsplatform de bootloader of de mogelijkheid om firmware OTA (FOTA) te updaten (soms gewoon OTA genoemd).

OTA biedt technici de mogelijkheid hun producten op afstand te onderhouden en te upgraden naar aanleiding van zowel technische als zakelijke vereisten, zonder dat het nodig is onderhoudspersoneel naar het apparaat te sturen of de eindklant actief iets met het apparaat te laten doen om het te updaten. In plaats daarvan kunnen al deze kosten worden weggenomen door de apparaten hun firmware geruisloos op de achtergrond te laten upgraden, of tijdens operationele "downtime"-uren zoals midden in de nacht.

OTA-architecturen zijn er in vele vormen en configuraties, van op maat gemaakte oplossingen tot door cloud-providers geleverde standaardimplementaties. Een typisch architectonisch voorbeeld is te zien in Afbeelding 1.

Schema van de OTA-architectuur dat een voorbeeldproces toont voor het bijwerken van toepassingsfirmwareAfbeelding 1: Een OTA-architectuuroverzicht dat een voorbeeldproces toont voor het bijwerken van toepassingsfirmware in het veld naar ingezette apparaten. (Bron afbeelding: Beningo Embedded Group)

In dit voorbeeld gebruikt een OEM Amazon Web Services (AWS) IoT Core om nieuwe firmwareversies te uploaden en gebruikt vervolgens de ingebouwde Job-mogelijkheden om updates uit te rollen naar apparaten in het veld. Dit is slechts een van de vele voorbeelden, en bijna elke cloudprovider heeft een soortgelijke oplossing.

Er zijn tegenwoordig veel microcontrollers verkrijgbaar die OTA ondersteunen. Een populaire microcontroller voor zowel low-cost systemen als onder makers is de ESP32. Er zijn verschillende redenen waarom de ESP32 zo populair is, waaronder:

  • Het heeft een geïntegreerde microcontroller met Wi-Fi/Bluetooth certificatiemodules beschikbaar
  • Lage kosten
  • Open-source-ontwikkelingsomgeving en softwareframeworks zoals het ESP-IDF en het ESP Audio Development Framework (ESP-ADF)
  • Veel bestaande toepassingsvoorbeelden vrij beschikbaar op het web

Keuze van een ESP32-module voor OTA testen

Er zijn verschillende ESP32-modules en ontwikkelingsborden beschikbaar die gebruikers kunnen kopen om de OTA-voorbeelden te doorlopen. Neem bijvoorbeeld het Adafruit 3405 ESP32 Huzzah Feather-bord (Afbeelding 2). Dit is een goedkoop ontwikkelingsbord dat alle schakelingen bevat om een ESP32 te programmeren en van stroom te voorzien via een USB-aansluiting.

Afbeelding van Adafruit 3405 Huzzah Feather-bordAfbeelding 2: Het 3405 Huzzah Feather-bord bevat een ESP32 WROOM-32D gecertificeerde Wi-Fi/Bluetooth module met 4 Mbytes flash. Het bord bevat alle hardware die nodig is om de module te programmeren en ermee te communiceren via USB. (Bron afbeelding: Adafruit)

Het hart van de 3405 is een ESP32-WROOM-32D-module met 4 Mbytes flash, Wi-Fi, Bluetooth en een complete set randapparatuur voor vrijwel elke toepassing.

Een ander ontwikkelingsbord dat kan worden gebruikt is het ESP32-LYRATD-SYNA-audiobord van Espressif Systems (Afbeelding 3). Dit ontwikkelingsbord bevat de ESP32-WROVER-B-module.

Afbeelding van Espressif Systems ESP32-LYRATD-SYNA-bordAfbeelding 3: Het ESP32-LYRATD-SYNA-bord is gebaseerd op een ESP32 WROVER-B gecertificeerde Wi-Fi/Bluetooth module met 4 Mbytes flash. Naast de mogelijkheid voor ontwerpers om te programmeren en te communiceren met de module via USB, beschikt deze ook over de schakelingen die nodig zijn om audiotoepassingen te ontwikkelen. (Bron afbeelding: Espressif Systems)

De ESP32-LYRATD-SYNA module heeft ook 4 Mbytes flash, evenals alle schakelingen voor audiotoepassingen. Het bord bevat een audio codec, een audio versterker, en hoofdtelefoon- en luidsprekeraansluitingen om een audiotoepassing volledig uit te testen.

Een laatste ontwikkelbord dat gebruikt kan worden voor OTA testen is het Espressif ESP32-S2-SAOLA-1RI-ontwikkelbord (Afbeelding 4). Als het op ontwikkelborden aankomt, is dit de goedkoopste. Het bord bevat een ESP32 Wrover-module samen met de schakelingen om de chip te programmeren. Er zijn geen franjes, behalve het feit dat het pennen bevat waarmee het gemakkelijk op een breadboard kan worden geplaatst om te testen.

Afbeelding van Espressif Systems ESP32-S2-SAOLA-1RI gebaseerd op de Wrover-moduleAfbeelding 4: De ESP32-S2-SAOLA-1RI, gebaseerd op de Wrover-module, is een goedkoop ontwikkelingsbord dat toch voldoende schakelingen bevat om de module aan boord te programmeren. (Bron afbeelding: Espressif Systems)

Het specifieke bord die voor de tests wordt gekozen, maakt niet al te veel uit omdat elke ESP32-module gebruik maakt van de ESP-IDF. Dit raamwerk is ontworpen om software-ontwikkeling voor ontwikkelaars te vergemakkelijken door drivers, middleware, een RTOS, en - belangrijk voor de doeleinden van dit artikel - bootloaders, en OTA-bibliotheken op te nemen.

Met de bootloader kunnen ontwikkelaars gebruik maken van OTA-updates en hun geheugen partitioneren om firmware bij te werken terwijl de primaire applicatie nog draait, wat helpt om de downtime te minimaliseren. Het instellen van de bootloader kan op het eerste gezicht ingewikkeld lijken, maar het is eenvoudig als u de juiste begeleiding krijgt.

De OTA-ontwikkelingsworkflow

De OTA-ontwikkelingsworkflow voor de ESP32 zal enigszins variëren naargelang de bedrijfsbehoeften en de keuze van de productcomponenten. Een team dat AWS gebruikt, zal bijvoorbeeld waarschijnlijk de AWS-startgidsen en -voorbeelden gebruiken om hun ESP32 OTA-oplossing werkend te krijgen. Een bedrijf dat zijn eigen oplossing aanpast, zal daarentegen waarschijnlijk gebruik maken van de ESP32-documentatie. In dit artikel gaan we kijken naar de stukjes op ESP32-niveau en niet in de cloud. De reden hiervoor is dat deze stukken generiek zijn en van toepassing op OTA met de ESP32, ongeacht welke cloud provider of oplossing wordt gebruikt.

In het algemeen verloopt het proces om een OTA-update op de ESP32 in te stellen als volgt

  1. Configureer de ESP32-partitietabel
  2. Download firmware die OTA ondersteunt
  3. Ontwikkel een tool om als server te fungeren en nieuwe firmware te pushen
  4. Download de nieuwste firmware naar de ESP32
  5. Overschakelen naar de nieuwe toepassing

Dit is uiteraard de vereenvoudigde aanpak. Ontwikkelaars moeten nogmaals naar figuur 1 kijken voor een overzicht van het totale firmware update proces. Dit proces kan vrij ingewikkeld zijn, dus het is aan te raden om de bestaande ESP32 OTA voorbeelden op GitHub te gebruiken. Deze voorbeelden geven een aantal kritische voorbeelden zoals:

  • HTTPS OTA
  • Inheemse OTA
  • Eenvoudige OTA
  • OTA Tool (python scripts voorbeeld)

Afbeelding 5 toont de stappen van het invoerings- en updateproces. Een ontwikkelaar zal eerst de stappen in rood moeten uitvoeren om de OTA-oplossing op de ESP32-module te implementeren. De stappen in oranje zijn de volgende en worden uitgevoerd om een OTA-update mogelijk te maken.

Schema van Espressif Systems OTA-updatevoorbeeldenAfbeeldin 5: De Espressif Systems OTA-updatevoorbeelden op GitHub bieden ontwikkelaars verschillende eenvoudige voorbeelden om hun ESP32 OTA-updates te laten uitvoeren. (Bron afbeelding: Espressif Systems)

Een ESP32-toepassing configureren voor OTA

De ESP32 bevat een partitietabel die beschrijft welk type gegevens zich op de microcontroller bevindt en waar deze zich bevinden. Een standaard ESP32 partitietabel ziet er bijvoorbeeld ongeveer zo uit als Tabel 1:

Afbeelding van standaard ESP32 partitietabelTabel 1: Een standaard ESP32-partitietabel met het type gegevens en waar ze zich op de microcontroller bevinden. (Bron tabel: Beningo Embedded)

Er is de fabriekstoepassing en dan een gedeelte voor de NVS-bibliotheek en de initialisatiegegevens (init) van de fysieke laag (PHY). Om de OTA-functionaliteit te kunnen gebruiken, moet deze tabel worden bijgewerkt, zodat er geheugenplaatsen zijn gespecificeerd voor de OTA-updatefirmware, naast de primaire (fabrieks)toepassing. Voor OTA zijn er gewoonlijk twee partities die worden toegewezen voor updates. Eén voor de actieve bijgewerkte firmware, en één voor de firmware die wordt gedownload en die de laatste versie zal worden. Hierdoor kan de fabriekstoepassing intact blijven. Een bijgewerkte OTA partitietabel zou er ongeveer zo uitzien als Tabel 2.

Afbeelding van typische ESP32 bijgewerkte OTA partitietabelTabel 2: Typische ESP32 bijgewerkte OTA partitietabel. (Bron tabel: Beningo Embedded)

Zoals te zien is, is er nu een ota_0 en een ota_1 applicatiesectie die 1 Mbyte groot is, naast een datasectie (otadata) die RAM toegewezen is voor het updateproces. Deze tabel kan door de ontwikkelaar worden aangepast en bijgewerkt aan de toepassing.

Om het OTA voorbeeld uit te voeren, is er een eenvoudige set instructies die op GitHub staan onder de "Hoe de voorbeelden te gebruiken" sectie. Hier wordt beschreven hoe de applicatie moet worden gebouwd en geprogrammeerd.

Er is ook de otatool die kan worden gebruikt om firmware te updaten. Dit script wordt meestal gebruikt om:

  • Lezen, schrijven en wissen van de OTA partities
  • Verwissel boot partities
  • Overschakelen naar de fabrieks-partitie

Het voorbeeldscript kan worden uitgevoerd door het eenvoudigweg in een terminal uit te voeren met het commando:

./otatool_example.sh

Of met Python:

python otatool_example.py

Bij het configureren van de ESP32 voor OTA, is het een kritische stap om ervoor te zorgen dat de partities ingesteld zijn.

Tips en trucs voor het gebruik van

De EPS32 OTA oplossing kan de firmware update oplossing van een ontwikkelaar versnellen en vereenvoudigen. Om te voorkomen dat de oplossing een last wordt voor de ontwikkeling, zijn er verschillende "tips en trucs" die in gedachten moeten worden gehouden:

  • Maak indien mogelijk gebruik van een bestaand OTA-raamwerk bij de cloudprovider van het bedrijf. Dit kan de ontwikkeling en integratie drastisch vereenvoudigen.
  • Gebruik een goedkoop ontwikkelbord om OTA-mogelijkheden en bootloaders te testen. De ESP32 heeft verschillende opties, en het kan wat experimenteren vergen om te bepalen welke de beste is voor de toepassing in kwestie.
  • Voor aangepaste oplossingen kunt u gebruik maken van de ESP32 OTA-voorbeelden op GitHub.
  • Voor toepassingen waarbij het product als Wi-Fi-router of hub fungeert, kunt u overwegen de firmware-image naar een extern geheugen te downloaden en een update uit te voeren vanaf een apparaat voor massaopslag.
  • Bestudeer de ESP32-documentatie over partitietabellen. Dit is een beetje anders dan de typische microcontroller implementatie.
  • Om veiligheidsredenen is het beter om het terugdraaien van toepassingen uit te schakelen. Als de toepassing kan terugdraaien naar vorige versies, kunnen would-be aanvallers mogelijk een versie met een bekende exploit pushen en het systeem in gevaar brengen.

Ontwikkelaars die deze "tips en trucs" volgen zullen ondervinden dat zij heel wat tijd en verdriet kunnen besparen wanneer zij proberen gebruik te maken van de ESP32, of een andere OTA oplossing, naargelang het geval.

Conclusie

OTA-updates zijn van cruciaal belang voor een toenemend aantal IoT- en embedded systemen. Ontwikkelaars moeten goed weten hoe ze dit effectief kunnen doen om tijd te besparen tijdens het ontwerp- en ontwikkelingsproces en nadat het product is verscheept.

De ESP32 draadloze microcontroller heeft zijn weg gevonden naar een brede waaier van toestellen, en zoals getoond heeft hij een kant-en-klare OTA-oplossing. Door gebruik te maken van de ESP-IDF en de bijbehorende modules en platforms, en door enkele op ervaring gebaseerde tips en trucs toe te passen, kunnen ontwikkelaars hun ontwerptijd drastisch verkorten en hun eigen OTA-oplossing in werking stellen.

DigiKey logo

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.

Achtergrondinformatie over deze auteur

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo is een embedded software consultant. Hij heeft meer dan 200 artikelen over embedded software ontwikkelingstechnieken gepubliceerd, is een veelgevraagde spreker en technische trainer en heeft drie universitaire graden, waaronder een Masters of Engineering bij de University of Michigan.

Over deze uitgever

De Noord-Amerikaanse redacteurs van DigiKey