Programmeer- & Elektronica-tutorials

Arduino IDE instellen voor ESP32-S2, S3 en C6

NNeil Bowen14 min leestijd

Arduino IDE instellen voor ESP32-werkzaamheden

Een stap-voor-stap gids voor het installeren van Arduino IDE, het toevoegen van ESP32-boardondersteuning en het uploaden van uw eerste sketch naar een ESP32-S2, ESP32-S3 of ESP32-C6.

Als u Arduino IDE nog nooit eerder hebt gebruikt, ziet het proces er ingewikkelder uit dan het werkelijk is. Het bestaat uit drie onderdelen: installeer de IDE, installeer het ESP32 board support package, en selecteer vervolgens het juiste board en de juiste poort. Het merendeel van de problemen die mensen tegenkomen, doet zich voor in het laatste onderdeel, daarom worden de board-instellingen hieronder gedetailleerd behandeld.

Deze gids veronderstelt dat u Arduino IDE 2 gebruikt, wat de huidige versie is en degene die u moet gebruiken voor ESP32-werkzaamheden. De oudere 1.8.x IDE werkt nog steeds, maar de board manager is langzamer en de editor is veel minder bruikbaar.

Wat u nodig hebt voordat u begint

  • Een Windows-, macOS- of Linux-machine met enkele gigabytes vrije ruimte. De ESP32-core en zijn toolchains zijn een grote download.
  • Een USB-kabel die gegevens draagt. Dit veroorzaakt constant problemen. Veel USB-C-kabels die bij telefoons en accu's worden geleverd, zijn alleen voor laden, en het board zal gewoon nooit verschijnen.
  • Een ESP32-board. De onderstaande instructies behandelen de S2-, S3- en C6-varianten.
  • Een redelijke internetverbinding voor de eerste download.

Stap 1: Arduino IDE installeren

Ga naar arduino.cc/en/software en download de huidige release voor uw besturingssysteem. De site zal u eerst een donatiepagina aanbieden. U kunt deze overslaan en rechtstreeks naar de download gaan.

  • Windows: kies de installer in plaats van de ZIP. Accepteer de stuurprogrammaprompts indien deze verschijnen tijdens de installatie.
  • macOS: open de schijfimage en sleep de toepassing naar Programma's. Bij de eerste keer opstarten moet u deze mogelijk goedkeuren onder Privacy en Beveiliging.
  • Linux: de AppImage is het minst problematisch. Maak deze uitvoerbaar en voer deze uit. U moet uzelf ook aan de dialout-groep toevoegen, wat hieronder onder stuurprogramma's wordt behandeld.


Figuur 1: De downloadpagina op arduino.cc

Start de IDE zodra de installatie is voltooid. Deze zal een schetsboekmap in uw documentenmap en een verborgen instellingenmap maken. Het is handig om te weten waar de instellingenmap zich bevindt, omdat als de board support ooit in de war raakt, de snelste oplossing het verwijderen van een deel ervan en opnieuw beginnen is:

  • Windows: %LOCALAPPDATA%\Arduino15
  • macOS: ~/Library/Arduino15
  • Linux: ~/.arduino15

Stap 2: De ESP32-core installeren

Open de boards manager. Dit is het tweede pictogram in de linker werkbalk, of Tools > Board > Boards Manager. Typ esp32 in het zoekvak en wacht even tot de lijst is geladen.

Oudere gidsen, inclusief veel die nog steeds bovenaan de zoekresultaten staan, vertellen u om een aangepaste URL in Voorkeuren in te plakken voordat u dit kunt doen. Op huidige versies van de IDE is dit vaak niet nodig, dus probeer eerst te zoeken en kijken wat er terugkomt. Als het Espressif-pakket wordt weergegeven, gaat u direct door. Zo niet, dan is er hieronder een korte omleiding die dit zal oplossen.

U ziet waarschijnlijk twee invoeren, en het is belangrijk welke u kiest:

  • Arduino ESP32 Boards, door Arduino. Dit pakket bevat alleen de Arduino Nano ESP32. U krijgt niet de S2-, S3- of C6-development module items. Tenzij u een Nano ESP32 bezit, is dit niet degene die u wilt.
  • esp32, door Espressif Systems. Dit is degene die u nodig hebt. Kies de nieuwste 3.x release uit de versiedropdown en klik op Installeren.

