Hvis der er uklarheder i denne artikel, bedes du se den originale engelske version.

Sådan udføres OTA-opdateringer (Over-the-Air) ved hjælp af en ESP32-mikrocontroller og ESP-IDF

Af Jacob Beningo

Bidraget af DigiKeys nordamerikanske redaktører

Designere af IoT-produkter (Internet of Things) skal løbende evaluere platform- og komponentvalg med henblik på at reducere omkostninger og strømforsyning, samtidig med at de forbedrer ydeevnen og fremskynder designet af forbindelsesapplikationer. Der er i øjeblikket en del løsninger at vælge imellem, men designerne står over for udfordringen med at udføre trådløse OTA-opdateringer (over-the-air) for at holde enhedens firmware opdateret, når den er implementeret.

Det vigtigste er at se på de tilgængelige platforme for at se, hvilke ekstra værktøjer og hvilken støtte de har til at understøtte OTA-opdateringer. En sådan støtte kan i høj grad forenkle processen, men kan kræve en vis opmærksomhed på forhånd.

I denne artikel diskuteres OTA-grundprincipperne, og hvorfor det er en vigtig funktion, som næsten alle IoT-systemer skal understøtte på trods af de udfordringer, som udviklerne står over for. Derefter bruges Espressif Systems' ESP32 Bluetooth- og Wi-Fi-aktiverede mikrocontroller ESP med tilhørende moduler, kits og ESP IoT Development Framework (ESP-IDF) til at vise, hvordan man opretter en OTA-partition og bruger otatool.py-scriptet til at udføre en firmwareopdatering, mens et program stadig kører.

Introduktion til OTA-opdateringer

Det centrale fokus for de fleste udviklingsteams er at implementere deres produktspecifikke funktioner, dvs. den forretningslogik, der adskiller deres produkt fra andre. Ethvert IoT-produkt har imidlertid et grundlæggende funktionssæt, som skal implementeres, konfigureres og vedligeholdes i hele enhedens levetid. Sikkerhedsopdateringer er et godt eksempel. Da det er nødvendigt at foretage disse opdateringer, er bootloaderen eller OTA-opdateringen af firmware (FOTA) (undertiden blot kaldet OTA) en vigtig, men let overset funktion, når man evaluerer en egnet udviklingsplatform.

OTA giver ingeniører mulighed for at fjernvedligeholde og opgradere deres produkter som svar på både tekniske og forretningsmæssige krav uden at skulle sende vedligeholdelsespersonale til enheden eller få slutkunden til aktivt at gøre noget ved enheden for at opdatere den. I stedet kan alle disse omkostninger fjernes ved at lade enhederne stille og roligt opgradere deres firmware i baggrunden eller i løbet af driftsstop, f.eks. midt om natten.

OTA-arkitekturer kan findes i mange forskellige former og konfigurationer, lige fra specialbyggede løsninger til standardimplementeringer leveret af cloud-udbydere. Et typisk arkitektonisk eksempel kan ses i figur 1.

Diagram over OTA-arkitekturoversigt, der viser et eksempel på en proces for opdatering af applikationsfirmwareFigur 1: Oversigt over OTA-arkitekturen, der viser et eksempel på en proces for opdatering af applikationsfirmware i felten til udrullede enheder. (Billedkilde: Beningo Embedded Group)

I dette eksempel bruger en OEM Amazon Web Services (AWS) IoT Core til at uploade nye firmwareversioner og bruger derefter de indbyggede Job-funktioner til at distribuere opdateringer til enheder i marken. Dette er blot et af mange eksempler, og næsten alle cloud-udbydere har en lignende løsning.

Der er mange mikrocontrollere til rådighed i dag, som understøtter OTA. En populær mikrocontroller til både billige systemer og blandt producenter er ESP32. Der er flere grunde til, at ESP32 har været så populær, bl.a.:

  • Den har en integreret mikrocontroller med Wi-Fi/Bluetooth-certificeringsmoduler til rådighed
  • Lave omkostninger
  • Open source-udviklingsmiljø og softwareframeworks som ESP-IDF og ESP Audio Development Framework (ESP-ADF)
  • Mange eksisterende eksempler på applikationer er frit tilgængelige på nettet

Valg af et ESP32-modul til OTA-test

Der er flere forskellige ESP32-moduler og udviklingskort til rådighed, som brugerne kan købe for at gennemgå OTA-eksemplerne. Tag for eksempel Adafruits 3405 ESP32 Huzzah Feather-kort (figur 2). Dette er et billigt udviklingskort, der indeholder alle nødvendige kredsløb til at programmere en ESP32 og forsyne den med strøm via et USB-stik.

Billede af Adafruit 3405 Huzzah Feather BoardFigur 2: 3405 Huzzah Feather Board indeholder et ESP32 WROOM-32D-certificeret Wi-Fi-/Bluetooth-modul med 4 MB flash. Kortet indeholder al den hardware, der er nødvendig for at programmere og kommunikere med modulet via USB. (Billedkilde: Adafruit)

