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.


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.


PINout ESP32 Board
ENABLE/CHIP_PU
High:on; Low:off
I EN D23 GPIO23 HS1_STROBE VSPID
RTC_GPIO0 ADC1_CH0 GPIO36 I VP D22 I/O GPIO22 U0RTS VSPIWP EMAC_TXD1
RTC_GPIO3 ADC1_CH3 GPIO39 I VN TX0 GPIO1 TX0
RTC_GPIO4 ADC1_CH6 GPIO34 I D34 RX0 GPIO3 RX0
RTC_GPIO5 ADC1_CH7 GPIO35 I D35 D21 GPIO21 SDADC1_CH
32K_XP RTC_GPIO9 TOUCH9 ADC1_CH4 GPIO32 I/O D32 D19 I/O GPIO19 U0CTS VSPIQ EMAC_TXD0
32K_XN RTC_GPIO8 TOUCH8 ADC1_CH5 GPIO33 I/O D33 D18 I/O GPIO18 HS1_DATA7 VSPICLK
EMAC_RXDO RTC_GPIO6 DAC_1 ADC2_CH8 GPIO25 I/O D25 D5 I/O GPIO5 HS1_DATA6 VSPICSO EMAC_RX_CLK
EMAC_RXD1 RTC_GPIO7 DAC_2 ADC2_CH9 GPIO26 I/O D26 TX2 I/O GPIO17 U2TXD HS1_DATA5 EMAC_CLK_OUT_180
EMAC_RX_DV RTC_GPIO17 TOUCH7 ADC2_CH7 GPIO27 I/O D26 RX2 I/O GPIO16 U2RXD HS1_DATA4 EMAC_CLK_OUT
MTMS SD_CLK HS2_CLK HSPICLK EMAC_TXD2 RTC_GPIO16 TOUCH6 ADC2_CH6 GPIO14 I/O D14 D4 I/O GPIO4 ADC2_CH0 TOUCH0 EMAC_TX_ER HSPIHD HS2_DAT1 SD_DATA1
MTDI SD_DATA2 HS2_DATA2 HSPIQ EMAC_TXD3 RTC_GPIO15 TOUCH5 ADC2_CH5 GPIO12 I/O D12 D2 I/O GPIO2 ADC2_CH2 TOUCH2 RTC_GPIO12 HSPIWP HS2_DATA0 SD_DATA0
MTCK SD_DAT3 HS2_DATA3 HSPID EMAC_RX_ER RTC_GPIO14 TOUCH4 ADC2_CH4 GPIO13 I/O D13 D15 I/O GPIO15 ADC2_CH3 TOUCH3 RTC_GPIO13 EMAC_RXD3 HSPICSO HS2_CMD SD_CMD MTDO
GND GND GND GND
VIN VIN 3.3V 3.3V

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
  • GPIO2
  • GPIO3
  • GPIO4
  • GPIO5
  • GPIO6
  • GPIO7
  • GPIO8
  • GPIO9
  • GPIO10
  • GPIO11
  • GPIO12
  • GPIO13
  • GPIO14
  • GPIO15
  • GPIO16
  • GPIO17
  • GPIO18
  • GPIO19
  • GPIO20
  • GPIO21
  • GPIO22
  • GPIO23
  • GPIO24
  • GPIO25
  • GPIO26
  • GPIO27
  • GPIO28
  • GPIO29
  • GPIO30
  • GPIO31
  • GPIO32
  • GPIO33
  • GPIO34
  • GPIO35 VDET_1
  • GPIO36 SENSOR_VP
  • GPIO37 SENSOR_CAPP nicht herausgefuehrt
  • GPIO38 SENSOR_CAPN nicht herausgefuehrt
  • GPIO39 SENSOR_VN

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...