Розпіновка ESP32 DevKit: які GPIO можна використовувати, а які — краще ні
38 виводів, але вільних для будь-чого — лише близько п'ятнадцяти. Шпаргалка з поясненнями: піни флеш-пам'яті, лише-вхідні GPIO34–39, strapping-піни, через які плата не прошивається, ADC2 і Wi-Fi, струми і виводи для пробудження з deep sleep.
Коротка відповідь
Для кнопок, світлодіодів, реле й датчиків без вагань беріть GPIO4, 13, 14, 16–19, 21–23, 25–27, 32, 33. Для аналогових входів — GPIO32–39 (ADC1). Усе інше має свої застереження, про які нижче.
Шпаргалка
| GPIO | Що важливо знати | Висновок |
|---|---|---|
| 0 | strapping: LOW при старті — режим прошивки; кнопка BOOT | обережно |
| 1, 3 | UART0 TX/RX — туди йде Serial і прошивка | не чіпати |
| 2 | strapping, вбудований світлодіод; має бути LOW/вільним при прошивці | обережно |
| 4 | ADC2, touch T0 | ✔ |
| 5 | strapping (HIGH при старті), SPI SS | ✔ з застереженням |
| 6–11 | флеш-пам'ять модуля — використання «вбиває» плату | ✘ ніколи |
| 12 | strapping: HIGH при старті перемикає флеш на 1.8 В — плата не завантажується | обережно |
| 13, 14 | ADC2, touch | ✔ |
| 15 | strapping (HIGH при старті), виводить лог завантаження | ✔ з застереженням |
| 16, 17 | UART2 за замовчуванням (на WROVER — PSRAM!) | ✔ на WROOM |
| 18, 19, 23 | SPI SCK, MISO, MOSI | ✔ |
| 21, 22 | I2C SDA, SCL | ✔ |
| 25, 26 | DAC1, DAC2, ADC2 | ✔ |
| 27 | ADC2, touch | ✔ |
| 32, 33 | ADC1, touch, кварц RTC | ✔ |
| 34, 35, 36, 39 | лише вхід, без підтяжок, ADC1 | лише для входів |
Strapping-піни
У момент ввімкнення ESP32 зчитує рівні на GPIO0, 2, 5, 12 і 15, щоб вирішити, як завантажуватися. Звідси типові загадки:
- Плата не прошивається, поки підключений модуль. Модуль тягне GPIO2 або GPIO12 куди не слід. Особливо небезпечний GPIO12: HIGH при старті вмикає живлення флешу 1.8 В, і плата циклічно перезавантажується з
flash read err. - Реле клацає при ввімкненні. На GPIO0, 2, 5 і 15 при старті з'являються імпульси або ШІМ — не вішайте на них виконавчі пристрої, які не повинні спрацьовувати самі.
GPIO34–39: лише вхід
Ці виводи не можуть бути виходами, і в них немає внутрішніх підтяжок — INPUT_PULLUP мовчки не працює. Кнопку на них під'єднують із зовнішнім резистором 10 кОм. Зате це найкращі аналогові входи: ADC1 працює і з увімкненим Wi-Fi.
ADC2 і Wi-Fi
АЦП має два блоки. ADC2 (GPIO0, 2, 4, 12–15, 25–27) використовується радіомодулем, тож коли Wi-Fi увімкнено, analogRead() на цих виводах повертає помилку або 0. Для датчиків у Wi-Fi-проєкті — лише ADC1: GPIO32–39.
Струм
Рекомендований струм одного виводу — до 20 мА, абсолютний максимум — 40 мА. Світлодіод без резистора або реле без транзистора виводять GPIO з ладу. Сумарно з усіх виводів — не більше ~100 мА; для потужних навантажень — транзистор або MOSFET.
Deep sleep
Прокидатися від виводу (ext0/ext1) ESP32 уміє лише на RTC GPIO: 0, 2, 4, 12–15, 25–27, 32–39. Кнопка пробудження на GPIO16 чи 22 не спрацює.
Спробуйте в симуляторі
Симулятор перевіряє ці правила: pinMode(6, OUTPUT) «вбиває» плату з поясненням, pinMode(34, OUTPUT) дає помилку, а analogRead() на ADC2 з Wi-Fi повертає 0 і попереджає. Відкрийте будь-який приклад, перенесіть провід на «заборонений» вивід і подивіться на вкладку «Проблеми».