Podłączasz czujnik, przekaźnik albo wyświetlacz do płytki ESP32 i nagle okazuje się, że nie każdy numer na obudowie oznacza zwykłe wejście lub wyjście. Schemat oznaczany jako esp32 pinout pomaga szybko rozpoznać funkcje GPIO, piny zasilania, interfejsy komunikacyjne i wyprowadzenia, których lepiej nie używać. Poniżej pokazuję, jak czytać taki diagram i bezpiecznie dobrać piny do własnego projektu.
Najważniejsze informacje o pinach ESP32 w jednym miejscu
- GPIO6-GPIO11 są zwykle zajęte przez pamięć flash i nie powinno się ich używać do własnych układów.
- GPIO34-GPIO39 działają tylko jako wejścia, więc nie wysterują diody ani przekaźnika.
- GPIO0, GPIO2, GPIO5, GPIO12 i GPIO15 wpływają na uruchamianie układu i wymagają ostrożności.
- ESP32 pracuje z logiką 3,3 V i nie jest układem odpornym na sygnały 5 V.
- Do pomiarów analogowych przy włączonym Wi-Fi najlepiej wybierać ADC1, czyli GPIO32-GPIO39.

Jak czytać diagram pinów ESP32
Najpierw trzeba rozdzielić dwie rzeczy. ESP32 to rodzina mikrokontrolerów, a popularna płytka deweloperska może mieć moduł ESP32-WROOM-32, ESP32-WROOM-32E albo wariant z pamięcią PSRAM. Dlatego układ wyprowadzeń należy zawsze porównywać z konkretną płytką, a nie tylko z przypadkowym obrazkiem znalezionym w internecie.
Na typowym diagramie spotkasz oznaczenia GPIO, czyli numery wewnętrznych linii wejścia i wyjścia. Napisy takie jak IO21, D18 czy GPIO21 często odnoszą się do tego samego wyprowadzenia, ale oznaczenia 3V3, 5V, EN i GND opisują już zasilanie lub sterowanie płytką.
| Oznaczenie | Znaczenie | Praktyczne zastosowanie |
|---|---|---|
| GPIO | Cyfrowe wejście lub wyjście | Przyciski, diody, przekaźniki, sterowanie modułami |
| 3V3 | Zasilanie 3,3 V | Czujniki i moduły pracujące z logiką 3,3 V |
| 5V | Linia zasilania doprowadzona z USB lub zewnętrznego źródła | Zasilanie płytki albo urządzeń wymagających 5 V |
| GND | Masa układu | Wspólny punkt odniesienia dla wszystkich połączeń |
| EN | Enable, czyli reset i włączenie układu | Resetowanie mikrokontrolera |
W praktyce najczęstszy błąd polega na pomyleniu numeru fizycznego pinu z numerem GPIO. W programie Arduino używasz na przykład GPIO21, nawet jeśli na płytce znajduje się on jako dwudzieste pierwsze wyprowadzenie od jednej z krawędzi. Numer pozycji na listwie goldpinów nie jest numerem używanym w kodzie.
Nie wszystkie GPIO są równie dobrym wyborem
ESP32 ma sporo wyprowadzeń, ale ich możliwości nie są identyczne. Ja przy pierwszym projekcie dzielę je na trzy grupy: piny wygodne do codziennego użycia, piny wymagające ostrożności oraz piny, których nie traktuję jako dostępnych GPIO.
Piny zwykle bezpieczne dla początkujących
Do prostych wyjść cyfrowych często wybieram GPIO16, GPIO17, GPIO18, GPIO19, GPIO21, GPIO22, GPIO23, GPIO25, GPIO26, GPIO27, GPIO32 i GPIO33. Ostateczny wybór zależy od tego, czy projekt korzysta z SPI, I2C, UART, PWM albo pomiarów analogowych, ale te numery dają zwykle dużo swobody.
GPIO25 i GPIO26 mają dodatkową funkcję DAC, czyli przetwornika cyfrowo-analogowego. Dzięki temu mogą generować napięcie analogowe, a nie tylko stan niski lub wysoki. To przydatne między innymi przy prostym generatorze sygnału, choć nie zastąpi precyzyjnego zewnętrznego przetwornika.
Piny tylko do odczytu
GPIO34, GPIO35, GPIO36 i GPIO39 są wejściami. Możesz podłączyć do nich przycisk, sygnał z czujnika albo wejście analogowe, ale nie ustawisz na nich stanu wysokiego i nie wysterujesz diody. Co więcej, te linie nie mają zwykłych wewnętrznych rezystorów podciągających, więc przy przycisku trzeba zastosować rezystor zewnętrzny.
Wyprowadzenia zajęte przez pamięć
GPIO6-GPIO11 są połączone z pamięcią flash modułu. Na wielu płytkach pojawiają się na listwie pinów, lecz ich wykorzystanie może zawiesić program albo uniemożliwić uruchomienie mikrokontrolera. Obecność numeru na diagramie nie oznacza więc, że jest to pin dostępny dla użytkownika.
To jeden z tych szczegółów, który na papierze wygląda niewinnie, a w praktyce potrafi zabrać kilka godzin. Jeżeli po podłączeniu modułu do GPIO6, GPIO7, GPIO8, GPIO9, GPIO10 lub GPIO11 program zaczyna losowo się resetować, pierwszym podejrzanym powinna być właśnie pamięć flash.
GPIO rozruchowe mogą zmienić zachowanie płytki
Niektóre linie są odczytywane podczas startu ESP32. Nazywa się je strapping pins, czyli pinami konfiguracyjnymi rozruchu. Ich stan w chwili resetu decyduje między innymi o trybie uruchamiania, komunikatach startowych albo napięciu używanym przez interfejs pamięci.
| GPIO | Dlaczego trzeba uważać | Typowy problem |
|---|---|---|
| GPIO0 | Wybiera normalny start lub tryb programowania | Układ wchodzi do bootloadera zamiast uruchomić aplikację |
| GPIO2 | Bierze udział w wyborze trybu startu | Problemy z programowaniem przy niewłaściwym poziomie logicznym |
| GPIO5 | Ma funkcję konfiguracyjną interfejsu SDIO | Konflikt z modułem podłączonym podczas resetu |
| GPIO12 | Wpływa na konfigurację napięcia pamięci | Brak startu lub niestabilna praca przy złym stanie pinu |
| GPIO15 | Wpływa na komunikaty i konfigurację startową | Nieoczekiwane logi albo problemy z uruchomieniem |
Nie oznacza to, że tych GPIO nie wolno używać. Można, ale urządzenie podłączone do takiej linii nie powinno wymuszać przypadkowego poziomu logicznego podczas resetu. Przy prostym przycisku zwykle da się to rozwiązać rezystorem, natomiast przekaźnik, konwerter poziomów lub moduł z własnym układem startowym może już wejść w konflikt.
Szczególnie ostrożnie traktuję GPIO12. W niektórych konfiguracjach wymuszenie niewłaściwego poziomu podczas uruchamiania prowadzi do problemów z pamięcią. Jeżeli nie ma wyraźnego powodu, wybieram inny pin i oszczędzam sobie diagnostyki.
Interfejsy komunikacyjne i ich najwygodniejsze piny
Jedną z mocnych stron ESP32 jest możliwość przypisywania funkcji peryferyjnych do różnych GPIO. Nie oznacza to jednak, że każdy wariant jest równie wygodny. Domyślne zestawy są dobrze opisane w bibliotekach i przykładach, dlatego przy pierwszym projekcie zwykle nie opłaca się ich zmieniać.
I2C dla czujników
Najczęściej używany zestaw I2C to GPIO21 jako SDA i GPIO22 jako SCL. SDA przenosi dane, a SCL sygnał zegarowy. Do jednej magistrali można podłączyć kilka czujników, jeśli mają różne adresy albo korzystają z multipleksera.
I2C wymaga rezystorów podciągających. Wiele gotowych modułów ma je już na płytce, ale przy połączeniu kilku urządzeń mogą pojawić się problemy z nadmiernie małą rezystancją. Dla krótkich przewodów i typowych modułów wartości około 4,7 kΩ są częstym punktem wyjścia, choć finalny dobór zależy od napięcia, długości przewodów i liczby urządzeń.
SPI dla wyświetlaczy i szybkich modułów
Popularny zestaw VSPI wykorzystuje GPIO18 jako SCK, GPIO19 jako MISO, GPIO23 jako MOSI oraz GPIO5 jako CS. SCK to zegar, MISO i MOSI służą do przesyłania danych w dwóch kierunkach, a CS wybiera konkretne urządzenie.
GPIO5 jest jednak pinem konfiguracyjnym, dlatego przy wymagającym projekcie można przenieść CS na inne, wygodniejsze wyprowadzenie. Sam interfejs SPI nadal może korzystać z GPIO18, GPIO19 i GPIO23, a wybór urządzenia odbywa się przez osobne linie CS.
Przeczytaj również: Sterowanie silnikiem DC z Arduino - Poradnik bez błędów!
UART dla komunikacji szeregowej
GPIO1 i GPIO3 są zwykle używane przez UART0, czyli port połączony z układem USB-UART na płytce. To właśnie przez niego odbywa się programowanie i często pojawiają się komunikaty diagnostyczne. Podłączenie zewnętrznego urządzenia do tych pinów może zakłócać wgrywanie programu.
Do dodatkowej komunikacji szeregowej wygodniejsze bywają GPIO16 i GPIO17. Trzeba jednak sprawdzić wersję modułu, ponieważ w wariantach z PSRAM część tych linii może być zajęta wewnętrznie. Diagram konkretnej płytki ma tu większe znaczenie niż ogólna tabela dla rodziny ESP32.
Zasilanie i sygnały 3,3 V decydują o bezpieczeństwie układu
ESP32 nie jest mikrokontrolerem 5-woltowym. Jego logika pracuje przy 3,3 V, dlatego bezpośrednie podanie 5 V na GPIO może uszkodzić wejście. Dotyczy to również sygnałów z modułów Arduino, czujników i konwerterów, które nie mają wyjść zgodnych z poziomami 3,3 V.
Jeżeli urządzenie wysyła sygnał 5 V, stosuję dzielnik rezystorowy albo konwerter poziomów logicznych. Dla prostych, wolnych sygnałów dzielnik często wystarcza. Przy szybkiej magistrali, takiej jak SPI, lepszy jest odpowiedni konwerter, ponieważ pojemności pasożytnicze i sposób przełączania mogą zniekształcić przebieg.
Pin 3V3 służy do zasilania urządzeń wymagających 3,3 V, ale nie jest dobrym źródłem dla dużych obciążeń. Serwomechanizm, taśma LED albo przekaźnik powinny mieć osobne zasilanie, a masa tego zasilacza musi być połączona z GND ESP32. Brak wspólnej masy jest częstą przyczyną pozornie losowych błędów komunikacji.
Przy pomiarach analogowych trzeba pilnować nie tylko napięcia, lecz także źródła sygnału. Wejście ADC nie jest idealnym woltomierzem, a odczyty mogą zależeć od tłumienia, impedancji i zakłóceń. Do stabilnych pomiarów wybieram ADC1 na GPIO32-GPIO39, ponieważ kanały ADC2 mogą kolidować z aktywnym Wi-Fi.
Jak dobrać piny do typowego projektu
Najprościej zacząć od funkcji, a dopiero później przypisać numery GPIO. Poniższy układ sprawdza się jako punkt wyjścia dla małego projektu z czujnikiem, wyświetlaczem i sygnalizacją.
| Element | Proponowane GPIO | Na co zwrócić uwagę |
|---|---|---|
| Dioda LED | GPIO25, GPIO26, GPIO27 lub GPIO33 | Dodaj rezystor, zwykle 220-1000 Ω |
| Przycisk | GPIO32 lub GPIO33 | Użyj podciągania i nie obciążaj pinu podczas resetu |
| Czujnik analogowy | GPIO32-GPIO39 | Nie przekraczaj 3,3 V i pamiętaj, że GPIO34-GPIO39 są tylko wejściami |
| Czujnik I2C | GPIO21 i GPIO22 | Sprawdź adres oraz obecność rezystorów podciągających |
| Wyświetlacz SPI | GPIO18, GPIO19, GPIO23 oraz dowolny bezpieczny CS | Nie zajmuj GPIO6-GPIO11 |
| Dodatkowy UART | GPIO16 i GPIO17 | Sprawdź, czy płytka nie korzysta z PSRAM |
Przy większej liczbie urządzeń tworzę sobie prostą mapę połączeń przed włożeniem przewodów. Zapisuję nazwę sygnału, numer GPIO, napięcie oraz to, czy pin jest używany podczas startu. Taka minuta planowania często zapobiega sytuacji, w której działający czujnik blokuje programowanie albo wyświetlacz zakłóca uruchamianie płytki.
Błędy, przez które pinout ESP32 wprowadza w błąd
Pierwszy błąd to korzystanie z diagramu innej wersji płytki. Klony DevKit mogą mieć 30, 36 albo 38 wyprowadzeń, a ich opisy na laminacie bywają skrócone. Zawsze porównuję numer GPIO nadrukowany na płytce z dokumentacją modułu i dopiero wtedy podłączam układ.
Drugi problem to założenie, że każdy pin oznaczony jako GPIO działa identycznie. GPIO34-GPIO39 są tylko wejściami, GPIO6-GPIO11 współpracują z pamięcią, a piny rozruchowe mogą zmienić zachowanie całego mikrokontrolera. Sam numer GPIO nie mówi jeszcze, czy nadaje się on do konkretnego zadania.
Trzeci błąd dotyczy zasilania. Podanie 5 V na wejście, brak wspólnej masy albo zasilanie silnika z pinu 3V3 może prowadzić do resetów i uszkodzeń. Jeżeli układ działa poprawnie bez Wi-Fi, a zaczyna się zawieszać po jego włączeniu, sprawdzam przede wszystkim pobór prądu, spadki napięcia i konflikt z ADC2.
Na końcu sprawdzam dokumentację biblioteki, której używam. Biblioteka wyświetlacza, karty SD albo konkretnego czujnika może domyślnie zajmować inne piny niż te, które wybrałem. Zmiana konfiguracji jest możliwa, ale lepiej zrobić ją świadomie niż później szukać błędu w samym diagramie.
Dobry wybór GPIO zaczyna się od sprawdzenia płytki
Najbardziej uniwersalna zasada brzmi prosto: wybieraj piny zgodnie z ich funkcją, napięciem i zachowaniem podczas startu. Do zwykłych sygnałów cyfrowych używaj dostępnych GPIO, do analogowych preferuj ADC1, a linii flash oraz pinów tylko wejściowych nie traktuj jako zamienników dla dowolnego wyprowadzenia.
Jeżeli projekt ma działać stabilnie, zostaw sobie kilka wolnych GPIO na późniejsze rozszerzenia. ESP32 daje dużą elastyczność, ale właśnie dlatego łatwo zbudować układ, w którym kilka peryferiów walczy o te same zasoby. Sprawdzenie konkretnego diagramu płytki przed lutowaniem jest szybsze, tańsze i bezpieczniejsze niż naprawianie źle zaprojektowanego połączenia.