Главная/База знаний/Документация
Документация

Пины ESP32: какие можно использовать, а какие нельзя

11 мин чтения·Август 2026

На плате ESP32 подписано около тридцати выводов, и примерно треть из них использовать нельзя — либо совсем, либо с оговорками. Схема, собранная «по подписям на плате», регулярно приводит к тому, что плата не стартует, не прошивается или выдаёт мусор вместо показаний датчика. Ниже — что именно занято, почему и какие пины остаются безопасными.

Основная часть статьи описывает классический ESP32-D0WD в модулях WROOM-32 и WROVER — именно он стоит в большинстве проектов. За эталон взята официальная плата ESP32-DevKitC V4; распространённые DevKit V1 и NodeMCU-32S — это сторонние платы на тех же модулях, у них совпадает почти всё, кроме числа контактов на гребёнке. Отличия ESP32-S3 и ESP32-C3 вынесены в отдельный раздел. Все номера сверены с даташитами и документацией ESP-IDF, ссылки — в конце статьи.

Кратко: что нельзя трогать

ВыводыСтатус
GPIO 6, 7, 8, 9, 10, 11Не использовать никогда — заняты флеш-памятью
GPIO 16, 17Зависит от модуля: заняты или отсутствуют там, где есть PSRAM
GPIO 34, 35, 36, 39Только вход, выхода и подтяжки нет
GPIO 0, 2, 5, 12, 15Strapping — читаются при старте
GPIO 1, 3UART0, занят прошивкой и монитором порта

Всё остальное свободно. Если нужен просто рабочий список без объяснений — переходите сразу к разделу «Безопасные пины».

То же самое на карте платы — цвет здесь означает не функцию вывода, а можно ли его занять:

  • Свободен
  • Только вход
  • С оговорками
  • Занят флешем
  • Питание и служебные
  • 3V3
  • ENсброс
  • VPGPIO 36, ADC1
  • VNGPIO 39, ADC1
  • IO34ADC1
  • IO35ADC1
  • IO32ADC1, touch
  • IO33ADC1, touch
  • IO25DAC1, ADC2
  • IO26DAC2, ADC2
  • IO27ADC2, touch
  • IO14ADC2, touch
  • IO12strapping: 1 → флеш 1,8 В
  • GND
  • IO13ADC2, touch
  • D2GPIO 9
  • D3GPIO 10
  • CMDGPIO 11
  • 5V
  • GND
  • IO23SPI MOSI
  • IO22I2C SCL
  • TXGPIO 1, UART0
  • RXGPIO 3, UART0
  • IO21I2C SDA
  • GND
  • IO19SPI MISO
  • IO18SPI SCK
  • IO5strapping
  • IO17занят при PSRAM
  • IO16занят при PSRAM
  • IO4ADC2, touch
  • IO0strapping, кнопка BOOT
  • IO2strapping
  • IO15strapping
  • D1GPIO 8
  • D0GPIO 7
  • CLKGPIO 6
Плата ESP32-DevKitC V4, вид сверху: слева и справа — те же два ряда контактов, что и на настоящей плате. Названия совпадают с надписями рядом с контактами. Например, выводы GPIO 6–11 подписаны на плате как CLK, D0, D1, D2, D3 и CMD.

Дальше по разделам разбираем, откуда берётся каждый цвет.

Выводы под флеш-память

GPIO 6–11 разведены на микросхему флеш-памяти внутри модуля: SD_CLK, SD_DATA_0, SD_DATA_1, SD_DATA_2, SD_DATA_3 и SD_CMD. Через них процессор читает саму прошивку, поэтому подключение к ним чего угодно приводит к мгновенному зависанию или бесконечной перезагрузке.

Выведены ли они наружу, зависит от поколения модуля:

МодульGPIO 6–11
ESP32-WROOM-32E / 32UEНе выведены, выводы 17–22 помечены NC
ESP32-WROVER-E / IEНе выведены, выводы 17–22 помечены NC
ESP32-WROOM-32 (снят с производства)Выведены как SD0SD3, CMD и CLK

Посадочное место плат вроде ESP32-DevKitC V4 рассчитано сразу на всё семейство модулей, поэтому контакты D0, D1, D2, D3, CMD и CLK подписаны на гребёнке даже там, где на самом модуле за ними уже ничего нет. Именно это и сбивает с толку. Документация Espressif на этот счёт однозначна: не используйте эти выводы, иначе нарушите доступ к флешу. Считайте, что их нет.

⚠️

