ESP32
Allgemeines
Auf Grund der vielen Varianten des ESP32 habe ich mir hier ein paar kleine Entscheidungshilfen zusammengetragen.
Eine sehr hilfreiche Variantenuebersicht findet man hier.
Auch diese Vergleichsseite kann helfen.
PINOUT
Da muss jetzt ein wenig aufpassen.
PINout Tabellen und Listen findet man viele. Nicht nur, dass man die verschiedenen Varianten des ESP32 unterscheiden muss auch die Boards haben verschiedene Layouts.
- Pinout des ESP-Chips -> 1
- Pinout des Modulboards -> 2
- Pinout des Projectboards -> 3
- Pinout des Breakout-Boards -> 4
1) Der ESP-32-DOWD-V3 hat 48 Pins + einen GND-Pin. Die Namen und Bedeutungen der 48 Anschluesse findet man im Datasheet.
2) Das Modulboard besitzt 38 (14 + 10 + 14) Pins. Es traegt unter dem Cover im Wesentlichen den ESP32-Chip ein SPI-Flash (GD25Q32C), einen Quarz und die PCB-Antennen. Nicht alle Pins der MCU sind nach auszen gefuehrt.[1]
3) Das Project-Board besitzt 30 Pins (2 Reihen zu 15 Pins). Neben dem Modulboard besitzt das Board zusaetzlich noch einen 3.3 V Spannungsregler (AMS1117) einen seriellen Kommunikationbaustein (CH340G) und 2 Taster EN und BOOT. Der USB-C Anschluss dient der Spannungsversorgung und Kommunikation.
4) Ein Breakout-Board erweitert die Anschluesse der Project-Boards. Somit sind die Pins leichter anschlieszbar. Zusaetzlich beitet das Board idR auch noch eine Spannungsaufbereitung, dass im Nutzbetrieb die Spannung z.B. auch ueber einen Hohlstecker bereitgestellt werden kann.
Der EN-Button (Resettaster) zieht den EN Anschluss (Modul-Pin 3) auf GND. Der BOOT-Button zieht den G0 (Modul-Pin 25; GPIO0) auf GND.
- GPIO0 nicht herausgefuehrt -> BOOT
- GPIO1 -> 28
- GPIO2 -> 19
- GPIO3 -> 27
- GPIO4 -> 20
- GPIO5 -> 23
- GPIO6 SD_CLK nicht herausgefuehrt
- GPIO7 SD_DATA0 nicht herausgefuehrt
- GPIO8 SD_DATA1 nicht herausgefuehrt
- GPIO9 SD_DATA2 nicht herausgefuehrt
- GPIO10 SD_DATA3 nicht herausgefuehrt
- GPIO11 SD_CMD nicht herausgefuehrt
- GPIO12 -> 12
- GPIO13 -> 13
- GPIO14 -> 11
- GPIO15 -> 18
- GPIO16 -> 21
- GPIO17 -> 22
- GPIO18 -> 24
- GPIO19 -> 25
- GPIO20 gibt es nicht
- GPIO21 -> 26
- GPIO22 -> 29
- GPIO23 -> 30
- GPIO24 gibt es nicht
- GPIO25 -> 8
- GPIO26 -> 9
- GPIO27 -> 10
- GPIO28 gibt es nicht
- GPIO29 gibt es nicht
- GPIO30 gibt es nicht
- GPIO31 gibt es nicht
- GPIO32 32K_XP -> 6
- GPIO33 32K_XN -> 7
- GPIO34 VDET_1 -> 4
- GPIO35 VDET_2 -> 5
- GPIO36 SENSOR_VP -> 2
- GPIO37 SENSOR_CAPP -> nicht herausgefuehrt
- GPIO38 SENSOR_CAPN -> nicht herausgefuehrt
- GPIO39 SENSOR_VN -> 3
GPIO vs RTCGPIO
Kurz gesagt: gpio = normaler Alltags-GPIO, rtc_gpio = Spezial-GPIO für Sleep, Low-Power & Wakeup. Aber der Teufel steckt im Detail 👇
🧱 gpio (Standard-GPIO)
Das ist die normale GPIO-Schnittstelle des ESP32.
Eigenschaften
- Funktioniert im normalen Betrieb
- Volle Features:
- Input / Output
- Pull-Up / Pull-Down
- Interrupts
- GPIO-Matrix (fast jeder Pin kann fast alles)
- Nicht aktiv im Deep Sleep
Typische Verwendung
- LEDs
- Taster
- SPI, I²C, UART
- PWM, etc.
API
gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);
gpio_set_level(GPIO_NUM_2, 1);
🌙 rtc_gpio (RTC / Low-Power GPIO)
Diese GPIOs hängen an der RTC-Domain (Real-Time-Controller).
Eigenschaften
- Bleiben aktiv im Deep Sleep
- Können den ESP aufwecken
- Sehr geringer Stromverbrauch
- Nicht alle GPIOs sind RTC-fähig
- Weniger Features als normale GPIOs
Typische Verwendung
- Wake-Up-Pins
- Taster zum Aufwecken
- Sensoren mit extrem niedrigem Strombedarf
API
rtc_gpio_init(GPIO_NUM_0);
rtc_gpio_set_direction(GPIO_NUM_0, RTC_GPIO_MODE_INPUT_ONLY);
🧭 Welche Pins sind RTC-fähig?
Beim klassischen ESP32 z. B.:
| GPIO | RTC-fähig |
|---|---|
| GPIO 0 | ✅ |
| GPIO 2 | ✅ |
| GPIO 4 | ✅ |
| GPIO 12–15 | ✅ |
| GPIO 25–27 | ✅ |
| GPIO 32–39 | ✅ |
❌ Andere GPIOs → kein rtc_gpio möglich
⚠️ Wichtige Unterschiede auf einen Blick
| Merkmal | gpio
|
rtc_gpio
|
|---|---|---|
| Aktiv im Normalbetrieb | ✅ | ✅ |
| Aktiv im Deep Sleep | ❌ | ✅ |
| Kann ESP aufwecken | ❌ | ✅ |
| Interrupts | ✅ | ❌ |
| GPIO-Matrix | ✅ | ❌ |
| Stromverbrauch | höher | sehr niedrig |
| Anzahl Pins | viele | wenige |
😬 Typische Stolperfallen
- ❌
rtc_gpiofür normale IO verwenden → unnötig kompliziert - ❌ GPIO nicht RTC-fähig → Code kompiliert, funktioniert aber nicht
- ❌ Pull-Ups im Deep Sleep vergessen → Wakeup klappt nicht
🧪 Praxisbeispiel: Taster weckt ESP aus Deep Sleep
esp_sleep_enable_ext0_wakeup(GPIO_NUM_0, 0); // LOW = Wakeup
rtc_gpio_pullup_en(GPIO_NUM_0);
esp_deep_sleep_start();
🧠 Merksatz (für die Praxis)
Alles, was im Sleep noch leben muss →
rtc_gpioAlles, was schnell, flexibel und normal ist →gpio
ESPTool
worker:/home/chris/.platformio/packages/tool-esptoolpy # python3.12 esptool.py chip_id esptool.py v4.9.0 Found 3 serial ports Serial port /dev/ttyUSB0 Connecting..... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting..... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: f4:2d:c9:XX:XX:XX Uploading stub... Running stub... Stub running... Warning: ESP32 has no Chip ID. Reading MAC instead. MAC: f4:2d:c9:XX:XX:XX Hard resetting via RTS pin...