Kernen i 3405 er et ESP32-WROOM-32D-modul, der leveres med 4 MB flash, Wi-Fi, Bluetooth og et komplet perifer sæt til næsten alle applikationer.

Et andet udviklingskort, der kan bruges, er Espressif Systems' ESP32-LYRATD-SYNA-lydkort (figur 3). Dette udviklingskort indeholder et ESP32-WROVER-B-modul.

Billede af Espressif Systems ESP32-LYRATD-SYNA boardFigur 3: ESP32-LYRATD-SYNA-kortet er baseret på et ESP32 WROVER-B-certificeret Wi-Fi-/Bluetooth-modul med 4 MByte flash. Ud over at give designere mulighed for at programmere og kommunikere med modulet via USB har det også de kredsløb, der er nødvendige for at udvikle lydapplikationer. (Billedkilde: Espressif Systems)

ESP32-LYRATD-SYNA-modulet har også 4 Mbyte flash samt alle kredsløb til audio-applikationer. Kortet indeholder en lydcodec, en lydforstærker samt hovedtelefon- og højttalerstik til at afprøve en lydapplikation fuldt ud.

Et sidste udviklingskort, der kan bruges til OTA-testning er et Espressif ESP32-S2-SAOLA-1RI-udviklingskort (Figur 4). Når det kommer til udviklingskort, er dette kort det billigste. Kortet indeholder et ESP32 Wrover-modul sammen med kredsløb til at programmere chippen. Der er ingen dikkedarer, bortset fra at den indeholder pins, der gør det nemt at sætte den ind i et breadboard til test.

Billede af Espressif Systems ESP32-S2-SAOLA-1RI baseret på Wrover-moduletFigur 4: ESP32-S2-SAOLA-1RI, der er baseret på Wrover-modulet, er et udviklingsbræt med en simpel konstruktion, der er billigt, men som indeholder tilstrækkeligt kredsløb til at programmere det indbyggede modul. (Billedkilde: Espressif Systems)

Det specifikke kort, der er valgt til testning, har ikke den store betydning, fordi hvert ESP32-modul udnytter ESP-IDF. Denne ramme er designet til at lette softwareudviklingsaktiviteterne for udviklere ved at inkludere drivere, middleware, et RTOS og - hvilket er vigtigt for denne artikel - bootloadere og OTA-biblioteker.

Bootloaderen giver udviklere mulighed for at udnytte OTA-opdateringer og partitionere deres hukommelse til at opdatere firmware, mens det primære program stadig kører, hvilket hjælper med at minimere nedetiden. Bootloader-opsætningen kan virke kompliceret i starten, men den er ligetil, hvis du får den rigtige vejledning.

Arbejdsgangen for OTA-udvikling

OTA-udviklingsarbejdsgangen for ESP32 vil variere en smule afhængigt af forretningsbehovene og produktkomponentvalget. For eksempel vil et team, der anvender AWS, sandsynligvis bruge AWS-vejledninger og eksempler til at få deres ESP32 OTA-løsning til at fungere. En virksomhed, der tilpasser sin egen løsning, vil derimod sandsynligvis benytte ESP32-dokumentationen. I denne artikel vil vi se på delene på ESP32-niveau og ikke i skyen. Grunden er, at disse dele er generiske og gælder for OTA med ESP32, uanset hvilken cloud-udbyder eller løsning der anvendes.

Generelt omfatter processen for at konfigurere en OTA-opdatering på ESP32 følgende trin:

  1. Konfigurer ESP32-partitionstabellen
  2. Download firmware, der understøtter OTA
  3. Udvikle et værktøj til at fungere som en server og skubbe ny firmware
  4. Download den nyeste firmware til ESP32'eren
  5. Skift til den nye applikation

Dette er naturligvis den forenklede fremgangsmåde. Udviklere bør se på figur 1 igen for at få et overblik over den overordnede firmwareopdateringsproces. Denne proces kan være ret kompliceret, så det er tilrådeligt at bruge de eksisterende ESP32 OTA-eksempler på GitHub. Disse eksempler giver flere kritiske eksempler, f.eks:

  • HTTPS OTA
  • Indfødt OTA
  • Enkel OTA
  • OTA-værktøj (eksempel på python-scripts)

Figur 5 viser trinene i implementerings- og opdateringsprocessen. En udvikler skal først udføre de røde trin for at implementere OTA-løsningen til ESP32-modulet. De orangefarvede trin er de næste og udføres for at lette en OTA-opdatering.

Diagram over eksempler på OTA-opdateringer fra Espressif SystemsFigur 5: Espressif Systems OTA-opdateringseksempler på GitHub giver udviklere flere enkle eksempler på, hvordan de kan få deres ESP32 til at udføre OTA-opdateringer. (Billedkilde: Espressif Systems)

