ESP32

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

Allgemeines

Auf Grund der vielen Varianten des ESP32 habe ich mir hier ein paar kleine Entscheidungshilfen zusammengetragen.


PINOUT

PINout ESP32 Board
ENABLE/CHIP_PU
High:on; Low:off
EN D23 GPIO23 HS1_STROBE VSPID
RTC_GPIO0 ADC1_CH0 GPIO36 SENSOR_VP D22 GPIO22 SCL
RTC_GPIO3 ADC1_CH3 GPIO39 SENSOR_VN TX0 GPIO1 TX0
RTC_GPIO4 ADC1_CH6 GPIO34 D34 RX0 GPIO3 RX0
RTC_GPIO5 ADC1_CH7 GPIO35 D35 D21 GPIO21 SDADC1_CH
RTC_GPIO9 T9 ADC1_CH4 GPIO32 D32 D19 GPIO19 CIPO
RTC_GPIO8 T8 ADC1_CH5 GPIO33 D33 D18 GPIO18 SCK
RTC_GPIO6 DADC1_CHC1 ADC1_CH18 GPIO25 D25 D5 GPIO5 CS
RTC_GPIO7 DADC1_CHC2 ADC1_CH19 GPIO26 D26 TX2 GPIO17 TX2
RTC_GPIO17 T7 ADC1_CH17 GPIO27 D26 RX2 GPIO16 RX2
RTC_GPIO16 T6 ADC1_CH16 GPIO14 D14 D4 GPIO4 ADC1_CH10 T0
RTC_GPIO15 T5 ADC1_CH15 GPIO12 D12 D2 GPIO2 ADC1_CH12 T2
RTC_GPIO14 T4 ADC1_CH14 GPIO13 D13 D15 GPIO15 ADC1_CH13 T3
GND GND GND GND
VIN VIN 3.3V 3.3V

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_gpio fü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_gpio Alles, 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...

Request for Comments

Loading comments...