IoT og smarthus

Arduino IDE, PlatformIO eller ESP-IDF for ESP32?

ESP32-S3-kort, debugverktøy og kodeeditor på en elektronikkbenk

Arduino IDE, PlatformIO og ESP-IDF er ikke tre konkurrerende språk, men ulike deler av verktøykjeden for ESP32. Arduino IDE er et enkelt utviklingsmiljø. PlatformIO organiserer prosjekter og kan bygge med både Arduino- og ESP-IDF-rammeverket. ESP-IDF er Espressifs offisielle SDK. Velg ut fra prosjektstruktur, maskinvarestøtte, testbarhet og vedlikehold, ikke ut fra hvilket verktøy som ser mest avansert ut.

Kort forklartBruk Arduino IDE til første skisse og læring. Bruk PlatformIO når du vil feste plattform- og bibliotekversjoner, ha flere byggemiljøer og bygge automatisk fra Git. Bruk ESP-IDF direkte når produktet trenger alle Espressif-funksjonene, FreeRTOS, Kconfig og en komponentarkitektur. Arduino-ESP32 kan også brukes som en komponent i ESP-IDF, så overgangen trenger ikke være alt eller ingenting.

Fire lag i et ESP32-prosjekt

IDE-et er bare inngangsdøren. Arduino-ESP32 er selv bygget på ESP-IDF og leveres med ferdig kompilerte ESP-IDF-biblioteker, slik at Arduino IDE kan bygge C++-koden med Espressifs kompilator uten at du ser ESP-IDF. PlatformIO henter en versjonert Espressif32-plattform og bygger med arduino eller espidf som rammeverk. ESP-IDF bruker egne komponenter, CMake og Ninja, styrt av kommandoen idf.py.

Kortdefinisjonen knytter brikke, flash, PSRAM, USB og opplastingsmetode til byggingen. Kode som kompilerer for «generic ESP32», kan likevel være feil for en ESP32-S3-enhet med innebygd USB eller for en M5Stack-kontroller med skjerm og egen strømstyring.

Sammenligning av verktøyene

ValgProsjektformatStyrkeViktig begrensning
Arduino IDE + Arduino-ESP32Skisse med setup/loop og bibliotekerRask start, enkel seriellmonitor og mange eksemplerStørre prosjekter krever egen struktur og bevisst versjonsstyring
PlatformIO + ArduinoMappene src, include, lib og test pluss platformio.iniFaste avhengigheter, flere miljøer og bygging fra kommandolinjenPlattformen kan ligge etter Espressifs nyeste kjerne og brikker
PlatformIO + ESP-IDFESP-IDF-prosjekt styrt av PlatformIOSamme arbeidsflyt med ESP-IDF som rammeverkVersjonene og dokumentasjonen til begge lagene må passe sammen
ESP-IDF direkteKomponenter, CMakeLists.txt og sdkconfigHele den offisielle funksjonsflaten og tydelig konfigurasjonBrattere læringskurve og flere byggedetaljer
Arduino som ESP-IDF-komponentESP-IDF-prosjekt som inkluderer ArduinoGradvis overgang og gjenbruk av Arduino-bibliotekerKompatibilitetstabellen mellom versjonene må følges

Velg etter situasjon

Situasjonen dinAnbefalt startMerk
Første ESP32-prosjekt eller rask test av ett bibliotekArduino IDEMinst oppsett; flytt til PlatformIO når prosjektet vokser
Flere filer, Git, faste versjoner og automatisk byggingPlatformIO med ArduinoSjekk at plattformen har kjerneversjonen du trenger
M5Stack-skjerm, knapper og sensorer i C++Arduino IDE eller PlatformIO med M5UnifiedVelg et støttet kort og fest bibliotekversjonen
Ny brikke, for eksempel ESP32-C6, -H2 eller -P4ESP-IDF, eventuelt nyeste Arduino-ESP32Ny maskinvare får som regel støtte i ESP-IDF først
Batteridrift, sikker oppstart, flash-kryptering eller egne partisjonerESP-IDFFull tilgang til Kconfig og sikkerhetsfunksjonene
Eksisterende Arduino-kode som trenger ESP-IDF-funksjonerArduino som ESP-IDF-komponentFølg kompatibilitetstabellen mellom Arduino-ESP32 og ESP-IDF

Arduino IDE: rask første test