De download is enkele honderden megabytes zodra de compilertoolchains zijn inbegrepen, dus geef het tijd. De voortgangsbalk blijft lange tijd stilstaan terwijl het uitpakt. Sluit de IDE niet halverwege. Als het halverwege mislukt, voert u het opnieuw uit in plaats van aan te nemen dat het werkte.


Figuur 2: Twee pakketten, vergelijkbare namen. U wilt esp32 door Espressif Systems.

Als het Espressif-pakket niet verschijnt

Wijs de IDE handmatig op Espressif's eigen pakketindex. Het doet geen kwaad om dit te doen, zelfs als het pakket al werd weergegeven, dus als u het liever eenmalig instelt en er niet meer aan denkt, ga uw gang.

Ga naar File > Preferences, of op macOS Arduino IDE > Settings. Zoek het veld gelabeld Additional boards manager URLs en voeg dit toe:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

Als u reeds andere URL's daar hebt, voor ATtiny- of ESP8266-ondersteuning bijvoorbeeld, klikt u op het kleine pictogram aan het rechterkant van het veld om een groter vak te openen en plaats elke URL op zijn eigen regel. Klik OK en start de IDE opnieuw op, want deze haalt een nieuw toegevoegde index alleen op wanneer deze opstart. Zoek opnieuw naar esp32 in de boards manager en het Espressif item zal daar zijn.


Figuur 3: Het veld voor aanvullende boards manager URL's in Voorkeuren

Belangrijk voor C6-gebruikers: ESP32-C6-ondersteuning bestaat alleen in core-versie 3.0.0 en later. Als u een oudere 2.x core gebruikt, verschijnt de C6 helemaal niet in de board-lijst. De S2 en S3 worden in beide ondersteund, maar er is geen goed moment om op 2.x te blijven.

Stap 3: USB-stuurprogramma's, of het gebrek ervan

Of u een stuurprogramma nodig hebt, hangt geheel af van hoe het board met uw computer verbonden is, niet van welke chip het gebruikt.

Boards met native USB

De S2, S3 en C6 hebben allemaal een USB-randapparaat ingebouwd in de silicium. Als de USB-socket op uw board rechtstreeks naar de chip gaat, is geen stuurprogramma nodig op Windows 10 of 11, macOS of een huidige Linux-distributie. Het board verschijnt zelf als een standaard serieel apparaat.

Boards met een USB-naar-seriële brug

Veel development boards hebben een afzonderlijke bridge chip zodat uploads op de traditionele manier werken. Als uw board er een van deze heeft, installeert u het overeenkomstige stuurprogramma:

  • CP2102 of CP2102N: het Silicon Labs CP210x VCP-stuurprogramma.
  • CH340 of CH9102: het WCH-stuurprogramma.
  • FTDI: het FTDI VCP-stuurprogramma, hoewel Windows dit meestal al levert.

Sommige S3-boards hebben twee USB-sockets, een verbonden met de brug en een verbonden met de chip. Ze gedragen zich anders en produceren verschillende portnamen. Noteer welke socket u hebt gebruikt, want dit is belangrijk als u bij de board-instellingen komt.

Linux-machtigingen

Op Linux zal de poort bestaan, maar u kunt deze niet openen totdat uw gebruiker in de dialout-groep zit:

sudo usermod -a -G dialout $USER

Meld u af en weer aan zodat dit van kracht wordt. Op sommige distributies heet de groep uucp in plaats daarvan.

Stap 4: Selecteer uw board

Ga naar Tools > Board > esp32 en u krijgt een erg lange lijst. Als uw board een specifieke invoer per naam heeft, gebruik deze, omdat de fabrikant al de flashgrootte, PSRAM en pindefinities voor u heeft ingesteld. Zo niet, gebruik dan de invoer voor de generieke development module:

  • ESP32-S2: ESP32S2 Dev Module
  • ESP32-S3: ESP32S3 Dev Module
  • ESP32-C6: ESP32C6 Dev Module

De lijst is lang genoeg dat scrollen pijnlijk is. In Arduino IDE 2 kunt u in plaats daarvan de board selector dropdown bovenaan het venster gebruiken en erin typen, wat veel sneller is.


