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

Отладочная плата ESP32 на 30 выводов с радиомодулем в металлическом экране, разъёмом micro-USB и кнопками BOOT и EN рядом с беспаечной макетной платой

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 без сверки.

Распиновка ESP32-DevKitC V4Плата ESP32-DevKitC V4 с модулем ESP32-WROOM-32E, антенна вверху, разъём USB внизу. Левый разъём J2 сверху вниз: 3V3, EN, GPIO36 VP, GPIO39 VN, GPIO34, GPIO35, GPIO32, GPIO33, GPIO25, GPIO26, GPIO27, GPIO14, GPIO12, GND, GPIO13, SD2 GPIO9, SD3 GPIO10, CMD GPIO11, 5V. Правый разъём J3 сверху вниз: GND, GPIO23, GPIO22, TX GPIO1, RX GPIO3, GPIO21, GND, GPIO19, GPIO18, GPIO5, GPIO17, GPIO16, GPIO4, GPIO0 BOOT, GPIO2, GPIO15, SD1 GPIO8, SD0 GPIO7, CLK GPIO6. Цветом выделены питание, выводы только для входа 34–39, strapping-выводы 0, 2, 5, 12, 15 и выводы 6–11, занятые флеш-памятью. Подпись: у 30-выводных плат других производителей порядок иной, логика 3,3 вольта, питание только от одного источника.ESP32-DevKitC V4: выводы разъёмов J2 и J3ESP32-WROOM-32Eантенна ↑USBJ2J33V3GNDENGPIO23GPIO36 (VP)GPIO22 (SCL)GPIO39 (VN)TX (GPIO1)GPIO34RX (GPIO3)GPIO35GPIO21 (SDA)77GPIO32GND88GPIO33GPIO1999GPIO25GPIO181010GPIO26GPIO51111GPIO27GPIO171212GPIO14GPIO161313GPIO12GPIO41414GNDGPIO0 (BOOT)1515GPIO13GPIO21616SD2 (GPIO9)GPIO151717SD3 (GPIO10)SD1 (GPIO8)1818CMD (GPIO11)SD0 (GPIO7)19195VCLK (GPIO6)питаниетолько входstrappingзаняты флеш-памятьюНомера 1–19 – позиции на разъёмах по руководству Espressif.У 30-выводных плат других производителей порядок иной –сверяйте шелкографию. Логика 3,3 В; питание платы – толькоот одного источника: USB, вывод 5V или вывод 3V3.
ESP32-DevKitC V4: разъёмы J2 и J3 по руководству Espressif. Цветом выделены выводы с ограничениями.
Разъём J2Разъём J3
1 – 3V31 – 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 – GPIO327 – GND
8 – GPIO338 – GPIO19
9 – GPIO259 – GPIO18
10 – GPIO2610 – GPIO5, strapping
11 – GPIO2711 – GPIO17
12 – GPIO1412 – GPIO16
13 – GPIO12, strapping13 – GPIO4
14 – GND14 – GPIO0, strapping, кнопка BOOT
15 – GPIO1315 – GPIO2, strapping
16 – SD2 (GPIO9), флеш16 – GPIO15, strapping
17 – SD3 (GPIO10), флеш17 – SD1 (GPIO8), флеш
18 – CMD (GPIO11), флеш18 – SD0 (GPIO7), флеш
19 – 5V19 – CLK (GPIO6), флеш
ESP32-DevKitC V4 User Guide (Espressif). GPIO16 и GPIO17 свободны только на платах с модулями WROOM и SOLO; в модулях WROVER они заняты памятью PSRAM.

Напряжение питания и логические уровни

Классический модуль 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», IOL28 мА
Суммарный ток всех GPIOне более 1100 мА (пре­дель­ное зна­че­ние)
Внутренние подтяжкиоколо 45 кОм; у GPIO34–39 их нет
ESP32-WROOM-32 Datasheet v3.8 и ESP32 Series Datasheet v5.3 (Espressif). Токи IOH/IOL – характеристики выходного каскада при условиях документации, а не рекомендуемая нагрузка: реле и мощные светодиоды подключают через ключ.

На платах разработки может быть вход 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только вход, без подтя­жеккнопки и датчи­ки с внешней подтяжкой, АЦП
GPIO0strapping, подтяжка вверх, кнопка BOOTнизкий уро­вень при сбросе вклю­чает загрузчик
GPIO2strapping, подтяжка внизне подтя­ги­вать вверх при старте
GPIO12 (MTDI)strapping, подтяжка вниз; задаёт напря­же­ние флеш-памятивы­со­кий уро­вень при старте мешает загрузке мо­ду­лей с флешем 3,3 В
GPIO5, GPIO15 (MTDO)strapping, подтяжка вверхне на­вя­зы­вать уро­вень при сбросе
GPIO1, GPIO3UART0: про­шивка и журнал загрузкидля своей пе­ри­фе­рии взять другой UART
GPIO32–39каналы ADC1ана­ло­го­вые изме­ре­ния при вклю­чённом Wi-Fi
GPIO0, 2, 4, 12–15, 25–27каналы ADC2огра­ни­че­ния при работе Wi-Fi
GPIO21, GPIO22I2C в боль­шинстве при­ме­ровможно пе­ре­назна­чить в программе
Классический ESP32 (модули WROOM-32/32E). Уровни подтяжек strapping-выводов – по ESP32 Series Datasheet.

После выбора стоит проверить старт устройства с подключёнными модулями, программирование через 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, но окончательный выбор зависит от платы и программной конфигурации.

Материалы по теме