Der ESP32 ist ein kostengünstiger Microcontroller der seit 2016 von der Firma Espressif vertrieben wird. Inzwischen gibt es unzählige Klone der MCU von anderen Firmen. Es gibt ihn in unterschiedlichen Bauformen und Konfigurationen, so dass für jedes Projekt das Passende dabei ist.

ESP32
Der ESP32 ist vor allem wegen seiner vielfältigen Kommunikationskanäle und der geringen Leistungsaufnahme beliebt. Dem Arduino Uno fehlte das Wifi Modul. Außerdem war er für einen Microcontroller relativ groß. Mit dem ESP32 hat Espressif diese Lücke geschlossen. Dabei hat sie auf eine Kompatibilität zur Arduino IDE geachtet, so dass wir keine neue Software zur Programmierung benötigen.
In diesem Post verwende ich einen Espressif ESP32-WROOM devkit von AZ-Delivery und einen diymore ESP32-WROOM NodeMCU. Beide wurden mit vorgelöteten Headern geliefert.
Der doppelkernige 32-Bit Prozessor von Xtensa ist standardmäßig mit 240MHz getaktet, kam aber auf bis zu 80 MHz herunter getaktet werden, um Strom zu sparen. Die bis zu 16MB Hauptspeicher sind sehr viel großzügiger bemessen als beim Arduino oder Pico.
Die meiste Fläche auf der Platine belegt der SoC, er wirkt etwas klobig, allerdings sitzt unter seine Abdeckung auch noch der Temperatursensor und das WLAN-Modul.
Abmessung | 69 * 26mm |
---|---|
CPU | Xtensa® 32-bit LX6 |
Takt | 80 – 240MHz |
Betriebsspannung | 3,3V |
RAM | 520kB SRAM |
Flash | 4/8/16MB |
ROM | 448kB |
WiFi | 802.11 b/g/n/d/e/i/k/r |
Bluetooth | v4.2 BR/EDR and BLE |
GPIO | 26 Pins |
I²C | 2 |
SPI | 3 |
UART | 2 |
PWM | 16 |
Buttons | Reset, Boot |

Sensoren
Ein ESP32 bringt in manchen Bauformen zwei Sensoren mit, die direkt im CPU Chip integriert sind.
HallSensor
Der Hallsensor misst Magnetfelder in der Nähe des ESP32. Er reagiert auf Änderungen in der Magnetfeldstärke, die durch Magneten oder elektromagnetische Felder verursacht werden.
Mein ESP32 Modell scheint diesen aber nicht integriert zu haben, zumindest konnte ich bei allen Versuchen ihn nicht programmatisch erreichen.
Temperatursensor
Der Temperatursensor misst die Temperatur des Mikrocontrollers. Er ist hauptsächlich für die Überwachung der Chip-Temperatur gedacht und weniger für Umgebungstemperaturen geeignet. Dieses Sketch läuft auf dem ESP2 von AZ-Delivery.
void setup() {
Serial.begin(9600);
}
extern "C" {
uint8_t temprature_sens_read(); // ESP32-Sensor auslesen
}
void loop() {
int temp = temprature_sens_read(); // Rohwert (in °C nahe Chip-Kern)
Serial.println("Chip-Temperatur: " + String(temp) + " °C");
}
Der Sketch gibt die Temperatur des Chips beständig aus.

Ampelbeispiel
Ich baue mein Ampelbeispiel mit dem diymore Board auf und verbinde die LED wie folgt:
- rot Pin 15
- gelb Pin 2, dies ist gleichzeitig die onboard LED
- grün Pin 4
- Masse Pin 14
int ledRot = 15;
int ledGelb = 2;
int ledGruen = 4;
boolean blinkmode = false;
int phase = 1;// Ampelphase
void setup() {
Serial.begin(9600);
// put your setup code here, to run once:
pinMode(ledRot, OUTPUT);
pinMode(ledGelb, OUTPUT);
pinMode(ledGruen, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if(blinkmode) {
// Blinkmodus
digitalWrite(ledRot, HIGH);
digitalWrite(ledGelb, HIGH);
digitalWrite(ledGruen, HIGH);
delay(1500);
digitalWrite(ledRot, LOW);
digitalWrite(ledGelb, LOW);
digitalWrite(ledGruen, LOW);
delay(200);
}
else {
// Ampelmodus
switch(phase) {
case 1: // Phase rot
digitalWrite(ledRot, HIGH);
digitalWrite(ledGelb, LOW);
digitalWrite(ledGruen, LOW);
delay(1500);
phase = 2;
break;
case 2: // Phase Rot/Gelb
digitalWrite(ledRot, HIGH);
digitalWrite(ledGelb, HIGH);
digitalWrite(ledGruen, LOW);
delay(1000);
phase = 3;
break;
case 3: // Phase Grün
digitalWrite(ledRot, LOW);
digitalWrite(ledGelb, LOW);
digitalWrite(ledGruen, HIGH);
delay(2000);
phase = 4;
break;
case 4: // Phase Gelb
digitalWrite(ledRot, LOW);
digitalWrite(ledGelb, HIGH);
digitalWrite(ledGruen, LOW);
delay(1500);
phase = 1;
break;
}
}
}
Der Code unterscheidet sich vom Arduino R4 lediglich in den gewählten Pins. Der ESP32 sitzt etwas unorthodox auf dem Breadboard, damit ich mehr Platz beim Stecken der Jumperkabel habe.

Fazit
Der ESP32 ist zu Recht einer der beliebtesten MCU. Er kommt in allen denkbaren Konfigurationen für die unterschiedlichsten Anwendungszwecke daher. Seine Kompatibilität zur Arduino IDE macht den Umstieg besonders einfach.