Распиновка ESP32: GPIO, питание, ADC, PWM и безопасное подключение

ESP32 – семейство микроконтроллеров с Wi-Fi, Bluetooth и большим набором периферийных функций. Однако запрос «распиновка ESP32» не имеет одной универсальной картинки: у микросхемы, радиомодуля ESP32-WROOM-32 и готовых плат DevKit расположение физических контактов разное. Даже две похожие платы разработки могут отличаться по надписям около штырьков и по доступным выводам. Поэтому перед подключением датчика, дисплея или реле нужно определить точную модель платы и сопоставить её с документацией изготовителя.
Что такое GPIO в ESP32
GPIO – универсальные линии ввода-вывода, которые программа может использовать для считывания логического уровня или управления внешним устройством. Многие выводы имеют альтернативные функции: аппаратный UART, SPI, I2C, PWM, сенсорные входы и аналоговые каналы. Назначение выводов часто гибкое, но не безграничное: часть контактов зарезервирована под внутреннюю память, часть участвует в загрузке, а несколько работают только как входы.
На схеме сначала разделяют три слоя: физический номер контакта микросхемы, имя сигнала на модуле и маркировку штырька платы. Номер GPIO – это программный идентификатор линии, а не порядковый номер штырька на двухрядной гребёнке DevKit. Например, надпись GPIO21 не означает двадцать первый контакт корпуса.
Чем ESP32-WROOM-32 отличается от DevKit
ESP32-WROOM-32 – радиомодуль с антенной, кварцем, флеш-памятью и собственными площадками. DevKit – плата с таким или другим модулем, стабилизатором питания, USB-UART, кнопками EN/BOOT и рядами выводов для макетирования. Расположение контактов двухрядной гребёнки зависит от производителя платы и её ревизии. Схему для 30-контактного DevKit нельзя автоматически переносить на 38-контактный вариант.
Некоторые платы с названием ESP32 используют модули WROVER с дополнительной памятью или другие поколения микроконтроллеров, например S2, S3 либо C3. Их набор GPIO и ограничения отличаются от классического ESP32. Поэтому распиновку всегда привязывают к точной модели. Схема ниже относится к официальной плате Espressif ESP32-DevKitC V4 с модулем ESP32-WROOM-32E (2 × 19 выводов) и не подходит к платам на ESP32-S2, S3 или C3 без сверки.
| Разъём J2 | Разъём J3 |
|---|---|
| 1 – 3V3 | 1 – GND |
| 2 – EN (сброс) | 2 – GPIO23 |
| 3 – GPIO36 (VP), только вход | 3 – GPIO22 (часто I2C SCL) |
| 4 – GPIO39 (VN), только вход | 4 – TX, GPIO1 (UART0) |
| 5 – GPIO34, только вход | 5 – RX, GPIO3 (UART0) |
| 6 – GPIO35, только вход | 6 – GPIO21 (часто I2C SDA) |
| 7 – GPIO32 | 7 – GND |
| 8 – GPIO33 | 8 – GPIO19 |
| 9 – GPIO25 | 9 – GPIO18 |
| 10 – GPIO26 | 10 – GPIO5, strapping |
| 11 – GPIO27 | 11 – GPIO17 |
| 12 – GPIO14 | 12 – GPIO16 |
| 13 – GPIO12, strapping | 13 – GPIO4 |
| 14 – GND | 14 – GPIO0, strapping, кнопка BOOT |
| 15 – GPIO13 | 15 – GPIO2, strapping |
| 16 – SD2 (GPIO9), флеш | 16 – GPIO15, strapping |
| 17 – SD3 (GPIO10), флеш | 17 – SD1 (GPIO8), флеш |
| 18 – CMD (GPIO11), флеш | 18 – SD0 (GPIO7), флеш |
| 19 – 5V | 19 – CLK (GPIO6), флеш |
Напряжение питания и логические уровни
Классический модуль ESP32-WROOM-32 предназначен для питания около 3,3 В согласно диапазону, установленному изготовителем. Логика его GPIO не рассчитана на прямую подачу сигналов 5 В. Это главное отличие от 5-вольтовых плат вроде Arduino Uno и Arduino Nano: модули и схемы, рассчитанные на них, переносят на ESP32 только после проверки уровней. Если периферийный модуль питается от 5 В, это не означает, что все его сигнальные контакты совместимы с 3,3-вольтовой логикой ESP32. В ряде случаев нужен согласователь уровней или специально совместимая периферия.
| Параметр | Значение |
|---|---|
| Напряжение питания модуля | 3,0–3,6 В |
| Ток источника питания | не менее 0,5 А |
| Входной уровень «1», VIH | не ниже 0,75 · VDD |
| Входной уровень «0», VIL | не выше 0,25 · VDD |
| Ток вывода в «1», IOH | до 40 мА (домены VDD3P3_CPU и VDD3P3_RTC), до 20 мА (домен VDD_SDIO) |
| Ток вывода в «0», IOL | 28 мА |
| Суммарный ток всех GPIO | не более 1100 мА (предельное значение) |
| Внутренние подтяжки | около 45 кОм; у GPIO34–39 их нет |
На платах разработки может быть вход 5V/VIN, связанный со стабилизатором. Параметры этого входа определяются конкретной платой, а не одним только даташитом ESP32. Подключать внешнее питание следует только после проверки схемы платы и того, можно ли одновременно подключать USB. Встречаются платы, где такое включение создаёт обратное питание или конфликт источников.
GPIO34–GPIO39: только входы
Для классического ESP32 выводы GPIO34–GPIO39 работают только как входы и не имеют обычного выходного драйвера. Их нельзя использовать как выходы управления светодиодом, реле или генерацией PWM. В зависимости от исполнения платы не все эти сигналы выведены на гребёнку. У этих входов также отсутствуют внутренние подтягивающие резисторы, поэтому для кнопок и открытых коллекторов может потребоваться внешняя подтяжка.
Если программа постоянно читает случайные нули и единицы на таком выводе, первым делом проверяют, не оставлен ли вход «плавающим». Для аналоговых датчиков также важны диапазон напряжения и источник сигнала. Прямое подключение к датчику с выходом выше допустимого напряжения способно повредить микроконтроллер.
GPIO6–GPIO11 и встроенная флеш-память
В классическом модуле ESP32-WROOM-32 линии GPIO6–GPIO11 используются для связи с внешней SPI flash, установленной внутри модуля. Их обычно не следует занимать пользовательской периферией. Внешнее воздействие на эти сигналы может нарушить запуск программы или обмен с памятью. На некоторых платах эти линии физически не выведены на пользовательские разъёмы, но в интернет-таблицах они всё равно присутствуют.
Это показательный случай, когда просто найти свободный номер GPIO недостаточно. Прежде чем назначать вывод для реле или датчика, изучают ограничения всей платы. Наиболее безопасны выводы, которые производитель явно рекомендует для пользовательского ввода-вывода.
Загрузочные выводы strapping pins
Некоторые GPIO участвуют в выборе режима загрузки и других начальных настроек при сбросе. На классическом ESP32 особенно важно учитывать GPIO0, GPIO2, GPIO5, GPIO12 и GPIO15. Внешняя периферия, которая удерживает такой контакт на неподходящем уровне во время старта, может препятствовать загрузке. Поэтому выбор выводов для кнопок, светодиодов или модулей с собственными подтяжками нельзя делать случайно.
GPIO0 нередко связан с кнопкой BOOT: при определённом состоянии на момент сброса устройство переходит в режим загрузчика. Если плата прошивается только при отключённом датчике, проверьте влияние подключённого устройства на загрузочные линии. Не стоит решать проблему постоянным закорачиванием контактов без понимания режима.
ADC: аналоговые входы ESP32
Аналого-цифровой преобразователь позволяет оценивать напряжение датчика. У классического ESP32 имеются группы ADC1 и ADC2, но их практические ограничения отличаются. У классического ESP32 два 12-битных АЦП последовательного приближения на 18 каналов: ADC1 – GPIO32–39, ADC2 – GPIO0, 2, 4, 12–15 и 25–27. В типичных сценариях работы Wi-Fi использование ADC2 имеет ограничения, поэтому для аналогового измерения при включённом Wi-Fi часто выбирают ADC1. Для точности дополнительно учитывают калибровку, нелинейность, диапазон входа и качество опорного питания.
ESP32 не является прецизионным лабораторным вольтметром. Результат analogRead может заметно отличаться от показания хорошего мультиметра без калибровки. Для измерения аккумулятора, датчика давления или внешнего источника напряжения нужно выбрать делитель, фильтрацию и защиту входа, не превышая пределов микроконтроллера.
PWM, светодиоды и управление нагрузкой
Аппаратные блоки ESP32 позволяют формировать ШИМ-сигналы на подходящих выходах: контроллер LEDC имеет 16 каналов, которые через матрицу GPIO выводятся на любой вывод, способный работать выходом. Это удобно для управления яркостью светодиода через драйвер, сервоприводом или скоростью вентилятора через согласованный контроллер. Однако GPIO способен выдавать только ограниченный ток. Подключать мощный двигатель, ленту или катушку реле напрямую к выводу микроконтроллера нельзя.
Нужен подходящий транзисторный ключ, драйвер, защита от выбросов и отдельное питание нагрузки, если этого требует схема. При этом общую сигнальную землю организуют с учётом помех и токов. Если подключённый мотор вызывает перезагрузку ESP32, это может быть признаком просадки питания или помех, а не программной ошибки.
I2C: SDA и SCL
Шина I2C применяет две сигнальные линии – данные SDA и тактирование SCL. У многих примеров для ESP32 используются GPIO21 и GPIO22, но конкретное назначение может быть изменено программой и отличаться у другой платы. На линиях нужны корректные подтягивающие резисторы к допустимому напряжению. Нельзя подключать подтяжки к 5 В лишь потому, что внешняя плата дисплея питается от 5 В.
При подключении нескольких устройств важны адреса на шине, суммарная ёмкость проводов и длина соединений. Если сканер I2C не видит модуль, проверяют питание, общую землю, полярность SDA/SCL, подтяжки и актуальность адреса. Сам факт свечения дисплея не доказывает правильность обмена данными.
SPI: MOSI, MISO, SCLK и CS
SPI обычно использует линии передачи данных, тактирования и выбора устройства. На классическом ESP32 часть сигналов можно переназначать через матрицу GPIO, но скорость, аппаратные ограничения и конкретный драйвер могут накладывать условия. Пример подключения TFT-дисплея или карты памяти из интернета нельзя считать универсальной распиновкой всех плат ESP32.
При нескольких устройствах каждое обычно нуждается в собственном сигнале CS, а общие линии должны быть электрически совместимы. Важно учитывать, не участвуют ли выбранные выводы в загрузке, не подключены ли они к внутренней памяти и не используются ли другими устройствами платы.
UART и прошивка через USB
Платы DevKit часто подключены к компьютеру через USB-UART-преобразователь. У классического ESP32 UART0 по умолчанию используется для загрузки и диагностического вывода. Если подключить внешнее устройство к тем же линиям TX/RX, оно может мешать прошивке или получать служебные сообщения при запуске. Для периферийного UART нередко разумнее использовать другую доступную пару выводов.
Если компьютер не видит плату, сначала проверяют USB-кабель передачи данных, драйвер USB-UART, выбранный порт и режим BOOT. Затем – питание и влияние подключённых модулей на загрузочные выводы. Не следует сразу предполагать повреждение ESP32: часто причина в кабеле без линий данных или неверно выбранной плате при настройке ESP32 в Arduino IDE.
Как выбрать GPIO для проекта
Составьте таблицу требуемых функций: выход реле, вход кнопки, аналоговый датчик, I2C-дисплей и диагностический UART. Для каждой функции проверьте электрическое напряжение, допустимый ток и необходимость подтяжки. Затем исключите линии флеш-памяти и оцените риски strapping pins. Если нужен аналоговый сигнал при Wi-Fi, рассмотрите ADC1. Если нужен выход, исключите GPIO34–GPIO39.
| Выводы | Особенность | Как использовать |
|---|---|---|
| GPIO6–11 | подключены к SPI-флешу модуля | не занимать |
| GPIO34–39 | только вход, без подтяжек | кнопки и датчики с внешней подтяжкой, АЦП |
| GPIO0 | strapping, подтяжка вверх, кнопка BOOT | низкий уровень при сбросе включает загрузчик |
| GPIO2 | strapping, подтяжка вниз | не подтягивать вверх при старте |
| GPIO12 (MTDI) | strapping, подтяжка вниз; задаёт напряжение флеш-памяти | высокий уровень при старте мешает загрузке модулей с флешем 3,3 В |
| GPIO5, GPIO15 (MTDO) | strapping, подтяжка вверх | не навязывать уровень при сбросе |
| GPIO1, GPIO3 | UART0: прошивка и журнал загрузки | для своей периферии взять другой UART |
| GPIO32–39 | каналы ADC1 | аналоговые измерения при включённом Wi-Fi |
| GPIO0, 2, 4, 12–15, 25–27 | каналы ADC2 | ограничения при работе Wi-Fi |
| GPIO21, GPIO22 | I2C в большинстве примеров | можно переназначить в программе |
После выбора стоит проверить старт устройства с подключёнными модулями, программирование через USB, работу при перезапуске и реальное потребление питания. Хорошая распиновка – не картинка со всеми номерами, а привязка контактов к конкретной плате с указанием ограничений и проверенной схемы соединений.
Кнопки и входы с подтяжкой
Кнопка в схеме микроконтроллера должна давать предсказуемый уровень и при нажатии, и в отпущенном состоянии. Для этого используют подтяжку к питанию или к земле, соответствующую логике схемы. При программном INPUT_PULLUP важно понимать, что внутренний резистор имеется не у всех GPIO классического ESP32. На входных GPIO34–GPIO39 внешняя подтяжка необходима, если источник сигнала не формирует оба логических уровня.
Также стоит предусмотреть программное или аппаратное подавление дребезга контактов. Многократные переключения за миллисекунды не являются неисправностью ESP32 – обычная механическая кнопка при замыкании кратковременно дребезжит. Для счётчика событий такой эффект следует учитывать отдельно.
Что делать, если периферия не запускается
Простейшая диагностика начинается с измерения 3,3 В, проверки общей земли и уточнения модели платы. Затем проверяют, не перепутаны ли номера физических контактов с номерами GPIO и не заняты ли выбранные выводы загрузочными цепями. После этого запускают короткий тестовый скетч только с одним устройством. Поочерёдное подключение модулей помогает выявить конфликты и просадки питания без сложного анализа всей программы.
Частые вопросы
Все ли ESP32 имеют одинаковую распиновку?
Нет. У модулей, DevKit-плат и новых поколений ESP32 расположение контактов и ограничения различаются. Сначала определяют модель.
Можно ли подавать 5 В на GPIO ESP32?
Для классической 3,3-вольтовой логики это не допускается. Нужна проверка совместимости и при необходимости согласование уровней.
Почему GPIO34 не включает светодиод?
Эта линия относится к входным GPIO классического ESP32 и не имеет выходного драйвера.
Какие выводы заняты флеш-памятью?
В модулях ESP32-WROOM-32 линии GPIO6–GPIO11 подключены к встроенной SPI flash; на плате DevKitC V4 они выведены как CLK, SD0–SD3 и CMD. Для своей периферии их не используют.
Какие выводы лучше для I2C?
В распространённых примерах классического ESP32 применяют GPIO21 и GPIO22, но окончательный выбор зависит от платы и программной конфигурации.