Arduino IDE er effektivt når du skal bekrefte kort, USB-port og ett bibliotek. Installer ESP32-støtten fra Boards Manager slik Espressifs offisielle dokumentasjon beskriver, velg den eksakte kortmodellen og kjør et enkelt eksempel før du kobler til ekstern maskinvare.

En god første skisse gjør mer enn å blinke: den leser en sensor, kontrollerer feil, viser resultatet og skriver status til seriellmonitoren. Da tester du hele kjeden fra driver og bibliotek til programlogikk. Når filen vokser, flytter du konstanter og klasser til egne filer og legger prosjektet i Git.

#include <cmath>

struct Measurement {
  float value;
  bool valid;
};

Measurement validateReading(float raw) {
  if (!std::isfinite(raw)) return {0.0f, false};
  if (raw < -40.0f || raw > 85.0f) return {raw, false};
  return {raw, true};
}

Grensene er eksempelverdier og må erstattes med verdiene i sensorens datablad. Poenget er å skille rå avlesning fra gyldig måling. Den samme funksjonen kan testes på PC-en med enhetstester, uten at noe er koblet til GPIO.

Merk at Arduino-ESP32 versjon 3 bygger på ESP-IDF 5 og endret blant annet API-ene for PWM (LEDC) og timere. Eksempler skrevet for versjon 2 kan derfor gi kompileringsfeil. Sjekk hvilken kjerneversjon et eksempel er laget for.

PlatformIO: faste versjoner og flere miljøer

PlatformIO samler prosjektkonfigurasjonen i platformio.ini. Her fester du Espressif32-plattform, kort, rammeverk og biblioteker. Den offisielle dokumentasjonen advarer mot en flytende «latest»-referanse og viser hvordan en konkret plattformversjon festes.

; Felles innstillinger for alle miljøer
[env]
platform = [email protected]
board = exact_board_id
framework = arduino
monitor_speed = 115200
lib_deps =
  m5stack/[email protected]

[env:release]
build_flags = -D APP_RELEASE=1

[env:debug]
build_type = debug
build_flags =
  -D APP_RELEASE=0
  -D CORE_DEBUG_LEVEL=4

x.y.z, a.b.c og exact_board_id er plassholdere. Hent riktige verdier fra PlatformIOs kortliste og bibliotekregister, og kopier dem ikke blindt. Seksjonen [env] gjelder alle miljøer, mens release og debug bare skiller seg i byggeflagg. CORE_DEBUG_LEVEL styrer hvor mye Arduino-ESP32 logger. Du bygger og laster opp et bestemt miljø med pio run -e debug -t upload. Hemmeligheter som WiFi-passord skal ikke ligge i denne filen.

Mappen lib/ kan inneholde prosjektets egne biblioteker, og test/ brukes til tester. Bygging fra kommandolinjen gjør det mulig å kjøre det samme bygget automatisk i CI. Et vellykket bygg beviser likevel ikke at USB, radio eller sensor virker på fysisk maskinvare. Behold derfor en dokumentert test på et ekte kort.

ESP-IDF: komponenter, oppgaver og konfigurasjon

Et ESP-IDF-prosjekt består normalt av en hovedkomponent og eventuelle egne komponenter, hver med sin CMakeLists.txt. Den daglige arbeidsflyten går gjennom idf.py:

idf.py set-target esp32s3      # velg brikke én gang per prosjekt
idf.py menuconfig              # SDK-konfigurasjon (Kconfig)
idf.py build                   # bygg firmware
idf.py -p PORT flash monitor   # last opp og vis seriell logg

Bytt esp32s3 med brikken din og PORT med serieporten. Espressif leverer mange eksempler som bør bygges uendret før de flettes inn i din egen kode.

FreeRTOS er en del av plattformen, men flere oppgaver (tasks) er ikke automatisk bedre. Del opp etter ansvar som faktisk må skje samtidig, for eksempel sensoravlesning, nettverkskø og brukergrensesnitt. Bruk køer eller hendelser i stedet for delte globale variabler. Sett tidsfrister og en sikker tilstand for når en oppgave eller nettverkstjeneste feiler.

// Køen opprettes én gang ved oppstart, med plass til én måling:
// measurement_queue = xQueueCreate(1, sizeof(measurement_t));

