Распиновка ESP32: назначение GPIO на одной схеме
ESP32 DevKit V1 выносит на края платы 25 GPIO с богатой периферией: 12-битный АЦП, два DAC, ёмкостные сенсоры, три UART, шины I2C и SPI, а поверх этого WiFi с Bluetooth на борту. Логика у платы 3,3 В, а не 5 В, и это главное отличие от Arduino Uno при подключении модулей: пятивольтовый выход датчика, подключённый напрямую к GPIO ESP32, может повредить вывод микроконтроллера.
Нарисовать схему на бумаге мало. Нужен разбор, что умеет каждый вывод, какие из них нельзя трогать в момент подачи питания и сколько тока плата отдаст наружу. Ниже полная карта GPIO DevKit V1, разбор пинов-ловушек и честный список того, что на плате работает не так, как ожидаешь.
Уроки по ESP32 с кодом собраны в разделе ESP32, а проверить логику до прошивки можно в симуляторе.
Интерактивная схема GPIO
30 пинов DevKit: strap-ловушки, ADC при WiFi, подтяжки и питание — по клику на вывод.
Подгружаем интерактив…
Что умеет каждый GPIO
| Группа выводов | Периферия | Особенности |
|---|---|---|
| GPIO 32–39 | АЦП1, восемь каналов по 12 бит | GPIO 34–39 только вход, подтяжек у них нет |
| GPIO 25, 26 | два 8-битных DAC | единственные аналоговые выходы платы |
| GPIO 4, 13, 14, 15, 27, 32, 33 | ёмкостные сенсоры касания | считывают палец без кнопки |
| GPIO 21, 22 | I2C: SDA и SCL | выводы по умолчанию, шина подтянута на плате |
| GPIO 5, 18, 19, 23 | SPI по умолчанию | SCK 5, MISO 18, MOSI 19, CS 23 |
| GPIO 1, 3 | UART0 | через них работает USB-мост, свой Serial туда не вешайте |
| GPIO 16, 17 | UART2 | свободны, удобны для второго Serial |
| GPIO 0, 2, 5, 12, 15 | strapping-пины | состояние на старте важно, разбор ниже |
Пины-ловушки: что нельзя использовать наугад
- GPIO 6–11 заняты внутренней флеш-памятью: использовать их нельзя, плата не запустится.
- GPIO 0 участвует в выборе режима прошивки: в скетче работать можно, но на старте вывод должен быть HIGH.
- GPIO 2 на плате связан с бортовым светодиодом и с режимом загрузки, внешняя подтяжка здесь лишняя.
- GPIO 12 (MTDI) задаёт напряжение питания флеш-памяти: если на старте вывод HIGH, плата не загрузится.
- GPIO 34–39 только вход, подтяжек у них нет, режим INPUT_PULLUP на них не работает.
- ADC2 (GPIO 0, 2, 4, 12–15, 25–27) не работает одновременно с WiFi, берите ADC1 (GPIO 32–39).
Тупик: датчик показывал ноль, как только включился WiFi
Первый стенд с датчиком температуры мы собирали по привычке от Uno: выбрали свободный вывод и подключили модуль по аналоговому входу. Пока WiFi был выключен, скетч показывал осмысленные числа. Стоило включить точку доступа, и показания превратились в нули, причём ровно в момент, когда модуль отдавал данные по сети.
Мы решили, что дело в шуме питания, и начали перекладывать провода, отключать модуль и менять вывод. Вышло обратное: выяснилось, что аналоговый вход попал в ADC2, а у ESP32 этот второй АЦП физически отключается, пока модуль работает с WiFi и Bluetooth. Это не помеха, это конструктивная особенность: радиочастотная часть и второй преобразователь делят один узел. Перенесли датчик на ADC1, и всё заработало. Правило, которое мы теперь проверяем первым: любой аналоговый вход на ESP32 берите из диапазона GPIO 32–39, если в проекте есть WiFi.
Личный опыт: сколько времени уходит на первый стенд
Сборка первого стенда на ESP32 заняла у нас заметно больше времени, чем сборка такого же на Uno, и почти всё это время ушло не на пайку, а на согласование распиновки. Пока не появилась таблица «что умеет каждый вывод», мы дважды подключали модуль к GPIO 12 и получали плату, которая не прошивается. Обе попытки выглядели одинаково: порт исчезал, IDE писала, что не удаётся подключиться, а плата тем временем перезагружалась по кругу.
Второй сюрприз был с питанием. Пока ESP32 работала от USB-порта компьютера, всё было ровно, но стоило добавить реле или яркую ленту на WS2812, как связь по WiFi начала рваться, а загрузчик переставал видеть плату. Причина та же, что и в первом случае: потребление выросло, стабилизатор на плате не справился, напряжение просело. С тех пор мы собираем стенды по правилу «рассчитывай худший случай, а не типичный», и отдельно проверяем, что питание идёт от одного источника с общей землёй.
Авторская позиция: какой ESP32 брать новичку
Берите DevKit V1 на 30 контактов, а не платы с 36 или 38 выводами. Лишние выводы у ESP32 почти всегда идут к неиспользуемым на плате чипам и выглядят как свободные, хотя на них нет ни периферии, ни подтяжек. Новичку важнее предсказуемость: любая распиновка из учебника совпадает с DevKit V1 один в один, а на платах с 38 выводами половина схем перестаёт работать без переноса.
Второе правило: не покупайте сразу связку ESP32 плюс десяток модулей. Для первого проекта хватит платы, двух проводов, светодиода с резистором и, если нужно, адаптера питания. Модули на 5 В придётся либо питать отдельно, либо согласовывать уровни через делитель, и это отдельный урок, который проще пройти, когда базовая схема уже работает.
Питание ESP32 DevKit
| Вывод | Напряжение | Назначение |
|---|---|---|
| micro-USB / USB-C | 5 В | Основное питание и прошивка |
| Vin | 5 В | Питание от внешнего источника |
| 3V3 | 3.3 В | Питание датчиков, ток ограничен стабилизатором платы |
| GND | общий провод | Обязательно общий с внешним питанием |
От USB-порта компьютера ESP32 живёт спокойно, но с оговоркой. В пиках передачи по WiFi модуль потребляет сотни миллиампер, и если к выводу 3V3 подключены ещё потребители, стабилизатор платы уходит в просадку. Связь по WiFi начинает рваться, загрузчик перестаёт видеть плату, а на Serial Monitor вместо данных идут нули. Для проектов с сервоприводами, реле или лентой WS2812 берите отдельный источник 5 В на вывод Vin и общую землю с платой, а USB в этот момент не подключайте.