Gyakran felmerül a kérdés az ESP32 GPIO használatával kapcsolatban, egyes pineket mire használhatunk és mely tűket érdemes kerülni a projektjeink során. Az ESP32 chip 48 csappal rendelkezik, általában ezek a csapok több különböző funkcióval rendelkeznek. Ezeket a funkciókat a kódunkban hozzárendelhetjük a megfelelő pinekhez.


Az ESP-WROOM-32 modul
Ha ESP32 alapú egyedi áramkört tervezünk, választhatjuk az ESP-WROOM-32 nyers modult. SMT kialakítása miatt viszonylag könnyedén beforrasztható, 18 x 25 mm-es méretének köszönhetően kis helyet foglal, nem növeli a saját áramkörünk méretét. Minden csapot tartalmaz, mint az ESP32 chippel rendelkező fejlesztőkártyák a külső kiegészítő áramkörök nélkül.

Több különböző ESP32 fejlesztőkártya kapható, eltérő lábkiosztással. Nem mindegyik GPIO csap található meg minden eszközön, azonban mindegyik GPIO ugyanúgy viselkedik, függetlenül attól, hogy melyik ESP32 fejlesztőkártyát használjuk.
ESP32 fejlesztőlapka 30 pin kiosztás
Az ESP32-WROOM-32 fejlesztőkártya 30 pines változat lábkiosztását láthatjuk az alábbi képen.

ESP32 fejlesztőkártya 38 pin kiosztás
A következő ábrán megtekinthetjük az ESP32 fejlesztőkártya 38 pines változatának lábkiosztását.