void sensor_task(void *arg) {
    for (;;) {
        measurement_t value = read_sensor();
        if (value.valid) {
            xQueueOverwrite(measurement_queue, &value);
        }
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

Dette er et strukturbilde, ikke komplett ESP-IDF-kode. Typen, køen, driveroppsettet og feilkodene må defineres. xQueueOverwrite() er bare beregnet på køer med plass til ett element, og passer når mottakeren alltid skal ha den nyeste målingen. I produksjonskode skal returverdier kontrolleres, og strategi for watchdog, stakkstørrelse og omstart skal dokumenteres.

M5Stack-biblioteker

M5Stack vedlikeholder M5Unified for felles maskinvaretilgang og M5GFX for grafikk. De reduserer forskjellene mellom kortene, men du må fortsatt velge en støttet enhet og en versjonskombinasjon som er testet sammen.

En M5Stamp S3A med ESP32-S3 passer når mange GPIO skal inn i en egen krets. En Atom EchoS3R har lydmaskinvare og krever at I2S, lydkodek og strømoppsett støttes av biblioteket og eksempelet. Samme ESP32-S3-familie betyr ikke at programmet kan gjenbruke pinout eller periferioppsett uendret.

Velg biblioteker med omhu

  1. Finn eieren: foretrekk repositoriet til produsenten eller en aktiv, identifiserbar organisasjon.
  2. Kontroller lisensen: den må passe måten prosjektet skal distribueres på.
  3. Les støttelisten: brikke, rammeverk og versjon må være eksplisitt støttet.
  4. Bygg det offisielle eksempelet: test biblioteket isolert på din kortrevisjon.
  5. Fest versjon eller commit: en senere endring hos utgiveren skal ikke endre et gammelt bygg uten at du merker det.
  6. Planlegg oppdateringer: faste versjoner uten jevnlige sikkerhets- og kompatibilitetsoppdateringer blir teknisk gjeld.

Fra prototype til vedlikeholdbar firmware

Hold maskinvaretilgangen i et tynt lag, validering og logikk i rene funksjoner og nettverkskoden bak et tydelig grensesnitt. Da kan logikken enhetstestes, og sensor eller nettverksprotokoll kan byttes uten at hele programmet må skrives om. Logg versjon, årsak til omstart og viktige feil, men aldri passord eller tokens.

Et robust prosjekt har et definert byggemiljø, statisk analyse, enhetstester, en rask funksjonstest på fysisk kort og en kontrollert oppdateringsvei. Secure boot, flash-kryptering og OTA-oppdatering er ikke avkrysningsbokser som slås på til slutt. De påvirker nøkkelhåndtering, partisjoner og gjenoppretting, så planlegg dem tidlig og følg ESP-IDF-dokumentasjonen for den stabile versjonen du bruker.

Trinnvis overgang

Start gjerne med UIFlow 2 og MicroPython for å forstå maskinvaren. Gjenskap deretter den samme lille sensorflyten i Arduino IDE. Når prosjektet får flere filer og avhengigheter, flytter du det til PlatformIO og fester versjonene. Gå til ESP-IDF når en konkret funksjon eller arkitektur krever det. Oversikten over programmering av ESP32 og M5Stack setter denne stigen inn i en større sammenheng, mens plattformguiden hjelper hvis du ennå ikke har valgt maskinvare.

Behold det samme testoppsettet gjennom hele overgangen: samme sensor, intervall, feiltilfeller, strømforsyning og forventede resultater. Da kan du sammenligne minnebruk, oppstartstid, strømforbruk og stabilitet, i stedet for bare å konstatere at LED-en blinker.

Kilder og videre lesing

Arduino-ESP32-installasjon og støttede brikker er kontrollert mot Espressifs Arduino-dokumentasjon. ESP-IDF-verktøykjede, stabile dokumentversjoner og første prosjekt følger ESP-IDF Programming Guide. PlatformIO-konfigurasjon og versjonsfesting er kontrollert mot PlatformIO Espressif 32.

Oppsummering

Arduino IDE er et raskt inngangspunkt, PlatformIO gir en repeterbar prosjektflyt med automatisk bygging, og ESP-IDF gir produsentens komplette rammeverk. Verktøyene kan brukes trinnvis og kombineres. Velg eksakt kort, fest versjoner, bygg offisielle eksempler og hold programlogikken adskilt fra maskinvaren. Da blir språk og IDE et bevisst verktøyvalg, ikke en låsing av hele prosjektet.

Alle guider

Produkter omtalt i denne guiden

Produktene som brukes og sammenlignes i guiden, med pris og lagerstatus.