А вот с GPIO 16 и 17 всё зависит от PSRAM, и это главное отличие модулей друг от друга. На WROOM-32E без PSRAM оба вывода полноценно доступны. На версии со встроенной в чип PSRAM (ESP32-D0WDR2-V3) GPIO 16 отдан памяти и занят. На WROVER-E и WROVER-IE обоих выводов нет вовсе — на их местах NC. Поэтому пример из интернета, работающий у автора на WROOM, на WROVER просто не заработает.

Входы без выхода

У самого чипа шесть выводов работают только на вход: GPIO 34, 35, 36, 37, 38 и 39. У них физически нет выходного каскада и нет внутренних подтягивающих резисторов. На модулях WROOM-32 и WROVER наружу выведены четыре из них — 34, 35, 36 и 39 (последние два подписаны как SENSOR_VP и SENSOR_VN), а 37 и 38 недоступны.

Отсутствие выходного каскада означает, что pinMode(pin, OUTPUT) и digitalWrite() для них не сработают — молча, без ошибки компиляции. А INPUT_PULLUP не даст подтяжки: кнопка, подключённая по обычной схеме, будет ловить наводки и срабатывать сама. Для кнопки на этих пинах нужен внешний резистор на 10 кОм.

Зато они отлично подходят для аналоговых датчиков: относятся к ADC1, который работает одновременно с Wi-Fi.

Strapping-пины

В момент подачи питания процессор считывает уровень на пяти выводах и по ним определяет, как загружаться. После старта эти выводы становятся обычными, но состояние в момент включения критично.

ПинСостояние по умолчаниюЗа что отвечает
GPIO 0Подтяжка вверхРежим загрузки: 1 — обычный старт, 0 — режим прошивки
GPIO 2Подтяжка внизРежим загрузки: для прошивки нужен 0 или свободный вывод
GPIO 5Подтяжка вверхТайминг интерфейса SDIO Slave
GPIO 12 (MTDI)Подтяжка внизПитание флеша: 0 — 3,3 В, 1 — 1,8 В
GPIO 15 (MTDO)Подтяжка вверхВывод лога загрузчика: 1 — включён, 0 — выключен

Самый коварный здесь GPIO 12. Достаточно повесить на него светодиод с подтяжкой к питанию или датчик, выдающий высокий уровень при включении, — и флеш переключится на 1,8 В, а плата перестанет запускаться совсем. Симптом выглядит как «сгорела», хотя достаточно снять провод.

GPIO 0 — тот самый вывод, который замыкают на землю кнопкой BOOT, когда ESP32 не хочет прошиваться.

Что происходит на выводах при старте

Здесь много мифов, поэтому отделим документированное от народного.

Espressif публикует таблицу «Power-Up Glitches on Pins» только для ESP32-C3 и ESP32-S3. В даташите классического ESP32 такой таблицы нет вообще. Для него документировано следующее:

  • На GPIO 1 (U0TXD) ROM-загрузчик печатает лог при каждом старте. Отключается подтяжкой GPIO 15 к земле.
  • На GPIO 36 и GPIO 39 вход притягивается вниз примерно на 80 нс в момент включения питания блока RTC (АЦП и усилителя).
  • Состояния подтяжек при сбросе: вверх — GPIO 0, 1, 3, 5, 6–11, 15; вниз — GPIO 2, 4, 12.

Практический вывод из этого простой: силовую нагрузку — сервопривод, реле, драйвер шагового двигателя — не вешайте на strapping-пины и на выводы UART0. В момент старта там гарантированно есть уровень, заданный подтяжкой или логом загрузчика, и привод дёрнется до того, как ваш скетч вообще начнёт выполняться.

ℹ️

Распространённые в интернете списки «пинов с импульсами при загрузке» для классического ESP32 (обычно 1, 3, 5, 14, 15) в документацию Espressif не входят. Ориентируйтесь на таблицу strapping-пинов выше — она перекрывает почти все реальные случаи.

Аналоговые входы: ADC1 и ADC2

У ESP32 два независимых аналого-цифровых преобразователя, и разница между ними — источник самой обидной ошибки в проектах с Wi-Fi.

БлокВыводы чипаДоступно на модулеРаботает с Wi-Fi
ADC132, 33, 34, 35, 36, 37, 38, 3932, 33, 34, 35, 36, 39Да
ADC20, 2, 4, 12, 13, 14, 15, 25, 26, 27ВсеНет