ESP32 perifériák
Az ESP32 perifériák meghatározott érintkezőkhöz vannak hozzárendelve. A kódban meghatározhatjuk, hogy ezeket a pineket digitális ki- vagy bemenetként használjuk vagy valamelyik perifériát aktiváljuk. ( pl.: UART, I2C, SPI, DAC, ADC, PWM, stb.)
Az ESP32 architektúra lehetővé teszi bizonyos perifériák konfigurálását az ESP32 bármely lábához, amelyet az IO MUX GPIO kezel. Ez azt jelenti, hogy az IO MUX és a GPIO mátrix használható a belső perifériák átirányítására egy másik fizikai érintkezőre.
Egyes perifériák dedikált GPIO érintkezőket használnak, ilyen az ADC, DAC, Touch és a JTAG.
A GPIO6 – GPIO11 csapok az ESP32 modul flash memóriájához csatlakoznak. Ha bármelyik perifériát ezen a pinek egyikére irányítunk, az ESP32 nem fog elindulni. Ne használjuk őket!
A GPIO-khoz alapértelmezetten hozzárendelt perifériák használata megkönnyítheti egyes könyvtárak és példakódok használatát.
Az ESP32 chip a következő perifériákat tartalmazza:
| 18 analóg-digitál konverter (ADC) |
| 2 digitál-analóg konverter (DAC) |
| 16 PWM kimeneti csatorna |
| 3 UART interfész |
| 2 I2C interfész |
| 3 SPI interfész |
| 2 I2S interfész |
| 10 kapacitív érintés érzékelő GPIO |
| 1 beépített hall-effekt érzékelő |
Xtensa 32-Bit LX7 Dual-Core processzor, USB Typ C, Bluetooth, WiFi, 0,96 hüvelykes 128 x 64 OLED kijelző
hirdetés
ESP32 GPIO felhasználása ki- vagy bemenetként
Egyes pineknél előfordul, hogy az ESP32 chip indulásakor nem a várt módon működnek, ezért ha lehetséges kerüljük ezeknek a csapoknak a használatát. Alább láthatjuk, hogy mely érintkezők alkalmasak bemenetként és/vagy kimenetként, és melyek azok, amelyek használatakor figyelnünk kell, vagy nem javasolt a használatuk.
A következő táblázatban az ikonok jelentése:
– használható
– használatakor figyelnünk kell
– nem javasolt a használatuk
GPIO 0
Bemenet:
Kimenet:
Rendszerindításkor MAGAS állapotban van, a programozáshoz ALACSONY állapotba kell húzni. Csak akkor használjuk, ha feltétlenül szükséges. Strapping Pin, (A Strapping pinek az ESP32 rendszerbetöltési konfigurációt állítják be.)
GPIO 1
Bemenet:
Kimenet:
UART Tx0 pin, program feltöltésre, rendszerindításkor hibakeresésre használható. Ha a GPIO15 pin magas állaptban van az ESP32 elküldi rendszerindítási naplókat az UART-on keresztül. Kimenetként feltételesen használható.
GPIO 2
Bemenet:
Kimenet:
Ez a pin a fedélzeti LED-hez csatlakozik. Strapping Pin.
GPIO 3
Bemenet:
Kimenet:
UART Rx0 pin, program feltöltésre, rendszerindításkor hibakeresésre használható. Bemenetként feltételesen használható.
GPIO 4
Bemenet:
Kimenet: 
Kimenetként és bemenetként feltétel nélkül használható.
GPIO 5
Bemenet:
Kimenet: 
PWM jelet küld rendszerindításkor. Strapping Pin.
GPIO 6
Bemenet:
Kimenet: 
A GPIO 6 (SCK/CLK) pin néhány ESP32 fejlesztőkártyán kivezetésre került. Ezek a csapok azonban az ESP-WROOM-32 chip integrált SPI flash memóriához csatlakoznak, ne használjuk ezeket.
GPIO 7
Bemenet:
Kimenet: 
A GPIO 7 (SDO/SD0) pin néhány ESP32 fejlesztőkártyán kivezetésre került. Ezek a csapok azonban az ESP-WROOM-32 chip integrált SPI flash memóriához csatlakoznak, ne használjuk ezeket.
GPIO 8
Bemenet:
Kimenet: 
A GPIO 8 (SDI/SD1) pin néhány ESP32 fejlesztőkártyán kivezetésre került. Ezek a csapok azonban az ESP-WROOM-32 chip integrált SPI flash memóriához csatlakoznak, ne használjuk ezeket.
GPIO 9
Bemenet:
Kimenet: 
A GPIO 9 (SHD/SD2) pin néhány ESP32 fejlesztőkártyán kivezetésre került. Ezek a csapok azonban az ESP-WROOM-32 chip integrált SPI flash memóriához csatlakoznak, ne használjuk ezeket.
GPIO 10
Bemenet:
Kimenet: 
A GPIO 10 (SWP/SD3) pin néhány ESP32 fejlesztőkártyán kivezetésre került. Ezek a csapok azonban az ESP-WROOM-32 chip integrált SPI flash memóriához csatlakoznak, ne használjuk ezeket.
GPIO 11
Bemenet:
Kimenet: 
A GPIO 11 (CSC/CMD) pin néhány ESP32 fejlesztőkártyán kivezetésre került. Ezek a csapok azonban az ESP-WROOM-32 chip integrált SPI flash memóriához csatlakoznak, ne használjuk ezeket.
GPIO 12
Bemenet:
Kimenet: 
Rendszerindításkor alacsonynak kell lennie. A renszerindítás meghiúsul, ha magas állapotba kerül, a belső feszültségszabályozó feszültségét állítja be. Strapping Pin. Jtag MTDI pin.
GPIO 13
Bemenet:
Kimenet: 
Jtag MTCK pin.
GPIO 14
Bemenet:
Kimenet: 
PWM jelet küld rendszerindításkor. Jtag MTMS pin.
GPIO 15
Bemenet:
Kimenet: 
Rendszerindításkor magasnak kell lennie. Strapping Pin. Jtag MTDO pin.
GPIO 16
Bemenet:
Kimenet: 
UART Rx2 pin
GPIO 17
Bemenet:
Kimenet: 
UART Tx2 pin
GPIO 18
Bemenet:
Kimenet: 
GPIO 19
Bemenet:
Kimenet: 
GPIO 21
Bemenet:
Kimenet: 
I2C SDA pin
GPIO 22
Bemenet:
Kimenet: 
I2C SCL pin
GPIO 23
Bemenet:
Kimenet: 
GPIO 25
Bemenet:
Kimenet: 
GPIO 26
Bemenet:
Kimenet: 
GPIO 27
Bemenet:
Kimenet: 
GPIO 32
Bemenet:
Kimenet: 
GPIO 33
Bemenet:
Kimenet: 
GPIO 34
Bemenet:
Kimenet: 
Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.
GPIO 35
Bemenet:
Kimenet: 
Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.
GPIO 36
Bemenet:
Kimenet: 
Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.
GPIO 39
Bemenet:
Kimenet: 
Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.
ESP32, kétmagos processzor, WiFi/Bluetooth, DC 5V tápfeszültség, 2640 kamera és TF kártyafogadó modullal
hirdetés
UART
Az UART (Universal Asynchronous Receiver/Transmitter) egy hardveres funkció, mely széles körben elterjedt aszinkron soros kommunikációs interfészeket kezel, mint például az RS232, RS422 és RS485. Az UART egy népszerű és költséghatékony módszert nyújt a teljes vagy félduplex adatcserére különböző eszközök között. Az ESP32 támogatja az Infrared Data Association (IrDA) protokollt is.
Az ESP32 chip 3 UART vezérlőt tartalmaz, amelyek egymástól függetlenül konfigurálhatók olyan paraméterekkel, mint az adatátviteli sebesség, az adatbithossz, a bitsorrend, a stopbitek száma, a paritásbit stb. Az ESP32 mindhárom UART vezérlője 3,3 V TTL szinten működik.
Az ESP32 UART1 és UART2 használatához az Arduino-n szükségünk van a Hardware Serial könyvtárra.
A GPIO Matrix segítségével az UART érintkezők logikailag hozzárendelhetők az ESP32 szinte bármelyik GPIO csapjához. A GPIO34, GPIO35, GPIO36 és GPIO39 pinek nem használhatók TX csapként, mert ezek csak bemenetként használhatók.
Az UART0 az USB-soros átalakítóhoz csatlakozik, az ESP32-vel való kommunikációra és programozáshoz használjuk.
Az UART1 alapértelmezett lábai, a GPIO9 és GPIO10, egyes ESP32 fejlesztőkártyákon kivezetésre kerültek. Ezek a pinek belsőleg csatlakoznak az SPI flash memóriához. Ha használni szeretnénk, az UART1-et másik pinhez kell rendelni.
Az UART2 használatát nem korlátozza semmi.
| UART | RX IO | TX IO | CTS | RTS |
|---|---|---|---|---|
| UART0 | GPIO3 | GPIO1 | – | – |
| UART1 | GPIO9 | GPIO10 | GPIO6 | GPIO11 |
| UART2 | GPIO16 | GPIO17 | GPIO8 | GPIO7 |