Figuur 4: De juiste development module kiezen

Stap 5: De board-opties die ertoe doen

Zodra een board is geselecteerd, vult het Tools-menu zich met opties. De meeste ervan kunnen met rust worden gelaten. Dit zijn degene die u problemen zullen geven als ze fout zijn.

Instelling ESP32-S2 ESP32-S3 ESP32-C6
USB CDC On Boot Ingeschakeld Ingeschakeld Ingeschakeld
USB Mode Niet aangeboden Hardware CDC en JTAG Niet aangeboden
Flash Size Komende overeen met de module Komende overeen met de module Komende overeen met de module
PSRAM Ingeschakeld alleen indien gemonteerd QSPI of OPI, al naar gelang gemonteerd Niet ondersteund
CPU Frequency 240 MHz 240 MHz 160 MHz
Partition Scheme Standaard om te starten Standaard om te starten Standaard om te starten
Upload Speed 921600, verlaag indien onbetrouwbaar 921600, verlaag indien onbetrouwbaar 921600, verlaag indien onbetrouwbaar
Core Debug Level Geen Geen Geen

USB CDC On Boot

Dit is de enige meest voorkomende oorzaak van "mijn sketch uploadt maar de seriële monitor toont niets". Op een board met native USB wordt de seriële poort waarmee u praat, gemaakt door de sketch zelf. Als USB CDC On Boot is uitgeschakeld, wordt Serial in plaats daarvan naar de hardware UART-pinnen gerouteerd in plaats van naar de USB-socket, en u ziet helemaal niets op het scherm. Stel het in op Ingeschakeld.

Als uw board een afzonderlijk USB-naar-seriële bridge chip gebruikt, laat het dan uitgeschakeld, want in dat geval is Serial naar de UART-pinnen precies wat u wilt.

Flashgrootte en partitie-schema

Stel de flashgrootte in op overeenkomstig de module, niet op de grootste waarde in de lijst. Als u de IDE vertelt dat u 16MB hebt en de module slechts 4MB heeft, kan de upload succesvol lijken en daarna zal het board boot-loopen of zijn opgeslagen instellingen verliezen.

Het standaard partitie-schema is prima totdat uw gecompileerde sketch de toepassingspartitie overschrijdt. Wanneer de IDE begint te klagen dat de sketch te groot is, schakelt u over naar een van de grotere app-schema's. Als u over-the-air updates wilt doen, hebt u een schema nodig met twee app-partities, omdat OTA de nieuwe image in de reserve schrijft voordat deze wordt omgeschakeld.

PSRAM

Schakel PSRAM alleen in als de module dit fysiek heeft. Het inschakelen ervan op een module zonder PSRAM zal opstart-fouten of een stroom van fouten op de seriële uitvoer veroorzaken. Op de S3 moet u ook kiezen tussen QSPI en OPI, en dit verkeerd doen veroorzaakt dezelfde symptomen. Controleer het module-onderdeelnummer als u het niet zeker weet. De C6 heeft helemaal geen PSRAM-ondersteuning, dus de optie verschijnt niet.


Figuur 5: De board-opties onder het Tools-menu

Stap 6: Zoek de poort

Sluit het board aan en kijk onder Tools > Port. Op Windows krijgt u een COM-nummer. Op macOS ziet u iets dat begint met /dev/cu.usbmodem voor native USB of /dev/cu.usbserial voor een bridge chip. Op Linux zal het /dev/ttyACM0 of /dev/ttyUSB0 zijn.

Als er niets verschijnt, doorloop het in deze volgorde:

  1. Probeer een ander kabel. Dit lost het probleem vaker op dan alles anders.
  2. Probeer een andere USB-socket, bij voorkeur een rechtstreeks op de machine in plaats van via een hub.
  3. Controleer of het board een bridge chip heeft die een stuurprogramma nodig heeft.
  4. Open op Windows Device Manager en zoek naar een onbekend apparaat dat verschijnt en verdwijnt wanneer u het board aansluit.

