ESP32 PinOut – melyik pin mire jó

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ő
LoRa V3 ESP32 LX7 Dual-Core

LoRa V3 ESP32 LX7 Dual-Core

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:
  green-icon – használható
  yellow-icon – használatakor figyelnünk kell
  red-icon – nem javasolt a használatuk

GPIO 0
Bemenet:yellow-icon Kimenet:yellow-icon

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:red-icon Kimenet:yellow-icon

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:green-icon Kimenet:green-icon

Ez a pin a fedélzeti LED-hez csatlakozik. Strapping Pin.

GPIO 3
Bemenet:yellow-icon Kimenet:red-icon

UART Rx0 pin, program feltöltésre, rendszerindításkor hibakeresésre használható. Bemenetként feltételesen használható.

GPIO 4
Bemenet: green-icon Kimenet: green-icon

Kimenetként és bemenetként feltétel nélkül használható.

GPIO 5
Bemenet: green-icon Kimenet: green-icon

PWM jelet küld rendszerindításkor. Strapping Pin.

GPIO 6
Bemenet: red-icon Kimenet: red-icon

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: red-icon Kimenet: red-icon

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: red-icon Kimenet: red-icon

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: red-icon Kimenet: red-icon

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: red-icon Kimenet: red-icon

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: red-icon Kimenet: red-icon

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: yellow-icon Kimenet: green-icon

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: green-icon Kimenet: green-icon

Jtag MTCK pin.

GPIO 14
Bemenet: green-icon Kimenet: green-icon

PWM jelet küld rendszerindításkor. Jtag MTMS pin.

GPIO 15
Bemenet: yellow-icon Kimenet: green-icon

Rendszerindításkor magasnak kell lennie. Strapping Pin. Jtag MTDO pin.

GPIO 16
Bemenet: green-icon Kimenet: green-icon

UART Rx2 pin

GPIO 17
Bemenet: green-icon Kimenet: green-icon

UART Tx2 pin

GPIO 18
Bemenet: green-icon Kimenet: green-icon
GPIO 19
Bemenet: green-icon Kimenet: green-icon
GPIO 21
Bemenet: green-icon Kimenet: green-icon

I2C SDA pin

GPIO 22
Bemenet: green-icon Kimenet: green-icon

I2C SCL pin

GPIO 23
Bemenet: green-icon Kimenet: green-icon
GPIO 25
Bemenet: green-icon Kimenet: green-icon
GPIO 26
Bemenet: green-icon Kimenet: green-icon
GPIO 27
Bemenet: green-icon Kimenet: green-icon
GPIO 32
Bemenet: green-icon Kimenet: green-icon
GPIO 33
Bemenet: green-icon Kimenet: green-icon
GPIO 34
Bemenet: green-icon Kimenet: red-icon

Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.

GPIO 35
Bemenet: green-icon Kimenet: red-icon

Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.

GPIO 36
Bemenet: green-icon Kimenet: red-icon

Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.

GPIO 39
Bemenet: green-icon Kimenet: red-icon

Ennek a tűknek nincs belső felhúzó vagy lehúzó ellenállása. Csak bemenetként használható.

ESP32 CAM fejlesztőkártya

ESP32 CAM fejlesztőkártya

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.

UARTRX IOTX IOCTSRTS
UART0GPIO3GPIO1
UART1GPIO9GPIO10GPIO6GPIO11
UART2GPIO16GPIO17GPIO8GPIO7

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.

GPIO21SDA
GPIO22SCL

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:

SPIMOSIMISOCLKCS
VSPIGPIO 23GPIO 19GPIO 18GPIO 5
HSPIGPIO 13GPIO 12GPIO 14GPIO 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
GPIO7SDO/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

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_0GPIO36
ADC1_1GPIO37
ADC1_2GPIO38
ADC1_3GPIO39
ADC1_4GPIO32
ADC1_5GPIO33
ADC1_6GPIO34
ADC1_7GPIO35
.
ADC2_0GPIO4
ADC2_1GPIO0
ADC2_2GPIO2
ADC2_3GPIO15
ADC2_4GPIO13
ADC2_5GPIO12
ADC2_6GPIO14
ADC2_7GPIO27
ADC2_8GPIO25
ADC2_9GPIO26

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:

DAC1GPIO25
DAC2GPIO26

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_GPIO0GPIO36
RTC_GPIO3GPIO39
RTC_GPIO4GPIO34
RTC_GPIO5GPIO35
RTC_GPIO6GPIO25
RTC_GPIO7GPIO26
RTC_GPIO8GPIO33
RTC_GPIO9GPIO32
RTC_GPIO10GPIO4
RTC_GPIO11GPIO0
RTC_GPIO12GPIO2
RTC_GPIO13GPIO15
RTC_GPIO14GPIO13
RTC_GPIO15GPIO12
RTC_GPIO16GPIO14
RTC_GPIO17GPIO27

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

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.

Touch0GPIO4
Touch1GPIO0
Touch2GPIO2
Touch3GPIO15
Touch4GPIO13
Touch5GPIO12
Touch6GPIO14
Touch7GPIO27
Touch8GPIO33
Touch9GPIO32

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:

GPIO0Rendszerindí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.
GPIO4A „GPIO_STRAP” regiszter tartalmazza a GPIO 4-et, de ezt egyetlen rendszerindítási mód sem használja.
GPIO5GPIO5 é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.

GPIO12MTDI pin
GPIO13MTCK pin
GPIO14 MTMS pin
GPIO15MTDO 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.