I2C
Az ESP32 két I2C csatornával rendelkezik. Az I2C-hez sem tartozik dedikált GPIO, hasonlóan az UART csapokhoz, a bármelyik GPIO beállítható SDA vagy SCL-ként. Kivételt képeznek a GPIO34, GPIO35, GPIO36 és GPIO39 pinek, mivel ezek csak bemeneti csapok, ezért nem használhatók SCL vagy SDA-ként.
Az arduinóban a GPIO21 (SDA) és a GPIO22 (SCL) az alapértelmezett I2C érintkezők.
| GPIO21 | SDA |
| GPIO22 | SCL |

A következő kódrészlet bemutatja, hogyan lehet kihasználni az ESP32 mindkét I2C csatornáját.
#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
Az ESP32 chip három SPI interfészt tartalmaz. Ezek az SPI, HSPI és VSPI.
Az SPI a Flash memória interfészeként van fenntartva, bár néhány ESP32 fejlesztőkártyán kivezetésre került, ne használjuk!
Tehát két használható SPI interfész áll a rendelkezésünkre, a HSPI és a VSPI. A GPIO mátrix segítségével ezek is átirányíthatóak másik csapra. Alapértelmezés szerint ezek a következő GPIO-n találhatók:
| SPI | MOSI | MISO | CLK | CS |
| VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5 |
| HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15 |

Integrált SPI flash memória
A GPIO 6 – GPIO 11 csapok néhány ESP-WROOM-32 fejlesztőkártyán kivezetésre került. Ezek a pinek azonban az ESP-WROOM-32 chip integrált SPI flash memóriához csatlakoznak, ne használjuk ezeket.
| GPIO6 | SCK/CLK |
| GPIO7 | SDO/SD0 |
| GPIO8 | SDI/SD1 |
| GPIO9 | SHD/SD2 |
| GPIO10 | SWP/SD3 |
| GPIO11 | CSC/CMD |
Reolink 12MP-es vandálbiztos PoE biztonsági kamera
145°-os széles látószöggel, színes éjjellátóval, kétirányú hanggal, intelligens személy-/jármű-/kisállatérzékeléssel és IP67 időjárásállósággal, RLC-1240A
hirdetés
Analóg-digitális konverter (ADC)
Az ESP32 két 12 bites SAR analóg-digitális konverterrel rendelkezik. Az ADC1 8 csatornás, míg az ADC2 10 csatornás.
Az ADC bemeneti csatornák 12 bites felbontásúak. Ez azt jelenti, hogy 0 és 4095 közötti analóg értékeket kapunk, amelyekben a 0 érték 0 V-nak, a 4095 érték 3,3 V-nak felel meg.
A kódban beállíthatjuk az ADC csatornák felbontását, valamint az ADC tartományt is.
Előfordulhat, hogy wifi használata esetén az ADC2 rendellenesen müködhet. Amennyiben szükségünk van a wifire, lehetőség szerint használjuk helyette az ADC1-et.
Az ADC-hez tartozó dedikált GPIO-k az alábbi táblázatban található:
| 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 |

