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.

Beschriftetes Diagramm eines ESP32-Entwicklungsboards: das ESP32-WROOM-Modul mit seiner Leiterplattenantenne für WLAN und Bluetooth, ein USB-Anschluss für Versorgung und Flashen, EN- und BOOT-Taster sowie zwei Reihen GPIO-Stiftleisten inklusive Versorgung, ADC, PWM und TX/RX.
Das ESP32-Entwicklungsboard: das WROOM-Modul mit WLAN-/Bluetooth-Antenne, USB für Versorgung und Flashen sowie GPIO-Leisten an beiden Längskanten. SVG herunterladen

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

Quellen