Konfigurering af en ESP32-applikation til OTA

ESP32 indeholder en partitionstabel, der beskriver, hvilken type data der er placeret på mikrocontrolleren, og hvor de befinder sig. En standard ESP32-partitionstabel ser f.eks. ud som Tabel 1:

Billede af standard ESP32-partitionstabellenTabel 1: En standard ESP32-partitioneringstabel, der viser typen af data og hvor de er placeret på mikrocontrolleren. (Kilde til tabellen: Beningo Embedded)

Der er fabriksapplikationen og derefter en sektion til NVS-biblioteket og initialiseringsdataene for det fysiske lag (PHY) (init). For at kunne bruge OTA-funktionen skal denne tabel opdateres, så der er hukommelsespladser specificeret til OTA-opdateringsfirmwaren ud over det primære (fabriks)program. For OTA er der typisk to partitioner, der er afsat til opdateringer. En for den aktive opdaterede firmware og en for den firmware, der er ved at blive downloadet, og som vil blive den nyeste version. Dette gør det muligt at bevare fabriksapplikationen intakt. En opdateret OTA-partitionstabel ville se ud som tabel 2.

Billede af typisk ESP32 opdateret OTA-partitionstabelTabel 2: Typisk ESP32 opdateret OTA-partitionstabel. (Kilde til tabellen: Beningo Embedded)

Som vist er der nu en ota_0- og en ota_1-applikationssektion, der er 1 Mbyte stor, ud over en data-sektion (otadata), som er RAM-allokeret til opdateringsprocessen. Denne tabel kan ændres og opdateres af udvikleren, så den passer til applikationen.

For at køre OTA-eksemplet er der et simpelt sæt instruktioner, som er anført på GitHub under afsnittet "How to use the examples" (hvordan man bruger eksemplerne). Her beskrives det, hvordan programmet bygges og programmeres.

Der findes også otatool, som kan bruges til at opdatere firmware. Dette script bruges typisk til at:

  • Læs, skriv og slet OTA-partitioner
  • Skift boot-partitioner
  • Skift til fabrikspartitionen

Eksempelscriptet kan udføres ved blot at køre eksemplet i en terminal ved hjælp af kommandoen:

./otatool_example.sh

Eller ved hjælp af Python:

python otatool_example.py

Når ESP32 skal konfigureres til OTA, er det et vigtigt skridt at sikre, at partitionerne er konfigureret.

Tips og tricks til brug af

EPS32 OTA-løsningen kan fremskynde og forenkle udviklerens firmwareopdateringsløsning. For at undgå, at løsningen bliver en udviklingsbyrde, er der flere "tips og tricks", som man bør huske på:

  • Hvis det er muligt, skal du udnytte en eksisterende OTA-ramme, der er inkluderet i virksomhedens cloud-udbyder. Dette kan forenkle udvikling og integration betydeligt.
  • Brug et billigt udviklingskort til at teste OTA-funktioner og bootloadere. ESP32 har flere muligheder, og det kan være nødvendigt at eksperimentere lidt for at finde ud af, hvilken der er bedst til den pågældende applikation.
  • Du kan bruge ESP32 OTA-eksemplerne på GitHub til brugerdefinerede løsninger.
  • I applikationer, hvor produktet fungerer som Wi-Fi-router eller -hub, kan du overveje at downloade firmwareaftrykket til ekstern hukommelse og udføre en opdatering fra en masselagerenhed.
  • Brug noget tid på at læse ESP32-dokumentationen om partitionstabeller. Dette er lidt anderledes end den typiske implementering af en mikrocontroller.
  • Af sikkerhedsmæssige årsager er det bedst at deaktivere rollback af programmet. Hvis applikationen kan rulle tilbage til tidligere versioner, kan potentielle angribere potentielt udgive en version med en kendt udnyttelse og kompromittere systemet.

Udviklere, der følger disse "tips og tricks", vil opdage, at de sparer en hel del tid og ærgrelse, når de forsøger at udnytte ESP32 eller en anden OTA-løsning, alt efter hvad der er relevant.

Konklusion

OTA-opdateringer er en vigtig funktion for et stigende antal IoT- og indlejrede systemer. Udviklerne skal have et godt greb om, hvordan de kan gøre det effektivt for at spare tid både i design- og udviklingsprocessen og efter, at produktet er blevet leveret.

Den trådløse ESP32-mikrocontroller har fundet vej til en lang række enheder, og som vist har den en færdig OTA-løsning. Ved at udnytte ESP-IDF og de tilhørende moduler og platforme og bruge nogle erfaringsbaserede tips og tricks kan udviklere reducere deres designtid betydeligt og få deres egen OTA-løsning op at køre.

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.

Om denne forfatter

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo is an embedded software consultant. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees, including a Masters of Engineering from the University of Michigan.

Om udgiveren

DigiKeys nordamerikanske redaktører