Component · Controller
ESP32
De ESP32 is een snelle dual-core microcontroller met ingebouwde Wi-Fi en Bluetooth: een Arduino voor draadloos contact. Wat hij doet en wanneer je hem kiest.
Wat het is
De ESP32 is een microcontroller die aanvoelt als een Arduino met een radio erop en de handrem eraf. Hij heeft een 32-bits processor met twee kernen die veel sneller werkt dan een Uno, veel meer geheugen en, het belangrijkste, ingebouwde Wi-Fi en Bluetooth. Die combinatie laat hem de hobbyrobotica en IoT domineren: één betaalbare chip kan een webpagina hosten om een robot te besturen, sensorgegevens naar je telefoon sturen of commando’s via Bluetooth ontvangen.
Cruciaal is dat je hem programmeert met dezelfde Arduino IDE en taal die je mogelijk al kent. Wat je op een Uno hebt geleerd gaat rechtstreeks over; je krijgt alleen connectiviteit en ruimte voor meer.
Hoe het werkt
De ESP32 heeft twee Xtensa-kernen met een kloksnelheid tot 240 MHz. Twee kernen zijn belangrijk voor robots: de ene kan je regellus met stabiele timing uitvoeren terwijl de andere Wi-Fi verwerkt, zodat de wielen niet door netwerkverkeer worden vertraagd. Rond de CPU zitten de gebruikelijke microcontrollerperiferieën, GPIO, PWM-kanalen, meerdere ADC’s, I²C, SPI en UART, plus de radio.
Het belangrijkste praktische feit is de spanning: de ESP32 werkt op 3,3V-logica, niet op de 5 V van de Uno. De pinnen zijn niet 5V-tolerant. Een uitgangssignaal van 5 V, zoals de Echo-pin van een HC-SR04, moet omlaag naar 3,3 V voordat het een ESP32-pin bereikt, anders riskeer je beschadiging. Dit ene verschil laat bijna iedereen struikelen bij de overstap vanaf een Uno.
Wanneer je hem gebruikt
Kies een ESP32 wanneer je robot draadloos moet zijn, bijvoorbeeld voor afstandsbediening, telemetrie of een dashboard in de browser, of wanneer je rekenkracht nodig hebt die een 8-bits bord niet kan bieden, bijvoorbeeld voor meer sensoren of lichte logica op het apparaat. De variant ESP32-CAM voegt een camera toe en maakt eenvoudige beeldverwerkingsprojecten mogelijk.
Kies een Arduino Uno wanneer je de basis leert, wanneer 5V-tolerantie veiliger bedraden maakt of wanneer het project eenvoudig en offline is; twee motoren die een lijn volgen, hebben daar geen Wi-Fi voor nodig.
Bedrading en valkuilen
- Hij werkt op 3,3 V en is niet 5V-tolerant. Gebruik een spanningsniveau-omzetter voor elk 5V-signaal voordat het een GPIO bereikt. Dit is de meest voorkomende manier waarop beginners een ESP32 beschadigen.
- Wi-Fi en motoren kunnen brown-out van het bord veroorzaken. De radio veroorzaakt scherpe stroompieken; een zwakke voeding delen met motoren veroorzaakt resets. Voed motoren apart via een motordriver en geef de ESP32 een stabiele 3,3V-rail.
- Niet elke pin is vrij. Verschillende GPIOs zijn alleen ingangen, gekoppeld aan het opstartgedrag of verbonden met het interne flashgeheugen. Controleer vooraf de pindindeling; een verkeerd toegewezen pin kan verhinderen dat het bord opstart.
- Eigenaardigheden van de ADC. Een van de twee ADC’s is niet beschikbaar terwijl Wi-Fi actief is, en de metingen zijn minder lineair dan die van een Uno; kalibreer als je nauwkeurigheid nodig hebt.
Pinnen die je niet mag gebruiken
Een ESP32 heeft ongeveer 34 GPIOs en dat is misleidend: een aanzienlijk deel is onbruikbaar, is alleen onder bepaalde voorwaarden bruikbaar of kan het opstarten verhinderen. Deze tabel moet je lezen voordat je iets bedraadt.
| Pinnen | Status | Waarom |
|---|---|---|
| GPIO 6–11 | Nooit gebruiken | Verbonden met het interne SPI-flashgeheugen. Als je deze pinnen gebruikt, kan het bord niet meer opstarten |
| GPIO 0 | Opstartmodus | Moet bij reset HIGH zijn, anders start het bord in flashmodus op |
| GPIO 2 | Opstartmodus | Moet bij reset zwevend of LOW zijn |
| GPIO 12 | Opstartmodus | Moet bij reset LOW zijn; een pull-upweerstand hier verhindert het opstarten |
| GPIO 15 | Opstartmodus | HIGH bij reset onderdrukt de berichten tijdens het opstarten |
| GPIO 34–39 | Alleen ingang | Geen uitgangsdriver en ook geen interne pull-up- of pull-downweerstanden |
| GPIO 1, 3 | Serial (TX0/RX0) | Gebruikt door de USB-programmer |
De veiligste algemene pinnen op een standaard 30-pins ontwikkelbord zijn GPIO 4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33. Begin daarmee en je vermijdt elke valkuil hierboven.
De opstartpins geven de verwarrendste storing, omdat het bord perfect werkt totdat je er iets aan hangt. Een pull-upweerstand op GPIO 12, volstrekt logisch voor een knop, betekent dat het bord eenvoudig niet start, zonder fout of seriële uitvoer.
De pinnen die alleen ingang zijn falen anders: GPIO 34–39 hebben geen interne pull-up- of pull-downweerstand, dus een knop daarop zweeft en leest willekeurige waarden. Ze vereisen een externe weerstand.
3,3 V en wat dat je kost
De pinnen van de ESP32 zijn niet 5V-tolerant, en dit is de meest voorkomende manier waarop mensen hem beschadigen. Elk 5V-signaal vraagt om behandeling:
| Situatie | Oplossing |
|---|---|
| 5V-sensoruitgang → ESP32-ingang | Spanningsdeler (1 kΩ / 2 kΩ) of spanningsniveau-omzetter |
| ESP32-uitgang → ingang van een 5V-apparaat | Meestal geen probleem; de meeste 5V-logica leest 3,3 V als HIGH |
| Bidirectionele I²C tussen 5 V en 3,3 V | Een echte bidirectionele spanningsniveau-omzetter (op basis van BSS138) |
| 5V-I²C-apparaat met eigen pull-upweerstanden op 3,3 V | Werkt vaak direct; controleer waar de pull-upweerstanden zitten |
Onthoud de asymmetrie: uitgangen zijn meestal veilig, ingangen meestal niet. De Echo-pin van een HC-SR04 is het klassieke voorbeeld: die stuurt volledige 5 V naar een pin met een absoluut maximum van 3,6 V.
Het ADC-probleem
De ADC van de ESP32 is het zwakste onderdeel van de chip, en doen alsof dat niet zo is kost uren.
ADC2 werkt niet terwijl Wi-Fi actief is. De radio gebruikt hem. Elke analogRead op een ADC2-pin
levert ongeldige waarden op of blokkeert zodra Wi-Fi verbinding maakt. Omdat een draadloze robot de hele reden is
om een ESP32 te gebruiken, valt ADC2 daarmee vrijwel volledig af. Gebruik alleen ADC1:
GPIO 32–39.
De respons is niet lineair. De 12-bits ADC is aan beide uiteinden duidelijk niet lineair en
waarden onder ongeveer 0,1 V en boven ruwweg 3,1 V worden samengedrukt. De chip bevat
fabriekskalibratiegegevens die de functies esp_adc_cal van ESP-IDF voor je toepassen; analogRead
van Arduino gebruikt die standaard niet.
| Verzwakking | Bruikbaar ingangsbereik |
|---|---|
ADC_0db |
0–1,1 V |
ADC_2_5db |
0–1,5 V |
ADC_6db |
0–2,2 V |
ADC_11db (standaard) |
0–3,3 V, minst lineair |
Heb je werkelijke nauwkeurigheid nodig van een analoge sensor, dan is een externe I²C-ADC zoals een ADS1115 de praktische oplossing. Die kost een paar dollar en neemt het hele probleem weg.
Voeding zonder brown-out
Hier falen ESP32-robotprojecten het vaakst, en de oorzaak is niet voor de hand liggend.
De radio verbruikt geen constante stroom, maar trekt deze in bursts. Een zendburst kan
500 mA gedurende enkele honderden microseconden vragen tegen een gemiddelde van 40–80 mA. Een
voeding die op een multimeter goed lijkt, kan tijdens die pieken toch inzakken, waarna de ESP32
reset met het bericht Brownout detector was triggered.
| Regel | Waarom |
|---|---|
| Voeding minstens 500 mA, liefst 1 A | De piek telt, niet het gemiddelde |
| Zet 100 µF of meer bij de 3,3V-pin van het bord | Buffert de stroompiek lokaal |
| Deel nooit een rail met motoren | Inschakelstroom van de motor plus radiostroom zorgt gegarandeerd voor reset |
| Gebruik een goede USB-kabel | De weerstand van een dunne kabel maakt van een burst een brown-out |
| Kies bij voorkeur de 5V-pin boven de 3,3V-pin | De spanningsregelaar op het bord verwerkt de transiënten |
Dat laatste punt moet duidelijk worden gezegd: voer 5 V toe op de VIN/5V-pin en laat de
spanningsregelaar op het bord er 3,3 V van maken. Rechtstreeks 3,3 V toevoeren omzeilt zowel de
spanningsregelaar als de filterwerking die de transienties dempt.
Twee kernen en hoe je ze echt gebruikt
De twee kernen zijn het belangrijkste voordeel van de ESP32 voor robots, maar het
Arduino-framework verbergt ze: je loop() draait op kern 1 en de Wi-Fi-stack op kern 0.
Je kunt een taak expliciet aan een kern toewijzen:
void controlLoop(void *param) {
const TickType_t period = pdMS_TO_TICKS(10); // exactly 100 Hz
TickType_t last = xTaskGetTickCount();
for (;;) {
readSensors();
updatePid();
driveMotors();
vTaskDelayUntil(&last, period); // no drift, unlike delay()
}
}
void setup() {
xTaskCreatePinnedToCore(
controlLoop, "control", 4096, nullptr,
2, // priority above the default
nullptr,
1); // core 1 — leave core 0 for Wi-Fi
}
Dit patroon maakt een ESP32 werkelijk goed voor robots in plaats van alleen verbonden: een
regellus met strikte timing op de ene kern en een webserver op de andere die hem niet kan tegenhouden.
vTaskDelayUntil is het belangrijke detail; anders dan delay() compenseert deze functie voor
de tijd die de lus heeft gekost, zodat de periode exact 10 ms blijft.
Problemen oplossen
| Symptoom | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
Brownout detector was triggered |
Voeding zakt in tijdens radiobursts | Stijvere voeding, lokaal 100 µF en voer 5 V in plaats van 3,3 V |
| Bord start helemaal niet op | Iets houdt GPIO 0, 2 of 12 in een verkeerde stand | Maak de opstartpins vrij |
analogRead geeft ongeldige waarden tijdens Wi-Fi |
Je gebruikt een ADC2-pin | Ga naar ADC1: GPIO 32–39 |
| Pin wordt nooit hoog | GPIO 34–39 zijn alleen ingang | Gebruik een andere pin |
| Knop op GPIO 35 leest willekeurig | Geen interne pull-ups op 34–39 | Voeg een externe weerstand toe |
| Uploaden mislukt en vereist de BOOT-knop | Auto-resetcircuit ontbreekt op de kloon | Houd BOOT ingedrukt terwijl het uploaden begint of voeg een 10 µF-condensator op EN toe |
| Willekeurige resets onder motorbelasting | Gedeelde voedingsrail | Gebruik aparte voedingen met een gemeenschappelijke massa |
| Sensor beschadigd na het bedraden | 5 V in een 3,3V-pin | Pas het spanningsniveau aan en controleer of de pin nog werkt |
| Wi-Fi valt weg tijdens het draaien van motoren | Radio-interferentie of inzakkende voeding | Verplaats de antenne weg van motorleidingen en ontkoppel de voeding |
ESP32 of Arduino Uno?
| Uno | ESP32 | |
|---|---|---|
| Snelheid | 16 MHz, 8-bit | Tot 240 MHz, 32-bit met twee kernen |
| SRAM | 2 KB | 520 KB |
| Logica | 5 V, vergevingsgezind | 3,3 V, veeleisend |
| Draadloos | Geen | Wi-Fi en Bluetooth |
| Pinvalkuilen | Vrijwel geen | Meerdere die het opstarten verhinderen |
| Leercurve | Alles werkt direct | Lees de pindindeling voordat je iets bedraadt |
Beide gebruiken dezelfde taal en IDE, en dat is het punt: de overstap kost je vrijwel niets in code, maar wel veel in bedradingsdiscipline.
De eerlijke aanbeveling: ** leer op een Uno en bouw met een ESP32.** De 5V-tolerantie en het volledige ontbreken van pinvalkuilen op de Uno maken vroege fouten herstelbaar. Zodra je weet wat een regellus is en waarom een gemeenschappelijke massa nodig is, biedt de ESP32 vijftien keer de kloksnelheid, 260 keer zoveel geheugen en een radio voor ongeveer dezelfde prijs.
De ESP32-CAM-variant verdient een eigen vermelding: dit bord voegt voor een paar dollar een camera en een SD-slot toe en is daarmee veruit de goedkoopste route naar robotbeeldverwerking. Daar staat tegenover dat er vrijwel geen GPIO meer over is.
Verken de graaf
Gebruikt in deze bouwprojecten
Projecten, leerroutes en simulators waarin de ESP32 voorkomt.
Vergelijken
Alternatieven
Vragen
FAQ over de ESP32
Wat is de ESP32?
De ESP32 is een betaalbare microcontroller met een processor met twee kernen en ingebouwde Wi-Fi en Bluetooth. Beschouw hem als een veel snellere Arduino die draadloos met netwerken en telefoons kan praten. Daarom voedt hij de meeste verbonden robotica- en IoT-projecten van stroom.
Waar wordt een ESP32 voor gebruikt?
Hij wordt gebruikt zodra een project draadloze connectiviteit of meer verwerkingsvermogen nodig heeft dan een 8-bits bord kan bieden: robots die via Wi-Fi worden bestuurd, webdashboards, Bluetooth-afstandsbediening, sensorknooppunten die naar de cloud rapporteren en cameraprojecten met de ESP32-CAM-variant.
Is de ESP32 beter dan de Arduino Uno?
Op zuivere specificaties wel: hij is veel sneller, heeft meer geheugen en bevat draadloze communicatie die de Uno mist. De Uno werkt echter op 5 V en verdraagt bedradingsfouten beter, terwijl de ESP32 op 3,3 V werkt en minder tolerant is. Voor de basis is de Uno eenvoudiger; voor verbonden of rekenintensieve robots wint de ESP32.
Wat is het verschil tussen Arduino en ESP32?
Met Arduino bedoel je meestal een 8-bits, 5V-bord met één kern en zonder radio. De ESP32 is een 32-bits, 3,3V-bord met twee kernen en ingebouwde Wi-Fi en Bluetooth. Verwarrend genoeg programmeer je beide met dezelfde Arduino IDE, dus 'Arduino' kan zowel de taal en tools als de klassieke borden betekenen.
Gebruikt de ESP32 C of C++?
De ESP32 wordt geprogrammeerd in C++ (met veel C) via het Arduino-framework of Espressif ESP-IDF. Als je al Arduino-sketches hebt geschreven, kun je direct overgaan naar dezelfde taal en structuur; je krijgt vooral Wi-Fi, Bluetooth en meer pinnen.
Kan ik de ESP32 programmeren met de Arduino IDE?
Ja. Voeg na installatie het ESP32-bordpakket toe aan de bordbeheer van de Arduino IDE. Daarna schrijf en upload je sketches precies zoals voor een Uno en werken bestaande bibliotheken grotendeels. Dit is de eenvoudigste manier om te beginnen voordat je voor geavanceerde functies naar ESP-IDF overstapt.
Verder lezen