Az ESP32 ADC kissé zajos, viselkedése nem lineáris. Valószínűleg nem tesz különbséget 0 és 0,1 V, illetve 3,2 és 3,3 V között. Ha pontosabb Analóg-Digitál konverterre van szükség, fontoljuk meg külső ADC használatát.

Digitális-analóg konverter (DAC)
Az ESP32 fedélzetén találunk 2 független 8 bites digitális-analóg konvertert (DAC) a digitális értékek analóg feszültséggé alakításához. Ez az egyenfeszültség megjelenik a DAC csatorna GPIO kimenetén.
A 8 bites DAC azt jelenti, hogy az ESP32 képes átalakítani a digitális bemeneti értékét 0-tól 255-ig egyenértékű analóg feszültségű kimenetté 0V -tól a referenciafeszültségig(Vref). A következő képlet segít megérteni, hogy milyen analóg feszültség várható a kimeneten a digitális bemeneti értékhez képest.
Kimeneti feszültség(DAC) = Digitális bemeneti érték X (Vref / 255)
A DAC belső ellenálláshálózattal rendelkezik, és a tápfeszültség közeli feszültségszintet használ bemeneti referenciafeszültségként(Vref).

A DAC a ‘Vref’ referenciafeszültséget az ESP32 chip VDD3P3_RTC érintkezőjéről szerzi be, amely ideális esetben megegyezik a tápfeszültséggel.
A DAC-hoz tartozó dedikált GPIO-k:
| DAC1 | GPIO25 |
| DAC2 | GPIO26 |
Az alábbi ábrán láthatjuk, hogy hol helyezkedik el ez a két pin.

RTC GPIO-k
Az ESP32 rendelkezik 16 RTC GPIO-val, amelyek az RTC Low-Power alrendszer részét képezik. Ezek az RTC GPIO-k külső forrásból képesek felébreszteni az ESP32-t a mélyalvásból, amikor az Ultra Low Power (ULP) társprocesszor fut.
Ez azt jelenti, hogy felébreszthetjük az ESP32-t a mélyalvásból például az egyik RTC GPIO-hoz csatlakoztatott gomb megnyomásával.
Az RTC GPIO dedikált csapjai a következő ábrán látható:
| 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 |
A következő képen láthatjuk, az ESP32 38 pines fejlesztőkártyán melyek az RTC_GPIO csapok:

PWM
A PWM (Pulse Width Modulation) egy módszer analóg jelek előállítására az ESP32 digitális kimeneti csapokon. 0V és 3,3V (HIGH / LOW) között váltakozó négyszögjelet hozunk létre. A HIGH és LOW szintek közötti időtartam, az impulzusszélesség határozza meg a kimeneti analóg feszültséget.
Az ESP32 PWM vezérlő 16 független csatornával rendelkezik, amelyek konfigurálhatók különböző tulajdonságú PWM jelek generálására. Minden kimenet, amely kimenetként működhet, használható PWM lábként. A GPIO34, GPIO35, GPIO36 és GPIO39 pinek nem tudnak PWM-et generálni, mert ezek csak bemeneti csapok.
A PWM jel beállításához a következő paramétereket kell megadnia a kódban:
| Frekvencia. |
| Impulzusszélesség felbontása (1 – 16 bit). |
| PWM csatorna (0-15). |
| GPIO, amely a PWM jelet generálja. |
Interrupt
A megszakítások az ESP32 mikrokontrolleren bármelyik GPIO pinhez konfigurálhatók.
SwitchBot Smart Mozgásérzékelő
Mozgásérzékelő riasztóval, vezeték nélküli otthoni biztonsági rendszer, adjon hozzá Hub Minit, hogy Alexa kompatibilis legyen
hirdetés
Kapacitív érintésérzékeny GPIO-k
Az ESP32 10 belső kapacitív érintésérzékelőt tartalmaz. Ezek a szenzorok képesek érzékelni a változásokat bármiben, ami elektromos töltést tartalmaz. Ez lehetővé teszi számukra, hogy észleljék a GPIO-k például ceruzával vagy ujjal történő megérintését.
A kapacitív érintőérzékelők segítségével fel tudjuk ébreszteni az ESP32 mikrovezérlőt a mélyalvásból.
A belső érintésérzékelők ezekhez a dedikált GPIO-csapokhoz csatlakoznak.
| Touch0 | GPIO4 |
| Touch1 | GPIO0 |
| Touch2 | GPIO2 |
| Touch3 | GPIO15 |
| Touch4 | GPIO13 |
| Touch5 | GPIO12 |
| Touch6 | GPIO14 |
| Touch7 | GPIO27 |
| Touch8 | GPIO33 |
| Touch9 | GPIO32 |