ADC2 физически делит блок с радиомодулем. Пока Wi-Fi активен, analogRead() на этих пинах возвращает мусор или ноль — без всякой ошибки в консоли. Датчик, который прекрасно работал на столе, «ломается» ровно в тот момент, когда в скетч добавляют подключение к сети. Документация ESP-IDF формулирует это прямо: ADC1 предпочтительнее, потому что ADC2 нельзя использовать при включённом Wi-Fi.

Правило простое: все аналоговые датчики вешайте на GPIO 32–39.

ℹ️

АЦП у ESP32 нелинеен на краях диапазона: показания заметно врут вблизи нуля и вблизи напряжения питания. Для точных измерений используйте analogReadMilliVolts() — она учитывает заводские калибровочные коэффициенты, зашитые в чип.

DAC и сенсорные входы

Два вывода умеют выдавать настоящее аналоговое напряжение, а не ШИМ: GPIO 25 (DAC1) и GPIO 26 (DAC2), разрядность 8 бит. Пригодится для звука и управления аналоговыми схемами. У ESP32-S3 и ESP32-C3 такого блока нет вообще.

Ёмкостные сенсорные входы (касание пальцем без кнопки) доступны на десяти выводах и читаются функцией touchRead():

КаналT0T1T2T3T4T5T6T7T8T9
GPIO40215131214273332

Обратите внимание на конец таблицы: T8 — это GPIO 33, а T9 — GPIO 32, а не наоборот, как подсказывает интуиция.

Пины интерфейсов по умолчанию

ИнтерфейсВыводы
I2CSDA — GPIO 21, SCL — GPIO 22
SPI (VSPI)MOSI 23, MISO 19, SCK 18, CS0 5
SPI (HSPI)MOSI 13, MISO 12, SCK 14, CS0 15
UART0TX 1, RX 3 — занят прошивкой
UART2TX 17, RX 16
ℹ️

У I2C аппаратных выводов по умолчанию нет вообще: контроллер полностью маршрутизируется через матрицу. Пара 21/22 — это значение по умолчанию ядра Arduino-ESP32 для платы Generic ESP32, и на других платах оно другое. Строки для SPI и UART, наоборот, отражают прямое подключение через IO_MUX.

Главное отличие ESP32 от Arduino: эти номера не зашиты в железо. Внутри чипа стоит коммутационная матрица, которая позволяет вывести почти любой интерфейс почти на любой пин:

#include <Wire.h>

void setup() {
  Wire.begin(18, 19);  // SDA на GPIO 18, SCL на GPIO 19
}

void loop() {
}

Так же переназначаются SPI и дополнительные UART. Формально переназначается и UART0 — Serial.begin(115200, SERIAL_8N1, rxPin, txPin) работает. Но делать это не стоит: ROM-загрузчик принимает прошивку и печатает лог на GPIO 1 и 3 независимо от вашего скетча, так что порт для прошивки вы всё равно не освободите. Плюс при работе через матрицу, а не через IO_MUX, недоступны самые высокие скорости обмена.

Безопасные пины

Выводы, которые можно использовать без оговорок на любом модуле — как вход и как выход, без влияния на загрузку:

GPIO 4, 13, 14, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33

Ещё два — GPIO 16 и 17 — свободны на WROOM-32E без PSRAM, но заняты или вовсе отсутствуют на модулях с PSRAM. Если точно знаете свой модуль, добавляйте их к списку.

Для аналоговых входов при активном Wi-Fi:

GPIO 32, 33, 34, 35, 36, 39

Тринадцати цифровых выводов хватает подавляющему большинству проектов. Если не хватает — ставьте расширитель портов по I2C (PCF8574) или берите ESP32-S3, у которого свободных выводов почти вдвое больше.

ℹ️

GPIO 12–15 — это ещё и выводы JTAG (MTDI, MTCK, MTMS, MTDO). Как обычные пины они работают, но если планируете аппаратную отладку по JTAG, оставьте всю четвёрку свободной.

Отличия ESP32-S3 и ESP32-C3

Карта выводов у новых чипов другая, и переносить схему «один в один» нельзя.

