Bauteil · Controller
ESP32
ESP32: schneller Dual-Core-Mikrocontroller mit WLAN und Bluetooth – ein Arduino, mit dem man drahtlos sprechen kann. Was er kann und wann man ihn wählt.
Was es ist
Der ESP32 ist ein Mikrocontroller, der sich anfühlt wie ein Arduino mit eingebautem Funk und gelösten Bremsen. Er hat einen Dual-Core-32-Bit-Prozessor, der um ein Vielfaches schneller läuft als ein Uno, weit mehr Speicher – und als Hauptmerkmal WLAN und Bluetooth eingebaut. Diese Kombination erklärt, warum er Hobbyrobotik und IoT dominiert: Ein Roboter kann eine Webseite hosten, über die er sich selbst steuern lässt, Sensordaten ans Telefon streamen oder Befehle über Bluetooth empfangen – alles aus einem billigen Chip.
Entscheidend: Man programmiert ihn mit derselben Arduino-IDE und Sprache, die man vielleicht schon kennt. Das Gelernte vom Uno überträgt sich direkt; man gewinnt schlicht Verbindung und Spielraum dazu.
Wie es funktioniert
Im Kern arbeiten zwei Xtensa-CPU-Kerne mit bis zu 240 MHz. Zwei Kerne zählen für Roboter: Ein Kern kann die Regelschleife mit stabilem Timing fahren, während der andere WLAN bedient – das Netzwerk blockiert also nie die Räder. Um die CPU sitzen die üblichen Mikrocontroller-Peripherien – GPIO, PWM-Kanäle, mehrere ADCs, I²C, SPI, UART – plus Funk.
Die wichtigste praktische Tatsache ist die Spannung: Der ESP32 läuft mit 3,3-V-Logik, nicht mit den 5 V des Uno. Seine Pins sind nicht 5-V-tolerant. Ein 5-V-Sensorausgang – etwa der Echo-Pin eines HC-SR04 – muss auf 3,3 V heruntergeteilt werden, bevor er einen ESP32-Pin berührt, sonst droht Schaden. Dieser eine Unterschied erwischt fast jeden Umsteiger vom Uno.
Wann man ihn verwendet
Zum ESP32 greifen, wenn der Roboter drahtlos sein muss – Fernsteuerung, Telemetrie, ein Browser-Dashboard –, oder wenn er Rechenleistung braucht, die ein 8-Bit-Board nicht stemmt, etwa mehr Sensoren verarbeiten oder leichte Logik direkt am Gerät ausführen. Die ESP32-CAM-Variante bringt eine Kamera dazu und eröffnet einfache Visionsprojekte.
Beim Arduino Uno bleiben, wenn man Grundlagen lernt, wenn 5-V-Toleranz die Verdrahtung sicherer macht, oder wenn das Projekt einfach und offline ist – ein paar Motoren einer Linie nachzufahren braucht kein WLAN.
Verdrahtung und Fallstricke
- Es sind 3,3 V, und nicht 5-V-tolerant. Jedes 5-V-Signal per Pegelwandler anpassen, bevor es ein GPIO erreicht. Das ist der häufigste Weg, wie Anfänger einen ESP32 beschädigen.
- WLAN plus Motoren kann das Board in Brownout treiben. Der Funk zieht scharfe Stromspitzen; eine schwache gemeinsame Versorgung mit Motoren verursacht Resets. Motoren getrennt über einen Motortreiber versorgen und dem ESP32 eine stabile 3,3-V-Schiene geben.
- Nicht jeder Pin ist frei. Mehrere GPIOs sind nur Eingänge, an Startverhalten gebunden oder mit dem internen Flash verbunden. Vor dem Belegen eine Pinbelegung prüfen, sonst startet das Board nicht.
- ADC-Eigenheiten. Einer der beiden ADCs ist bei aktivem WLAN nicht verfügbar, und die Messwerte sind weniger linear als beim Uno – bei Genauigkeitsbedarf kalibrieren.
Die Pins, die man nicht verwenden darf
Ein ESP32 hat rund 34 GPIOs, und das ist wirklich irreführend – denn eine erhebliche Zahl davon ist unbrauchbar, nur bedingt brauchbar oder verhindert den Start des Boards. Diese Tabelle lohnt sich vor jeder Verdrahtung zu lesen.
| Pins | Status | Warum |
|---|---|---|
| GPIO 6–11 | Nie verwenden | Mit dem internen SPI-Flash verbunden. Benutzung verhindert den Start |
| GPIO 0 | Bootmodus | Muss bei Reset HIGH sein, sonst geht das Board in den Flashmodus |
| GPIO 2 | Bootmodus | Muss bei Reset offen oder LOW sein |
| GPIO 12 | Bootmodus | Muss bei Reset LOW sein – ein Pull-up hier verhindert den Start |
| GPIO 15 | Bootmodus | HIGH bei Reset schaltet das Startprotokoll stumm |
| GPIO 34–39 | Nur Eingänge | Keine Ausgangstreiber und auch keine internen Pull-ups |
| GPIO 1, 3 | Seriell (TX0/RX0) | Vom USB-Programmer belegt |
Die sichersten Allzweckpins auf einem Standard-30-Pin-Entwicklungsboard sind GPIO 4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33. Dort anfangen, und man umgeht jede Falle oben.
Die Bootmodus-Pins sind der verwirrendste Fehler, weil das Board perfekt funktioniert, bis man etwas anschließt. Ein Pull-up-Widerstand an GPIO 12 – für einen Taster völlig vernünftig – heißt: Das Board startet schlicht nicht, ohne Fehler und ohne serielle Ausgabe.
Die Nur-Eingangs-Pins erwischen Leute anders: GPIO 34–39 haben keinen internen Pull-up oder Pull-down, also schwebt ein Taster dort und liest zufällig. Sie brauchen einen externen Widerstand.
3,3 V, und was das kostet
Die Pins des ESP32 sind nicht 5-V-tolerant, und das ist der häufigste Weg, wie Leute einen beschädigen. Jedes 5-V-Signal braucht Behandlung:
| Situation | Lösung |
|---|---|
| 5-V-Sensorausgang → ESP32-Eingang | Spannungsteiler (1 kΩ / 2 kΩ) oder Pegelwandler |
| ESP32-Ausgang → 5-V-Geräteeingang | Meist in Ordnung – die meiste 5-V-Logik liest 3,3 V als HIGH |
| Bidirektionales I²C zwischen 5 V und 3,3 V | Ein echter bidirektionaler Pegelwandler (BSS138-basiert) |
| 5-V-I²C-Bauteil mit eigenen 3,3-V-Pull-ups | Funktioniert oft direkt – prüfen, wohin die Pull-ups gehen |
Die Asymmetrie lohnt sich zu verinnerlichen: Ausgänge sind meist sicher, Eingänge meist nicht. Der Echo-Pin eines HC-SR04 ist der klassische Fall – er treibt volle 5 V in einen Pin mit 3,6 V Absolutmaximum.
Das ADC-Problem
Der ADC des ESP32 ist die schwächste Stelle des Chips, und etwas anderes vorzugeben kostet Stunden.
ADC2 funktioniert nicht bei aktivem WLAN. Der Funk nutzt ihn. Jedes analogRead an einem ADC2-Pin liefert Schrott oder blockiert, sobald WLAN verbindet – und da ein drahtloser Roboter der ganze Grund für einen ESP32 ist, scheidet ADC2 fast vollständig aus. Nur ADC1 verwenden: GPIO 32–39.
Die Kennlinie ist nicht linear. Der 12-Bit-ADC ist an beiden Enden merklich nichtlinear, und Messwerte unter etwa 0,1 V sowie über grob 3,1 V sind komprimiert. Der Chip hat Werkskalibrierungsdaten, die die esp_adc_cal-Funktionen des ESP-IDF anwenden; das Arduino-analogRead nutzt sie standardmäßig nicht.
| Dämpfung | Nutzbarer Eingangsbereich |
|---|---|
ADC_0db |
0–1,1 V |
ADC_2_5db |
0–1,5 V |
ADC_6db |
0–2,2 V |
ADC_11db (Standard) |
0–3,3 V, am wenigsten linear |
Wer echte Genauigkeit aus einem analogen Sensor braucht, für den ist ein externer I²C-ADC wie ein ADS1115 die pragmatische Antwort. Er kostet wenige Euro und beseitigt das ganze Problem.
Versorgen ohne Brownouts
Hier scheitern ESP32-Roboterprojekte am häufigsten, und die Ursache ist nicht offensichtlich.
Der Funk zieht keinen gleichmäßigen Strom – er zieht ihn in Stößen. Ein Sendestoß kann 500 mA für wenige hundert Mikrosekunden bei 40–80 mA Mittelwert sein. Eine Versorgung, die am Multimeter gut aussieht, kann bei diesen Spitzen trotzdem einbrechen, und der ESP32 antwortet mit Reset und der Meldung Brownout detector was triggered.
| Regel | Warum |
|---|---|
| Mindestens 500 mA liefern, ideal 1 A | Spitze zählt, nicht Mittelwert |
| 100 µF oder mehr nahe am 3,3-V-Pin der Platine | Lokale Ladung für den Stoß |
| Nie eine Schiene mit Motoren teilen | Motoreinschaltstrom plus Funkstoß ist ein garantierter Reset |
| Ein gutes USB-Kabel verwenden | Der Widerstand eines dünnen Kabels verwandelt einen Stoß in Brownout |
| Den 5-V-Pin dem 3,3-V-Pin vorziehen | Der Bordregler behandelt die Transienten |
Letzteres lohnt sich klar auszusprechen: 5 V in den VIN-/5V-Pin einspeisen und den Bordregler 3,3 V erzeugen lassen. 3,3 V direkt einzuspeisen umgeht Regler und Glättung – genau das, wofür man ihn haben will.
Zwei Kerne, und wie man sie wirklich nutzt
Der Dual-Core ist der echte Vorteil des ESP32 für Roboter, und das Arduino-Framework versteckt ihn – loop() läuft auf Kern 1, der WLAN-Stack auf Kern 0.
Man kann eine Task explizit an einen Kern binden:
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
}
Das ist das Muster, das einen ESP32 wirklich gut für Roboter macht statt nur vernetzt: eine Regelschleife mit hartem Timing auf einem Kern und ein Webserver auf dem anderen, der sie nicht blockieren kann. vTaskDelayUntil ist das wichtige Detail – anders als delay() gleicht es aus, wie lange der Schleifenkörper brauchte, sodass die Periode exakt 10 ms bleibt.
Fehlersuche
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
Brownout detector was triggered |
Versorgung bricht bei Funkstößen ein | Steifere Versorgung, 100 µF lokal, 5 V statt 3,3 V einspeisen |
| Board startet gar nicht | Etwas zieht GPIO 0, 2 oder 12 | Die Bootmodus-Pins freigeben |
analogRead liefert Schrott bei WLAN |
Ein ADC2-Pin wird genutzt | Zu ADC1 wechseln: GPIO 32–39 |
| Ein Pin wird nie high | GPIO 34–39 sind nur Eingänge | Anderen Pin verwenden |
| Taster an GPIO 35 liest zufällig | Keine internen Pull-ups an 34–39 | Externen Widerstand hinzufügen |
| Upload scheitert, braucht BOOT-Taster | Auto-Reset-Schaltung fehlt beim Clone | BOOT beim Uploadbeginn halten oder 10-µF-Kondensator an EN |
| Zufällige Resets unter Motorlast | Gemeinsame Versorgungsschiene | Getrennte Versorgungen, gemeinsame Masse |
| Sensor nach Verdrahtung beschädigt | 5 V an einem 3,3-V-Pin | Pegelwandeln – und prüfen, ob der Pin noch arbeitet |
| WLAN bricht bei laufenden Motoren ab | Funkstörung oder Versorgungseinbruch | Antenne weg von Motorleitungen legen; entkoppeln |
ESP32 oder Arduino Uno?
| Uno | ESP32 | |
|---|---|---|
| Geschwindigkeit | 16 MHz, 8-Bit | Bis zu 240 MHz, Dual-Core 32-Bit |
| SRAM | 2 KB | 520 KB |
| Logik | 5 V, gutmütig | 3,3 V, unversöhnlich |
| Drahtlos | Keins | WLAN und Bluetooth |
| Pinfallen | Fast keine | Mehrere, die den Start verhindern |
| Lernkurve | Alles funktioniert sofort | Vor der Verdrahtung die Pinbelegung lesen |
Beide nutzen dieselbe Sprache und IDE – das ist der Punkt: Der Umstieg kostet fast nichts an Code und einiges an Verdrahtungsdisziplin.
Die ehrliche Empfehlung: Auf einem Uno lernen, auf einem ESP32 bauen. Die 5-V-Toleranz des Uno und das völlige Fehlen von Pinfallen heißen: Frühe Fehler sind verkraftbar. Sobald man weiß, was eine Regelschleife ist und warum Massen gemeinsam sein müssen, liefert der ESP32 fünfzehnfache Taktrate, 260-fachen Speicher und Funk – für etwa dasselbe Geld.
Die ESP32-CAM-Variante lohnt sich separat zu kennen: Sie bringt Kamera und SD-Steckplatz für wenige Euro dazu und ist mit Abstand der billigste Weg in Robotervision – zum Preis fast keiner freien GPIOs mehr.
Den Graphen erkunden
Verwendet in diesen Bauprojekten
Projekte, Lernpfade und Simulatoren, die ESP32 verwenden.
Vergleich
Alternativen
Fragen
FAQ zu ESP32
Was ist der ESP32?
Der ESP32 ist ein preiswerter Mikrocontroller mit Dual-Core-Prozessor und eingebautem WLAN und Bluetooth. Man kann ihn sich als Arduino vorstellen, der deutlich schneller ist und drahtlos mit Netzwerken und Telefonen sprechen kann – weshalb er die meisten vernetzten Robotik- und IoT-Projekte antreibt.
Wofür wird der ESP32 verwendet?
Überall dort, wo ein Projekt drahtlose Verbindung oder mehr Rechenleistung braucht, als ein 8-Bit-Board bietet: WLAN-gesteuerte Roboter, browserbasierte Dashboards, Bluetooth-Fernsteuerung, Sensorknoten, die in die Cloud melden, und Kameraprojekte mit der ESP32-CAM-Variante.
Ist der ESP32 besser als der Arduino Uno?
Bei den reinen Daten ja – er ist weit schneller, hat mehr Speicher und bringt Funk mit, das dem Uno fehlt. Doch der Uno ist 5 V und verzeiht Verdrahtungsfehler eher, während der ESP32 mit 3,3 V läuft und weniger tolerant ist. Zum Lernen der Grundlagen ist der Uno gutmütiger; für vernetzte oder rechenhungrige Roboter gewinnt der ESP32.
Was ist der Unterschied zwischen Arduino und ESP32?
Arduino heißt meist ein 8-Bit-, 5-V-, Single-Core-Board ohne Funk. Der ESP32 ist ein 32-Bit-, 3,3-V-, Dual-Core-Board mit eingebautem WLAN und Bluetooth. Verwirrenderweise programmiert man beide mit der Arduino-IDE – „Arduino“ kann also Sprache und Werkzeuge ebenso meinen wie die klassischen Boards.
Nutzt der ESP32 C oder C++?
Der ESP32 wird in C++ (mit viel C darin) programmiert – mit dem Arduino-Framework oder Espressifs eigenem ESP-IDF. Wer Arduino-Sketches geschrieben hat, dessen Sprache und Struktur übertragen sich direkt – man gewinnt vor allem WLAN, Bluetooth und mehr Pins dazu.
Kann man den ESP32 mit der Arduino-IDE programmieren?
Ja. Nach Hinzufügen des ESP32-Boardpakets im Boardverwalter der Arduino-IDE schreibt und lädt man Sketches genau wie für einen Uno hoch, und vorhandene Bibliotheken funktionieren weitgehend. Das ist der leichteste Einstieg, bevor man für fortgeschrittene Funktionen zu ESP-IDF wechselt.
Weiterführende Literatur