Bei der Verwendung des ESP32 GPIO stellt sich häufig die Frage, wofür einige Pins verwendet werden können und welche Pins in unseren Projekten vermieden werden sollten. Der ESP32-Chip verfügt über 48 Pins, normalerweise haben diese Pins mehrere unterschiedliche Funktionen. Wir können diese Funktionen den entsprechenden Pins in unserem Code zuweisen.
Werbung
Das ESP-WROOM-32-Modul
Wenn wir eine individuelle Schaltung auf Basis des ESP32 entwerfen möchten, können wir das ESP-WROOM-32 Rohmodul wählen. Aufgrund seines SMT-Designs ist es relativ einfach zu löten, seine Größe von 18 x 25 mm nimmt wenig Platz in Anspruch und erhöht nicht die Größe unserer eigenen Schaltung. Es hat alle Pins wie die ESP32-Chip-Entwicklungsplatinen ohne externe Zusatzschaltungen.
Es sind verschiedene ESP32-Entwicklungskarten mit unterschiedlichen Grundrissen erhältlich. Nicht alle GPIO-Pins sind auf allen Geräten zu finden, aber alle GPIOs verhalten sich auf die gleiche Weise, unabhängig davon, welche ESP32-Entwicklungskarte verwendet wird.
ESP32 Entwicklungsboard 30 Pin-Belegung
Die Pinbelegung der 30-Pin-Version des Entwicklungsboards ESP32-WROOM-32 ist im Bild unten zu sehen.
ESP32-Entwicklungsplatine 38-Pin-Belegung
Die folgende Abbildung zeigt die Pinbelegung der 38-Pin-Version des ESP32-Entwicklungsboards.
ESP32-Peripherie
ESP32-Peripherie werden bestimmten Pins zugewiesen. Im Code können wir definieren, ob diese Pins als digitale Ausgänge oder Eingänge oder zur Aktivierung einer der Peripherie verwendet werden. (z. B.: UART, I2C, SPI, DAC, ADC, PWM usw.)
Die ESP32-Architektur ermöglicht die Konfiguration bestimmter Peripherie für jeden Pin des ESP32, der vom IO MUX GPIO verwaltet wird. Dies bedeutet, dass die IO-MUX- und GPIO-Matrix verwendet werden kann, um interne Peripherie auf einen anderen physischen Pin umzuleiten.
Einige Peripherie verwenden dedizierte GPIO-Pins, z. B. ADC, DAC, Touch und JTAG.
Die Pins GPIO6 bis GPIO11 verbinden sich mit dem Flash-Speicher des ESP32-Moduls. Wenn ein Peripherie an einen dieser Pins angeschlossen ist, startet der ESP32 nicht. Nicht benutzen!
Die Verwendung von Peripherie, die standardmäßig GPIOs zugewiesen sind, kann die Verwendung bestimmter Bibliotheken und Beispielcodes erleichtern.
Der ESP32-Chip enthält die folgenden Peripherie:
18 Analog-Digital-Wandler (ADC) |
2 Digital-Analog-Wandler (DAC) |
16 PWM-Ausgangskanäle |
3 UART-Schnittstellen |
2 I2C-Schnittstellen |
3 SPI-Schnittstellen |
2 I2S-Schnittstellen |
10 kapazitiver Berührungssensor GPIO |
1 eingebauter Hall-Effekt-Sensor |
ESP32 GPIO als Eingang oder Ausgang verwenden
Einige Pins funktionieren möglicherweise nicht wie erwartet, wenn der ESP32-Chip startet. Vermeiden wir daher nach Möglichkeit die Verwendung dieser Pins. Nachfolgend sehen wir, welche Kontakte als Ein- und/oder Ausgänge geeignet sind und auf welche wir bei der Verwendung achten sollten bzw. welche nicht zu empfehlen sind.
Die Bedeutung der Symbole in der folgenden Tabelle:
– Brauchbar
– Vorsichtig benutzen
– Verwendung nicht empfohlen
GPIO 0
Eingang: Ausgang:
Beim Systemstart befindet es sich im HIGH-Zustand, zum Programmieren muss es in den LOW-Zustand gezogen werden. Wir verwenden es nur, wenn es unbedingt notwendig ist. Strapping Pin, (Strapping Pins legen die ESP32-Boot-Konfiguration fest.)
GPIO 1
Eingang: Ausgang:
UART Tx0-Pin, für Programm-Upload, kann zum Debuggen beim Systemstart verwendet werden. Wenn der GPIO15-Pin hoch ist, sendet der ESP32 Boot-Protokolle über den UART. Es kann bedingt als Ausgabe verwendet werden.
GPIO 2
Eingang: Ausgang:
Dieser Pin ist mit der eingebauten LED verbunden. Strapping Pin.
GPIO 3
Eingang: Ausgang:
UART Rx0-Pin, kann zum Programmen aufladen und zum Boot-Debugging verwendet werden. Kann bedingt als Eingang verwendet werden.
GPIO 4
Eingang: Ausgang:
Es kann unbedingt als Ausgang und Eingang verwendet werden.
GPIO 5
Eingang: Ausgang:
PWM-Signal sendet beim Systemstart. Strapping Pin.
GPIO 6
Eingang: Ausgang:
Der GPIO 6 (SCK/CLK) Pin ist auf einigen ESP32 Entwicklungsboards zu finden. Diese Pins sind jedoch mit dem integrierten SPI-Flash-Speicher des ESP-WROOM-32-Chips verbunden, bitte nicht verwenden!
GPIO 7
Eingang: Ausgang:
A GPIO 7 (SDO/SD0) Pin ist auf einigen ESP32 Entwicklungsboards zu finden. Diese Pins sind jedoch mit dem integrierten SPI-Flash-Speicher des ESP-WROOM-32-Chips verbunden, bitte nicht verwenden!
GPIO 8
Eingang: Ausgang:
A GPIO 8 (SDI/SD1) Pin ist auf einigen ESP32 Entwicklungsboards zu finden. Diese Pins sind jedoch mit dem integrierten SPI-Flash-Speicher des ESP-WROOM-32-Chips verbunden, bitte nicht verwenden!
GPIO 9
Eingang: Ausgang:
A GPIO 9 (SHD/SD2) Pin ist auf einigen ESP32 Entwicklungsboards zu finden. Diese Pins sind jedoch mit dem integrierten SPI-Flash-Speicher des ESP-WROOM-32-Chips verbunden, bitte nicht verwenden!
GPIO 10
Eingang: Ausgang:
A GPIO 10 (SWP/SD3) Pin ist auf einigen ESP32 Entwicklungsboards zu finden. Diese Pins sind jedoch mit dem integrierten SPI-Flash-Speicher des ESP-WROOM-32-Chips verbunden, bitte nicht verwenden!
GPIO 11
Eingang: Ausgang:
A GPIO 11 (CSC/CMD) Pin ist auf einigen ESP32 Entwicklungsboards zu finden. Diese Pins sind jedoch mit dem integrierten SPI-Flash-Speicher des ESP-WROOM-32-Chips verbunden, bitte nicht verwenden!
GPIO 12
Eingang: Ausgang:
Beim Start muss es niedrig sein. Ein Neustart wird fehlschlagen, wenn er zu hoch gesetzt ist. Die Spannung des internen Spannungsreglers wird hier eingestellt. Strapping Pin. Jtag MTDI-Pin.
GPIO 13
Eingang: Ausgang:
Jtag MTCK pin.
GPIO 14
Eingang: Ausgang:
Sendet PWM-Signal beim Systemstart. Jtag MTMS pin.
GPIO 15
Eingang: Ausgang:
Muss beim Start hoch sein. Strapping Pin. Jtag MTDO pin.
GPIO 16
Eingang: Ausgang:
UART Rx2 pin.
GPIO 17
Eingang: Ausgang:
UART Tx2 pin.
GPIO 18
Eingang: Ausgang:
GPIO 19
Eingang: Ausgang:
GPIO 21
Eingang: Ausgang:
I2C SDA pin
GPIO 22
Eingang: Ausgang:
I2C SCL pin
GPIO 23
Eingang: Ausgang:
GPIO 25
Eingang: Ausgang:
GPIO 26
Eingang: Ausgang:
GPIO 27
Eingang: Ausgang:
GPIO 32
Eingang: Ausgang:
GPIO 33
Eingang: Ausgang:
GPIO 34
Eingang: Ausgang:
Dieser Pin hat keinen internen Pull-up- oder Pull-down-Widerstand. Nur als Eingang verwendbar.
GPIO 35
Eingang: Ausgang:
Dieser Pin hat keinen internen Pull-up- oder Pull-down-Widerstand. Nur als Eingang verwendbar.
GPIO 36
Eingang: Ausgang:
Dieser Pin hat keinen internen Pull-up- oder Pull-down-Widerstand. Nur als Eingang verwendbar.
GPIO 39
Eingang: Ausgang:
Dieser Pin hat keinen internen Pull-up- oder Pull-down-Widerstand. Nur als Eingang verwendbar.
werbung
UART
UART (Universal Asynchronous Receiver/Transmitter) ist eine Hardwarefunktion, die weit verbreitete asynchrone serielle Kommunikationsschnittstellen wie RS232, RS422 und RS485 verwaltet. UART bietet eine beliebte und kostengünstige Möglichkeit, Voll- oder Halbduplex-Daten zwischen verschiedenen Geräten auszutauschen. Der ESP32 unterstützt auch das Infrarot-Data-Association-Protokoll (IrDA).
Der ESP32-Chip enthält 3 UART-Controller, die unabhängig voneinander mit Parametern wie Baudrate, Datenbitlänge, Bitreihenfolge, Anzahl der Stoppbits, Paritätsbit usw. konfiguriert werden können. Alle drei UART-Controller des ESP32 arbeiten auf 3,3V TTL-Pegel.
Um ESP32 UART1 und UART2 auf Arduino verwenden zu können, benötigen wir die Hardware Serial-Bibliothek.
Mit der GPIO-Matrix können UART-Pins nahezu jedem GPIO-Pin des ESP32 logisch zugewiesen werden. Die Pins GPIO34, GPIO35, GPIO36 und GPIO39 können nicht als TX-Pins verwendet werden, da sie nur als Eingänge verwendet werden können.
UART0 ist mit dem USB-zu-Seriell-Konverter verbunden und dient der Kommunikation und Programmierung mit dem ESP32.
Die Standardpins für UART1, GPIO9 und GPIO10 sind auf einigen ESP32-Entwicklungsboards zu finden. Diese Pins sind intern mit dem SPI-Flash-Speicher verbunden. Wenn wir es nutzen wollen, muss UART1 einem anderen Pin zugewiesen werden.
Die Verwendung von UART2 ist durch nichts eingeschränkt.
UART | RX IO | TX IO | CTS | RTS |
---|---|---|---|---|
UART0 | GPIO3 | GPIO1 | – | – |
UART1 | GPIO9 | GPIO10 | GPIO6 | GPIO11 |
UART2 | GPIO16 | GPIO17 | GPIO8 | GPIO7 |
I2C
Der ESP32 verfügt über zwei I2C-Kanäle. I2C verfügt auch nicht über einen dedizierten GPIO, ähnlich wie UART-Pins, jeder GPIO kann als SDA oder SCL konfiguriert werden. Ausnahme der GPIO34-, GPIO35-, GPIO36- und GPIO39-Pins, da es sich um reine Eingangspins handelt und sie daher nicht als SCL oder SDA verwendet werden können.
In Arduino sind GPIO21 (SDA) und GPIO22 (SCL) die Standard-I2C-Pins.
GPIO21 | SDA |
GPIO22 | SCL |
Der folgende Codeausschnitt zeigt, wie wir beide I2C-Kanäle des ESP32 nutzen können.
#include <Wire.h>
const char sdaPin1 = 26;
const char sclPin1 = 25;
const char sdaPin2 = 33;
const char sclPin2 = 32;
TwoWire mywire1 = TwoWire(0);
TwoWire mywire2 = TwoWire(1);
void setup()
{
mywire1.begin(sdaPin1, sclPin1, 100000);
mywire2.begin(sdaPin2, sclPin2, 100000);
}
void loop()
{
mywire1.beginTransmission(0x10);
mywire1.write(0x20);
mywire1.endTransmission();
mywire2.beginTransmission(0x12);
mywire2.write(0x20);
mywire2.endTransmission();
}
SPI
Der ESP32-Chip verfügt über drei SPI-Schnittstellen. Dies sind SPI, HSPI und VSPI.
SPI ist als Schnittstelle für Flash-Speicher reserviert, obwohl es auf einigen ESP32-Entwicklungsboards portiert ist, verwenden wir es nicht!
Wir haben also zwei nutzbare SPI-Schnittstellen, HSPI und VSPI. Mit Hilfe der GPIO-Matrix können wir auch auf einen anderen Pin umgeleitet werden. Standardmäßig befinden sich diese auf den folgenden GPIOs:
SPI | MOSI | MISO | CLK | CS |
VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5 |
HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15 |
Integrierter SPI-Flash-Speicher
Die Pins GPIO 6 bis GPIO 11 befinden sich auf einigen ESP-WROOM-32-Entwicklungsplatinen. Diese Pins sind jedoch mit dem integrierten SPI-Flash-Speicher des ESP-WROOM-32-Chips verbunden, verwenden wir sie nicht.
GPIO6 | SCK/CLK |
GPIO7 | SDO/SD0 |
GPIO8 | SDI/SD1 |
GPIO9 | SHD/SD2 |
GPIO10 | SWP/SD3 |
GPIO11 | CSC/CMD |
SwitchBot WiFi Smart Lock mit Keypad Touch
Fingerabdruck Türschloss für Haustür, smartes Türschloss für das Öffnen, Schließen der Tür per Fingerprint, Zutrittscode, App
werbung
Analog-Digital-Wandler (ADC)
Der ESP32 verfügt über zwei 12-Bit-SAR-Analog-Digital-Wandler. ADC1 verfügt über 8 Kanäle, während ADC2 über 10 Kanäle verfügt.
ADC-Eingangskanäle haben eine 12-Bit-Auflösung. Das bedeutet, dass wir analoge Werte zwischen 0 und 4095 erhalten, wobei 0 ist 0 V und 4095 ist 3,3 V entspricht.
Im Code können wir die Auflösung der ADC-Kanäle sowie den ADC-Bereich einstellen.
ADC2 funktioniert möglicherweise nicht ordnungsgemäß, wenn WLAN verwendet wird. Wenn wir WLAN benötigen, verwenden wir nach Möglichkeit stattdessen ADC1.
Die dedizierten GPIOs für den ADC können der folgenden Tabelle entnommen werden:
ADC1_0 | GPIO36 |
ADC1_1 | GPIO37 |
ADC1_2 | GPIO38 |
ADC1_3 | GPIO39 |
ADC1_4 | GPIO32 |
ADC1_5 | GPIO33 |
ADC1_6 | GPIO34 |
ADC1_7 | GPIO35 |
. | |
ADC2_0 | GPIO4 |
ADC2_1 | GPIO0 |
ADC2_2 | GPIO2 |
ADC2_3 | GPIO15 |
ADC2_4 | GPIO13 |
ADC2_5 | GPIO12 |
ADC2_6 | GPIO14 |
ADC2_7 | GPIO27 |
ADC2_8 | GPIO25 |
ADC2_9 | GPIO26 |
Der ESP32-ADC ist etwas verrauscht und sein Verhalten ist nichtlinear. Es unterscheidet wahrscheinlich nicht zwischen 0 und 0,1 V sowie 3,2 und 3,3 V. Wenn ein genauerer Analog-Digital-Wandler benötigt wird, sollten wir die Verwendung eines externen ADC in Betracht ziehen.
Digital-Analog-Wandler (DAC)
An Bord des ESP32 finden wir 2 unabhängige 8-Bit-Digital-Analog-Wandler (DAC) zur Umwandlung digitaler Werte in analoge Spannungen. Diese Gleichspannung erscheint am GPIO-Ausgang des DAC-Kanals.
Der 8-Bit-DAC bedeutet, dass der ESP32 seinen digitalen Eingangswert von 0 bis 255 in einen äquivalenten analogen Spannungsausgang von 0 V bis zur Referenzspannung (Vref) umwandeln kann. Die folgende Formel hilft Ihnen zu verstehen, welche analoge Spannung am Ausgang im Vergleich zum digitalen Eingangswert erwartet wird.
Ausgangsspannung(DAC) = Digitaler Eingangswert X (Vref / 255)
Der DAC verfügt über ein internes Widerstandsnetzwerk und verwendet einen Spannungspegel nahe der Versorgungsspannung als Eingangsreferenzspannung (Vref).
Der DAC bezieht die Referenzspannung „Vref“ vom VDD3P3_RTC-Pin des ESP32-Chips, die im Idealfall mit der Versorgungsspannung übereinstimmt.
Dedizierte GPIOs für den DAC:
DAC1 | GPIO25 |
DAC2 | GPIO26 |
Az alábbi képen láthatjuk, hol található ez a két csap.
RTC GPIOs
Der ESP32 verfügt über 16 RTC GPIOs, die Teil des RTC Low-Power-Subsystems sind. Diese RTC-GPIOs sind in der Lage, den ESP32 von einer externen Quelle aus dem Tiefschlaf aufzuwecken, wenn der Ultra Low Power(ULP) Coprozessor läuft.
Das bedeutet, dass wir den ESP32 beispielsweise durch Drücken einer Taste, die mit einem der RTC-GPIOs verbunden ist, aus dem Tiefschlaf wecken können.
Die dedizierten RTC GPIO Pins sind in der folgenden Abbildung dargestellt:
RTC_GPIO0 | GPIO36 |
RTC_GPIO3 | GPIO39 |
RTC_GPIO4 | GPIO34 |
RTC_GPIO5 | GPIO35 |
RTC_GPIO6 | GPIO25 |
RTC_GPIO7 | GPIO26 |
RTC_GPIO8 | GPIO33 |
RTC_GPIO9 | GPIO32 |
RTC_GPIO10 | GPIO4 |
RTC_GPIO11 | GPIO0 |
RTC_GPIO12 | GPIO2 |
RTC_GPIO13 | GPIO15 |
RTC_GPIO14 | GPIO13 |
RTC_GPIO15 | GPIO12 |
RTC_GPIO16 | GPIO14 |
RTC_GPIO17 | GPIO27 |
Im folgenden Bild können wir sehen, welche RTC_GPIO-Pins sich auf der 38-Pin-Entwicklungsplatine des ESP32 befinden:
PWM
PWM (Pulse Width Modulation) ist eine Methode zur Erzeugung analoger Signale an digitalen Ausgangspins des ESP32. Wir erzeugen ein Rechtecksignal, das zwischen 0V und 3,3V (HIGH/LOW) wechselt. Die Dauer zwischen HIGH- und LOW-Pegel, die Impulsbreite, bestimmt die analoge Ausgangsspannung.
Der ESP32-PWM-Controller verfügt über 16 unabhängige Kanäle, die so konfiguriert werden können, dass sie PWM-Signale mit unterschiedlichen Eigenschaften erzeugen. Jeder Ausgang, der als Ausgang fungieren kann, kann als PWM-Pin verwendet werden. Die Pins GPIO34, GPIO35, GPIO36 und GPIO39 können kein PWM erzeugen, da es sich nur um Eingangspins handelt.
Um das PWM-Signal einstellen, müssen wir im Code folgende Parameter angeben:
Frequenz. |
Auflösung der Impulsbreite (1 – 16 bit). |
PWM-Kanal (0-15). |
GPIO, der das PWM-Signal erzeugt. |
Interrupt
Interrupts können für jeden GPIO-Pin auf dem ESP32-Mikrocontroller konfiguriert werden.
Bewegungsmelder mit Alarm, drahtloses Haussicherheitssystem, fügen Hub Mini hinzu, um ihn Alexa-kompatibel zu Machen
werbung
Kapazitive berührungsempfindliche GPIOs
Der ESP32 enthält 10 interne kapazitive Berührungssensoren. Diese Sensoren können Veränderungen an allem erkennen, was eine elektrische Ladung enthält. Dadurch können sie beispielsweise die Berührung der GPIOs mit einem Stift oder Finger erkennen.
Mithilfe kapazitiver Berührungssensoren können wir den ESP32-Mikrocontroller aus dem Tiefschlaf wecken.
Interne Berührungssensoren werden an diese dedizierten GPIO-Pins angeschlossen.
Touch0 | GPIO4 |
Touch1 | GPIO0 |
Touch2 | GPIO2 |
Touch3 | GPIO15 |
Touch4 | GPIO13 |
Touch5 | GPIO12 |
Touch6 | GPIO14 |
Touch7 | GPIO27 |
Touch8 | GPIO33 |
Touch9 | GPIO32 |
GPIO-Stromverbrauch
Der maximale Ausgangsstrom des ESP32 GPIO-Pins beträgt 40 mA, und sie können einzeln einen maximalen Strom von 28 mA aufnehmen.
ESP32 rendszerindítás – Strapping Pinek
Der ESP32-Chip benötigt bei jedem Start oder Neustart bestimmte Konfigurationsparameter, die den Startmodus, die Spannungseinstellungen, das mögliche Drucken von ROM-Nachrichten, die Einstellungen der JTAG-Signalquelle usw. bestimmen.
Einige Pins haben beim Starten des ESP32 eine einzigartige Funktion. Diese werden Strapping pins genannt. Kombinationen aus High-, Low- oder Floating-Zuständen der Strapping pins bestimmen das Startverhalten des ESP32.
Nach erfolgreichem Booten fungieren diese Pins als normale GPIO-Pins.
Vermeiden wir nach Möglichkeit die Verwendung dieser Pins, da eine Änderung ihres Zustands während des Startvorgangs zu unerwartetem Verhalten, Fehlern oder sogar Systemabstürzen führen kann.
Der ESP32-Chip verfügt über die folgenden Strapping-Pins:
GPIO0 | Beim Systemstart befindet es sich im HIGH-Zustand, zum Programmieren muss es in den LOW-Zustand gezogen werden. Der serielle Adapter des ESP32-Wroom-Moduls übernimmt dies für uns. |
GPIO2 | Zur Programmierung muss er auf LOW gezogen werden. |
GPIO4 | Das Register „GPIO_STRAP“ enthält GPIO 4, wird aber von keinem Boot-Modus verwendet. |
GPIO5 | Der Spannungspegel von GPIO5 und GPIO15 beeinflusst das SDIO-Slave-Timing. |
GPIO12 | Legt die SPI-Flash-Speicherspannung fest. Wenn die Spannung niedrig ist, beträgt sie 3,3 V. Wenn sie hoch ist, beträgt sie 1,8 V. Das ESP32 Wroom-Modul enthält einen 3,3-V-Flash-Speicher |
GPIO15 | Wenn hoch (dies ist die Standardeinstellung), druckt der ESP32 das Debug-Protokoll beim Booten über die serielle Schnittstelle. Wenn wir es nach unten ziehen, passiert das nicht. Der Spannungspegel von GPIO5 und GPIO15 beeinflusst das SDIO-Slave-Timing. |
JTAG
JTAG-Pins können für Debugging-Zwecke verwendet werden. Wenn kein JTAG-Debugging erforderlich ist, können diese Pins als normale GPIOs verwendet werden.
GPIO12 | MTDI pin | |
GPIO13 | MTCK pin | |
GPIO14 | MTMS pin | |
GPIO15 | MTDO pin |
Enable – EN pin
Der EN-Pin des ESP32-Wroom-Entwicklungsboards wird hochgezogen und mit dem „CHIP_PU“-Pin (Chip PowerUp) des ESP32-Chips verbunden. Bei niedrigem Pegel wird der ESP32-Chip deaktiviert. Dieser Pin ist mit der EN-Taste des Moduls verbunden. Durch Drücken der Taste können wir den ESP32-Mikrocontroller neu starten.
ESP32 integrierten Hall-Effekt-Sensor
Alle ESP32-Karten haben einen eingebauten Hall-Effekt-Sensor. Der Hall-Effekt-Sensor kann Änderungen des Magnetfeldes in seiner Umgebung erkennen. Je größer das Magnetfeld ist, desto höher ist die Ausgangsspannung des Hall-Effekt-Sensors.
I2S
I2S (Inter-IC Sound) ist ein digitales Audioübertragungsprotokoll. Der ESP32 verfügt über zwei I2S-Peripheriegeräte, I2S0 und I2S1. Jeder kann als Controller oder Ziel konfiguriert werden und jeder kann ein Audiosender oder -empfänger sein.
Es gibt keine dedizierten I2S-Pins am ESP32, diese müssen im Code zugewiesen werden.