Er is één gedrag met native USB dat iedereen de eerste keer verrast. De poort behoort tot de lopende sketch, dus verdwijnt bij reset en verschijnt een seconde of twee later opnieuw. Als u een sketch uploadt die vroeg crasht, kan de poort voor altijd verdwijnen totdat u het board handmatig in download-modus dwingt.

Stap 7: Download-modus forceren

Als het uploaden mislukt met een bericht over het niet kunnen verbinden, moet u de chip handmatig in zijn bootloader plaatsen. De volgorde is altijd hetzelfde:

  1. Houd de knop BOOT ingedrukt (soms aangeduid als IO0).
  2. Druk en laat de knop RESET los (soms aangeduid als EN of RST).
  3. Laat BOOT los.

Het board zit nu in zijn ROM-bootloader en wacht. Op een native USB-board zal het zich op dit moment als een ander serieel poort enumeren, dus ga terug naar Tools > Port en selecteer de nieuwe poort voordat u uploadt. Zodra het uploaden is voltooid, drukt u alleen RESET in om de sketch uit te voeren, en de originele poort keert terug.

Opmerkingen per chip

S2: het meest waarschijnlijk van de drie dat de handmatige knoppensequentie nodig is. Maak het jezelf tot gewoonte om het altijd te doen en je bespaart jezelf veel gemor.

S3: reset zichzelf meestal automatisch in download-modus via native USB, maar niet altijd, vooral niet als de vorige sketch USB uitschakelde of in setup crashte.

C6: over het algemeen goed gedrag. Als het weigert, geldt dezelfde knoppensequentie.


Figuur 6: BOOT- en RESET-knoppen - Op de Mercury is de POWER-knop RESET, en is de BUTTON de BOOT-knop bijvoorbeeld.

Stap 8: Een eerste sketch om de toolchain te bewijzen

Weersta de drang om te beginnen met knipperen. Op veel S3- en C6-development boards is de onboard LED een adresseerbaar RGB-type in plaats van een gewone, dus een standaard knipperend sketch doet helemaal niets en u vraagt zich af of het uploaden werkte. Voer in plaats daarvan iets af over serieel, want dat vertelt u dat de chip echt uw code uitvoert en bevestigt tegelijk de board-instellingen.

void setup() {
  Serial.begin(115200);
  delay(2000);   // laat de USB seriële poort opsommen voordat we afdrukken

  Serial.println();
  Serial.println("ESP32 is actief");
  Serial.print("Chip model  : ");
  Serial.println(ESP.getChipModel());
  Serial.print("Cores       : ");
  Serial.println(ESP.getChipCores());
  Serial.print("Flash bytes : ");
  Serial.println(ESP.getFlashChipSize());
  Serial.print("Vrij heap   : ");
  Serial.println(ESP.getFreeHeap());
}

void loop() {
  Serial.print("uptime ms: ");
  Serial.println(millis());
  delay(1000);
}

Klik op de pijl om te uploaden en open vervolgens de Serial Monitor met het vergrootglaspictogram in de rechterbovenhoek en stel de baudrate in op 115200. U zult zien dat de chip zichzelf rapporteert. Als de modelregel ESP32-S3 zegt en u een S3-board hebt geselecteerd, praat alles van de IDE naar de silicium correct.

De twee seconden vertraging aan het begin is opzettelijk. Met native USB duurt het even voor de host de poort opent na reset, en alles wat daarvoor wordt afgedrukt, gaat verloren. Vervang het niet door een bare while (!Serial); lus, want op een board dat op batterijen werkt zonder computer eraan zal dat voor altijd hangen. Als u correct wilt wachten, plaats u een timeout erop:

while (!Serial && millis() < 3000) {
  delay(10);
}

Stap 9: Bibliotheken installeren

De meeste sensoren en randapparaten hebben een bibliotheek nodig. Gebruik de bibliotheekbeheerder, het boekenpictogram in de linker werkbalk, of Sketch > Include Library > Manage Libraries. Zoeken, kiezen, installeren, en de IDE zal u aanbieden om eventuele afhankelijkheden ook in te brengen. Zeg ja tegen die.

Voor een bibliotheek die als ZIP-bestand is geleverd, gebruikt u Sketch > Include Library > Add .ZIP Library. Deze wordt uitgepakt in de bibliotheekenmap in uw schetsboek, en u kunt een map ook gewoon handmatig in die map plaatsen als u dat liever doet. Start de IDE opnieuw als een handmatig toegevoegde bibliotheek niet verschijnt.

