Die Tabelle unten zeigt, welche GPIO-Pins auf welchen ESP32-Boards vorhanden sind, und welche Funktionen sie wahrnehmen können. Einige Pins können nur als Eingabe (lesend) genutzt werden, manche stehen bei Nutzung der WiFi-Funktionalität nicht für Ein- oder Ausgaben zur Verfügung. In den Diagrammen sind die jeweiligen Pin-Gruppen entsprechend markiert.
PDF-Download: Pinbelegung des ESP32 (38 Pins, 30 Pins und ESP32 Pico-Kit)
Pin-Namen: je nach Hersteller der Boards sind die GPIO-Pins unterschiedlich benannt: nur mit einer Zahl beim Pico Kit; auf den DevKitC-Boards mit Pxx (P für Pin xx), Gxx (GPIO) oder auch Dxx (Digital[1]Bei den Arduinos wird zwischen Analog-Input-Pins – A0-A5 oder A0-A7 – und Digital-Pins – D2-D13 – unterschieden.) – siehe unten die Bilder der verschiedenen Boards.
<FLASH>: Damit sind in der Tabelle die GPIO-Pins gekennzeichnet, die zur Ansteuerung des internen SPI-Flash-Speichers verwendet werden und nicht für eigene Projekte zur Verfügung stehen. Beim DevKitC: Pins 6-11 (CLK, SD0, SD1, SD2, SD3, CMD; beim Pico Kit Pins 6-8, 11, 16 und 17 (CLK, D3, D1, D2, CS und D0). Beim Pico Kit sind für diese Anschlüsse zwar Lötaugen (Pads) vorhanden, aber nicht mit Pins bestückt; bei den DevKitC-Boards mit 30 Pins sind sie gar nicht nach außen geführt.
GPIO 12: darf während des Bootens nicht durch ein verbundenes Gerät auf „HIGH” gesetzt sein.
V5, 5V, VIN: Kann zur Spannungsversorgung des ESP32 als 5 Volt-Eingang verwendet werden, wenn das Board nicht per USB-Anschluss versorgt wird. Wird es per USB versorgt, darf an diesem Pin keine Eingangsspannung anliegen – d.h. entweder wird der ESP32 per USB versorgt oder über den 5-Volt-Pin, aber nicht über beide!
Bei Versorgung per USB stehen an diesem Pin die 5 Volt des USB-Anschlusses als Ausgang bereit, um angeschlossene Module, die das benötigen, entsprechend zu versorgen (ein Beipiel ist der CO2-Sensor MH-Z19B). Meist können Sensoren etc. aber mit der Standardspannung des ESP32 von 3,3 Volt betrieben werden. Aufschluss gibt das jeweilige Datenblatt.
Semsoren, die mit 3,3 und 5 Volt laufen, sollte man am ESP32 mit 3,3 Volt betreiben – dann kann man sicher sein, dass auch die Ausgabesignale der Sensoren zu den 3,3 Volt passen, die der ESP32 maximal an den GPIO-Pins verträgt.
Die wichtigsten Bezeichnungen sind:
- ADC: Analog-Digital-Konverter mit 12 Bit Auflösung (0…4095); ADC1: 8 Kanäle (channels; ADC1_CH0 – ADC1_CH7), ADC2: 10 Kanäle (ADC2_CH0 – ADC2_CH9)
→ die Kanäle am ADC2 stehen im WiFi-Betrieb nicht zur Verfügung - DAC: Digital-Analog-Konverter
- I2C: Kommunikation per I2C-Bus über die Leitungen SCL (Takt; serial clock) und SDA (Daten; serial data); da sich die angeschlossenen Geräte (wie Sensoren) je nach Typ über eine eigene Adresse identifizieren, kann man über einen Bus mehrere Geräte ansprechen; die ESP32-DevKits haben (anders als das ESP32 Pico Kit, ESP8266 und Arduino) zwei getrennte Busse, sodass man zwei Sensoren mit gleicher Adresse an einem Controller nutzen kann (Namen: I2C_SDA und I2C_SCL, ggf. I2C_SDA_2 und I2C_SCL_2)
- RTC: mit diesen Pins kann der ESP32 aus dem Tiefschlaf aufgeweckt werden – der Präfix
RTC_
bezeichnet alles, was mit der Echtzeituhr (engl. real time clock) und den Stromsparmodi des ESP32 zu tun hat - SPI (HSPI, VSPI): zur Verbindung mit Modulen, die das SPI (engl.: Serial Peripheral Interface) zur Kommunikation nutzen, z.B. Displays oder SD-Kartenleser
- TOUCH: Touch-Sensoren
- UART: serielle Schnittstellen (UART = Universal Asynchronous Receiver Transmitter); zur seriellen Kommunikation mit anderen Geräten; von den drei Schnittstellen des ESP32 ist nur UART2 ohne weiteres nutzbar (GPIO 16 und 17, in der Tabelle mit U2RXD und U2TXD bezeichnet). [3]UART0 wird für die USB-Datenübertragung zwischen der IDE auf dem PC und dem Mikrocontroller verwendet, d.h. das Hochladen des übersetzten Programms und die Übertragung von Ausgaben des Programm … Continue reading
Eine ausführlichere Erläuterung der Funktionen gibt der Artikel »ESP32 Pinout Reference: Which GPIO pins should you use?« bei Random Nerd Tutorials.
Name | GPIO | DevKitC (30 Pins) | DevKitC (38 Pins) | Pico Kit | Funktion |
---|---|---|---|---|---|
(P)0 | 0 | x | x | ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK | |
TX0, TX | 1 | x | x | x | GPIO1, U0TXD, CLK_OUT3, EMAC_RXD2 (mit der USB-Bridge verbunden) |
(P)2 | 2 | x | x | x | ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 |
RX0, RX | 3 | x | x | x | GPIO3, U0RXD, CLK_OUT2 (mit der USB-Bridge verbunden) |
(P)4 | 4 | x | x | x | ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER |
(P)5 | 5 | x | x | x | GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK |
CLK | 6 | x | (x) | <FLASH> Flash-Takt; GPIO6, SD_CLK, SPICLK, HS1_CLK, U1CTS | |
SD0, D3 (Pico) | 7 | x | (x) | <FLASH> GPIO7, SD_DATA0, SPIQ, HS1_DATA0, U2RTS | |
D1, SD1 | 8 | x | (x) | <FLASH> GPIO8, SD_DATA1, SPID, HS1_DATA1, U2CTS | |
SD2 | 9 | x | <FLASH> | ||
9 | 9 | x | GPIO9, SD_DATA2, SPIHD, HS1_DATA2, U1RXD | ||
SD3 | 10 | x | <FLASH> | ||
10 | 10 | x | GPIO10, SD_DATA3, SPIWP, HS1_DATA3, U1TXD | ||
CMD, D2 (Pico) | 11 | x | (x) | <FLASH> GPIO11, SD_CMD, SPICS0, HS1_CMD, U1RTS | |
(P)12 | 12 | x | x | x | ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 |
(P)13 | 13 | x | x | x | ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER |
(P)14 | 14 | x | x | x | ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 |
(P)15 | 15 | x | x | x | ADC2_CH3, TOUCH3, RTC_GPIO13, MTDO, HSPICS0, HS2_CMD, SD_CMD, EMAC_RXD3 |
(P)16, RX2 | 16 | x | x | GPIO16, U2RXD, I2C_SCL_2 | |
CS | 16 | (x) | <FLASH> GPIO16, HS1_DATA4, U2RXD, EMAC_CLK_OUT | ||
(P)17, TX2 | 17 | x | x | GPIO17, U2TXD, I2C_SDA_2 | |
D0 | 17 | (x) | <FLASH> GPIO17, HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 | ||
(P)18 | 18 | x | x | x | GPIO18, VSPICLK, HS1_DATA7 |
(P)19 | 19 | x | x | x | GPIO19, VSPIQ, U0CTS, EMAC_TXD |
(P)21 | 21 | x | x | x | GPIO21, VSPIHD, EMAC_TX_EN, I2C_SDA |
(P)22 | 22 | x | x | x | GPIO22, VSPIWP, U0RTS, EMAC_TXD1, I2C_SCL |
(P)23 | 23 | x | x | x | GPIO23, VSPID, HS1_STROBE |
(P)25 | 25 | x | x | x | GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 |
(P)26 | 26 | x | x | x | GPIO26, DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 |
(P)27 | 27 | x | x | x | GPIO27, ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV |
(P)32 | 32 | x | x | x | 32K_XP, ADC1_CH4, TOUCH9, RTC_GPIO9 |
(P)33 | 33 | x | x | x | 32K_XP, ADC1_CH4, TOUCH9, RTC_GPIO9 |
(P)34 | 34 | x | x | x | ADC1_CH6, RTC_GPIO4 |
(P)35 | 35 | x | x | x | ADC1_CH7, RTC_GPIO5 |
SVP, VP | 36 | x | x | x | SENSOR_VP, GPIO36, ADC1_CH0, RTC_GPIO0 |
37 | 37 | x | GPIO37, ADC1_CH1, RTC_GPIO1 | ||
38 | 38 | x | GPIO38, ADC1_CH2, RTC_GPIO2 | ||
SVN, VN | 39 | x | x | x | SENSOR_VN, GPIO39, ADC1_CH3, RTC_GPIO3 |
EN | x | x | x | wie ENABLE-Taster: Neustart (Reset) des ESP32 | |
GND | 2 x | 3 x | 2 x | Masse | |
3V3 | 1 x | 1 x | 2 x | 3,3 V zur Spannungsversorgung angeschlossener Komponenten | |
V5, 5V, VIN | 1 x | 1 x | 1 x | als Eingang: 5 V Versorgungsspannung; 5V-Ausgang bei Versorgung per USB | |
Name | GPIO | DevKitC (30 Pins) | DevKitC (38 Pins) | Pico Kit | Funktion |
Letzte Änderung: 23.08.2021
Fußnoten
1↑ | Bei den Arduinos wird zwischen Analog-Input-Pins – A0-A5 oder A0-A7 – und Digital-Pins – D2-D13 – unterschieden. |
---|---|
2↑ | Siehe „ESP32 Pinout Reference” (Absatz „Enable (EN)”) bei Random Nerd Tutorials und den Make-Artikel „Großer Bruder: Espressif ESP32” (ziemlich weit unten im Absatz „’Hello World’ und System-Info”) |
3↑ | UART0 wird für die USB-Datenübertragung zwischen der IDE auf dem PC und dem Mikrocontroller verwendet, d.h. das Hochladen des übersetzten Programms und die Übertragung von Ausgaben des Programm zum seriellen Monitor (z.B. mit dem Befehl Serial.print()). Nutzt man also den seriellen Monitor für Ausgaben des ESP32 am PC, kann man diese Schnittstelle nicht anderweitig verwenden. UART1 ist nur nutzbar, wenn man die Standard-Pins (Rx1: GPIO 9, Tx1: GPIO 10) „umbiegt” (also auf andere Pins verlegt), denn GPIO 9 und 10 sind vom ESP32 zur Ansteuerung des Flash-Speichers reserviert und können nicht in Programmen verwendet werden. |
Pinbelegung ESP32 38 PIN
Hallo,
ich habe mir einen ESP21 mit 38 Pin gekauft, und wollte mit den internen LED’S experimentieren. Bin aber auf ein Problem gestoßen! Laut Pin-Layout ist die interne LED auf PIN 2 gelegt, das funktioniert aber leider nicht. Erst wenn ich in meinem Test-Programm die LED auf PIN 1 lege klappt es mit dem Blinken der internen LED, ist es so gewollt, oder ist es ein Fehler im PIN-Layout
#define LED 1
void setup() {
pinMode(LED,OUTPUT);
}
void loop() {
delay(100);
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
}
Da ich nun Anfänger mit dem EPS32 bin, ist es natürlich schwierig herauszufinden was da Sache ist.
Über eine Antwort freue ich mich sehr.
Mit freundlichen Grüßen,
Reinhold Kwauka