GPIO áramfelvétel
Az ESP32 GPIO csaponként maximális kimeneti árama 40mA, valamint egyenként maximum 28mA áramot képesek felvenni.
ESP32 rendszerindítás – Strapping Pinek
Az ESP32 chipnek minden indításkor vagy újraindításakor specifikus konfigurációs paraméterekre van szüksége, amelyek meghatározzák a rendszerindítási módot, a feszültségbeállításokat, ROM-üzenetek esetleges nyomtatását, JTAG jelforrás beállítását, stb.
Egyes érintkezők egyedi funkcióval rendelkeznek az ESP32 indításakor. Ezeket Strapping Pineknek nevezik. A Strapping pinek magas, alacsony vagy lebegő állapotok kombinációi határozzák meg az ESP32 rendszerindítási viselkedését.
Sikeres rendszerindítás után ezek a lábak normál GPIO csapokként müködnek.
Lehetőség szerint kerüljük ezeknek a pineknek a hasznlatát, mert a bootolási folyamat alatt az állapotuk megváltoztatása váratlan viselkedéshez, hibákhoz vagy akár rendszerösszeomláshoz vezethet.
Az ESP32 chip a következő Strapping csapokkal rendelkezik:
| GPIO0 | Rendszerindításkor MAGAS állapotban van, a programozáshoz ALACSONY állapotba kell húzni. Az ESP32 Wroom modul soros illesztője ezt kezeli helyettünk. |
| GPIO2 | Programozáshoz ALACSONY állapotba kell húzni. |
| GPIO4 | A „GPIO_STRAP” regiszter tartalmazza a GPIO 4-et, de ezt egyetlen rendszerindítási mód sem használja. |
| GPIO5 | GPIO5 és GPIO15 feszültségszintje befolyásolja az SDIO Slave időzítését. |
| GPIO12 | Beállítja az SPI flash memória feszültségét. Ha alacsony 3,3V, Ha magas 1,8V a feszültség. Az ESP32 Wroom modul 3,3V-os Flash memóriát tartalmaz |
| GPIO15 | Ha magas, ez az alapértelmezett, az ESP32 kiírja a soros portra indításkor a hibakeresési naplót. Ha alacsonyra húzzuk, ez nem történik meg. GPIO5 és GPIO15 feszültségszintje befolyásolja az SDIO Slave időzítését. |
JTAG
A JTAG pinek hibakeresési célokra használhatók. Ha nincs szükség JTAG hibakeresésre, ezek a csapok normál GPIO-ként használhatók.
| GPIO12 | MTDI pin | |
| GPIO13 | MTCK pin | |
| GPIO14 | MTMS pin | |
| GPIO15 | MTDO pin |
Enable – EN pin
Az ESP32-wroom fejlesztőkártya EN pinje magasra van húzva és az ESP32 chip „CHIP_PU” (Chip PowerUp) pinjéhez kapcsolódik. Ha alacsonyra húzzuk, az ESP32 chip le lesz tiltva. Ez a pin csatlakozik a modul EN gombjához. A gomb megnyomásával újraindíthatjuk az ESP32 mikrokontrollert.
ESP32 beépített Hall effektus érzékelő
Az ESP32 beépített Hall effektus érzékelővel is rendelkezik, amely érzékeli a környezetében lévő mágneses tér változásait.

I2S
Az I2S (Inter-IC Sound) egy digitális hangátviteli protokoll. Az ESP32 két I2S perifériával rendelkezik, az I2S0 és az I2S1 . Mindegyik konfigurálható vezérlőként vagy célként, és mindegyik lehet audio adó vagy vevő.
Az ESP32-n nincsenek dedikált I2S pinek, a kódban kell hozzárendelni.