ESP32-S3 — 45 выводов: GPIO 0–21 и GPIO 26–48. Номеров с 22 по 25 не существует.

  • Флеш и PSRAM занимают GPIO 26–32. На версиях с восьмиканальной (octal) PSRAM — например, N16R8 — дополнительно заняты GPIO 33–37.
  • GPIO 19 и 20 — линии нативного USB.
  • UART0 — не на привычных 1 и 3, а на GPIO 43 (TX) и 44 (RX).
  • Strapping-пины: 0, 3, 45, 46. У GPIO 3 нет внутренних подтяжек, его уровень при старте задаётся только внешней схемой.
  • Аналоговые входы: ADC1 — GPIO 1–10, ADC2 — GPIO 11–20. Остальные выводы аналоговыми быть не могут.
  • Сенсорные входы: GPIO 1–14, каналы нумеруются с TOUCH1.
  • DAC отсутствует. Входов-только-на-вход нет: любой пин работает в обе стороны.
  • Свободен
  • С оговорками
  • Питание и служебные
  • 3V3
  • 3V3
  • RSTсброс
  • 4ADC1, touch
  • 5ADC1, touch
  • 6ADC1, touch
  • 7ADC1, touch
  • 15ADC2
  • 16ADC2
  • 17ADC2
  • 18ADC2
  • 8ADC1, touch
  • 3strapping, без подтяжки
  • 46strapping
  • 9ADC1, touch
  • 10ADC1, touch
  • 11ADC2, touch
  • 12ADC2, touch
  • 13ADC2, touch
  • 14ADC2, touch
  • 5V
  • G
  • G
  • TXGPIO 43, UART0
  • RXGPIO 44, UART0
  • 1ADC1, touch
  • 2ADC1, touch
  • 42JTAG MTMS
  • 41JTAG MTDI
  • 40JTAG MTDO
  • 39JTAG MTCK
  • 38адресный светодиод
  • 37занят при octal PSRAM
  • 36занят при octal PSRAM
  • 35занят при octal PSRAM
  • 0strapping, кнопка BOOT
  • 45strapping: питание флеша
  • 48
  • 47
  • 21
  • 20USB D+
  • 19USB D−
  • G
  • G
Плата ESP32-S3-DevKitC-1, вид сверху. Выводов GPIO 26–32, которые заняты флешем и PSRAM, на гребёнках просто нет — наружу их не выводят.

Свободных выводов здесь заметно больше, чем у классического ESP32, и синего цвета нет совсем — у ESP32-S3 все контакты работают и на вход, и на выход.

ESP32-C3 — 22 вывода: GPIO 0–21.

  • Флеш занимает GPIO 12–17. GPIO 11 — это вывод питания флеша VDD_SPI, и как обычный GPIO он доступен, только если флеш питается от внешнего источника; на практике считайте его занятым.
  • GPIO 18 и 19 — линии USB.
  • UART0 — на GPIO 21 (TX) и 20 (RX).
  • Strapping-пины: 2, 8, 9. Комбинация GPIO 8 = 0 и GPIO 9 = 0 недопустима.
  • Аналоговые входы: ADC1 — GPIO 0–4. ADC2 (GPIO 5) формально есть, но в ESP-IDF однократные измерения на нём отключены из-за аппаратной ошибки: результаты нестабильны.
  • DAC и сенсорные входы отсутствуют.
  • Свободен
  • С оговорками
  • Питание и служебные
  • GND
  • 3V3
  • 3V3
  • IO2strapping, ADC1
  • IO3ADC1
  • GND
  • RSTсброс
  • GND
  • IO0ADC1
  • IO1ADC1
  • IO10
  • GND
  • 5V
  • 5V
  • GND
  • GND
  • TXGPIO 21, UART0
  • RXGPIO 20, UART0
  • GND
  • IO9strapping
  • IO8strapping, светодиод
  • GND
  • IO7JTAG MTDO
  • IO6JTAG MTCK
  • IO5ADC2 не работает
  • IO4ADC1, JTAG MTMS
  • GND
  • IO18USB D−
  • IO19USB D+
  • GND
Плата ESP32-C3-DevKitM-1, вид сверху. Выводы GPIO 11–17 заняты флешем и наружу не выведены, поэтому на гребёнках их нет.

Здесь хорошо видно, чем ESP32-C3 расплачивается за цену и размер: почти треть контактов — это земля и питание, а свободных выводов остаётся около десятка. На платах ESP32-C3 Super Mini картина похожая — хватает на пару датчиков и индикацию, но не на сложную схему.

⚠️

Скетч, написанный для классического ESP32, скомпилируется под ESP32-S3 и ESP32-C3 без единой ошибки, но заработает не так: номера пинов совпадут, а их назначение — нет. При переносе проекта всегда сверяйтесь с картой конкретного чипа.

Источники

Данные сверены с официальной документацией Espressif; примеры кода проверены на Arduino-ESP32 3.x.

Что дальше

Связанные статьи