Iets om in de gaten te houden: niet elke Arduino-bibliotheek werkt op de ESP32, en van degenen die dat doen, werken niet alle op alle drie chips. Alles wat direct in AVR-registers poke of de oudere ESP32 classic periferie aanneemt, kan weigeren te compileren op de C6 in het bijzonder, omdat het een RISC-V onderdeel is in plaats van Xtensa. Als een bibliotheek weigert te bouwen, controleer het issue tracker voordat u aanneemt dat uw setup kapot is.

Uw versies onder controle houden

Dit onderdeel wordt door bijna iedereen overgeslagen en veroorzaakt vervolgens zes maanden later problemen. De core-versie waartegen u bouwt, beïnvloedt timing, perifeergedrag en soms de betekenis van een API-aanroep. Een project dat vorig seizoen perfect bouwde en vloog, kan zich anders gedragen na een update.

Twee gewoonten zijn het waard om aan te kweken:

  • Noteer de core-versie en de bibliotheekversies die u hebt gebruikt, samen met de code. Een opmerking bovenaan het hoofdsketch-bestand is voldoende.
  • Update de core niet in het midden van een project tenzij u daar een reden voor hebt. Voltooien, verifiëren, dan bijwerken, dan opnieuw verifiëren voordat u erop rekent.

De boards manager laat u elke gepubliceerde versie uit de dropdown kiezen, niet alleen de nieuwste, dus terugkeren is eenvoudig als een update iets kapotmaakt.

Probleemoplossing

Symptoom Waarschijnlijke oorzaak en fix
Er verschijnt helemaal geen poort Kabel alleen voor laden, ontbrekend bridge-stuurprogramma, of een hub in de weg. Probeer eerst een bekende goede kabel.
Geen verbinding mogelijk, of een timeout bij het wachten op een pakketkop De chip is niet in download-modus. Gebruik de BOOT- en RESET-sequentie, selecteer vervolgens de poort die verschijnt opnieuw.
Upload succeeds maar de seriële monitor is leeg USB CDC On Boot is uitgeschakeld, of de baudrate is verkeerd, of u hebt afgedrukt voordat de poort opende.
Doorlopend herstarten met een rst reden afgedrukt op 115200 Meestal PSRAM ingeschakeld als er geen PSRAM is gemonteerd, de verkeerde PSRAM-modus op een S3, of een onjuiste flashgrootte.
Brownout-detector werd geactiveerd Onvoldoende voedingsstroom, vaak tijdens Wi-Fi-transmissie. Gebruik een betere voeding of een korter kabel.
Sketch te groot Schakel over naar een partitie-schema met een groter app-gebied.
De poort verdwijnt op het moment dat de sketch start De sketch crasht tijdens setup. Forceer download-modus en upload iets dat u weet dat goed werkt.
Alleen de Nano ESP32 verschijnt in de board-lijst U hebt Arduino ESP32 Boards geïnstalleerd in plaats van esp32 door Espressif Systems. Installeer ook het Espressif-pakket.
Board verschijnt niet in de lijst Core te oud, vooral voor de C6. Update naar 3.x of later.
Compilatiefouten direct na installatie van de core Onderbroken download. Verwijder het esp32-pakket in de boards manager en installeer het opnieuw.

Waar u vervolgens heen gaat

Zodra u seriële output werkend hebt, hebt u het moeilijkste deel achter u gelaten. Alles daarna is gewoon code. De voorbeelden die bij de core worden geleverd, zijn een goed beginpunt, en ze bevinden zich allemaal onder File > Examples zodra een ESP32-board is geselecteerd. Alleen de voorbeelden die relevant zijn voor de chip die u hebt gekozen, worden weergegeven, wat op zichzelf nuttig is wanneer u probeert uit te zoeken wat een bepaald onderdeel kan doen.

Als iets in deze gids niet overeenkomt met wat u ziet, zijn de board-instellingen de eerste plek om naar te kijken. Negen van de tien keer is het USB CDC On Boot, de flashgrootte, of de PSRAM-instelling.