Модуль ESP32-WROVER-B отличается от базового WROOM наличием встроенной PSRAM, и именно из-за неё часть выводов чипа занята под внутреннюю шину памяти — подключение внешних устройств к этим линиям приводит к сбоям загрузки или нестабильной работе. Поэтому распиновку WROVER-B нельзя копировать один в один со схем для WROOM: сначала нужно понять, какие GPIO реально свободны, а какие зарезервированы.

Ниже разберём назначение выводов модуля, безопасные пины для периферии, ограничения strapping-выводов и типичные ошибки при разводке платы. Информация актуальна для самого модуля; конкретные отладочные платы на его основе могут иметь собственную маркировку, которую следует сверять с документацией производителя платы.

Общая структура модуля и отличия от WROOM

ESP32-WROVER-B построен на чипе ESP32-D0WD и дополнительно содержит микросхему псевдостатической памяти, подключённую к шине внешней RAM. Модуль работает от напряжения 3,3 В, и все логические уровни GPIO привязаны именно к этому питанию. Подача 5 В на любой цифровой вывод — прямой путь к повреждению порта.

Ключевое отличие от WROOM: линии, задействованные под PSRAM, физически недоступны для пользователя. На практике это означает, что GPIO16 и GPIO17 в WROVER-B заняты внутренней шиной памяти и использовать их как обычные порты ввода-вывода нельзя. Если проект переносится с платы на WROOM, где эти пины были задействованы, схему придётся переразвести.

Также в модуле присутствует встроенная флеш-память, обслуживаемая отдельной группой выводов (обычно это GPIO6–GPIO11). Эти линии выведены на чип, но трогать их в пользовательской схеме не следует.

Карта выводов: основные группы GPIO

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

  • 🔌 Питание: выводы 3V3 и GND, а также EN — вход сброса/разрешения работы чипа.
  • 📟 UART0: GPIO1 (TXD0) и GPIO3 (RXD0) — используются для прошивки и вывода отладочного лога.
  • 🎛️ Только вход: GPIO34, GPIO35, GPIO36, GPIO39 — не имеют выходного драйвера и внутренних подтяжек.
  • ⚙️ Strapping-пины: GPIO0, GPIO2, GPIO5, GPIO12, GPIO15 — их уровень в момент старта определяет режим загрузки.
  • 🧠 Заняты PSRAM: GPIO16, GPIO17 — недоступны пользователю в WROVER-B.
  • 💾 Заняты флеш-памятью: GPIO6–GPIO11 — подключать внешние цепи сюда нельзя.

Оставшиеся выводы — GPIO4, GPIO13, GPIO14, GPIO18, GPIO19, GPIO21, GPIO22, GPIO23, GPIO25, GPIO26, GPIO27, GPIO32, GPIO33 — основной «рабочий резерв» для периферии: шин I2C и SPI, ШИМ, датчиков и исполнительных устройств.

💡

В WROVER-B выводы GPIO16 и GPIO17 заняты встроенной PSRAM — главное отличие распиновки от модуля WROOM.

Таблица назначения ключевых выводов

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

ВыводОсновная функцияОсобенности использования
GPIO0Strapping, выбор режима загрузкиНизкий уровень при старте — режим прошивки; требует подтяжки к питанию
GPIO2Strapping, общий I/OДолжен быть в низком уровне или не подключен при входе в режим загрузки
GPIO12Strapping, общий I/OВысокий уровень при старте меняет напряжение внутренней флеш — риск незагрузки
GPIO21 / GPIO22I2C: SDA / SCL по умолчаниюСтандартная пара для шины I2C в Arduino-фреймворке
GPIO34–GPIO39Только вход, АЦПНет выходного режима и внутренних подтяжек — нужна внешняя

Strapping-пины: почему модуль не прошивается

Частая ситуация: сам собранный макет на WROVER-B отказывается заходить в режим загрузки, хотя USB-UART-мост исправен. Возможная причина — периферия, подключённая к strapping-выводам, которая в момент сброса выставляет на них неправильный уровень. Классический проблемный кандидат — GPIO12: если внешняя схема подтягивает его к питанию, модуль может не стартовать корректно.

⚠️ Внимание: не подключайте к GPIO0, GPIO2, GPIO5, GPIO12 и GPIO15 устройства, которые удерживают фиксированный уровень в момент включения. Кнопки, датчики с открытым коллектором и светодиоды на этих линиях способны заблокировать загрузку прошивки.

Безопасная диагностика проста: временно отключите всю периферию от strapping-пинов и повторите прошивку. Если загрузка пошла — возвращайте устройства по одному и найдите виновника. Для ответственных схем эти выводы лучше оставлять свободными либо использовать с учётом их стартовых состояний.

📊 С какой проблемой вы столкнулись при работе с ESP32-WROVER-B?
Модуль не входит в режим прошивки
Случайно задействовал GPIO16/17
Нестабильная работа периферии
Просто изучаю распиновку

Порядок подключения модуля к проекту

Если вы разводите собственную плату или собираете устройство на макетке, действуйте в такой последовательности — она минимизирует риск конфликтов по выводам.

☑️ Проверка перед первым включением

Выполнено: 0 / 6

Сначала выберите пины под шины: для I2C удобны GPIO21 (SDA) и GPIO22 (SCL), для аппаратного SPI традиционно используют GPIO18, GPIO19, GPIO23 и выбор кристалла на свободном выводе. Затем распределите оставшиеся сигналы, избегая strapping-линий и входов-only там, где нужен выход.

Если прошивка ведётся через внешний USB-UART-адаптер, подключайте его к GPIO1 и GPIO3 перекрёстно (TX адаптера — на RX модуля) и не забывайте про общий провод. Для автоматического входа в режим загрузки на многих отладочных платах стоит схема автосброса; при ручном управлении нужно удерживать GPIO0 на земле в момент сброса.

💡

Если свободных пинов не хватает, пересмотрите использование GPIO34–GPIO39: как входы для кнопок и аналоговых датчиков они отличны, и это освобождает полноценные GPIO под выходы.

Питание и согласование уровней

Модуль питается от 3,3 В, и стабильность этого питания критична: при передаче по Wi-Fi ток потребления имеет выраженные импульсные всплески. Слабый стабилизатор или длинные тонкие провода питания проявляются как спонтанные перезагрузки — типичный симптом, который часто ошибочно списывают на прошивку.

⚠️ Внимание: входы ESP32 не толерантны к 5 В. Сигналы от 5-вольтовых датчиков, ардуино-совместимых плат и дисплеев необходимо пропускать через делитель напряжения или двунаправленный преобразователь уровней.

Для аналоговых измерений учтите: АЦП чипа имеет нелинейность на краях диапазона, а часть каналов АЦП недоступна одновременно с активным Wi-Fi. Если точность критична, это ограничение проверяют экспериментально на конкретном экземпляре или выносят измерение на внешний АЦП.

Почему нельзя трогать GPIO6–GPIO11

Эти линии образуют шину между чипом и встроенной SPI-флеш-памятью, где хранится прошивка. Любая внешняя нагрузка на них нарушает обмен с флешем — модуль перестаёт загружаться или зависает в случайные моменты. В даташите они помечены как зарезервированные.

Типичные ошибки при работе с распиновкой

По опыту проектов на WROVER-B проблемы чаще всего сводятся к нескольку повторяющимся сценариям. Пройдитесь по ним, прежде чем искать неисправность в коде.

  • ❌ Использование GPIO16/17 по привычке со схем для WROOM — пины физически заняты PSRAM.
  • ❌ Попытка использовать GPIO34–39 как выходы — аппаратно это невозможно, код скомпилируется, но работать не будет.
  • ❌ Светодиод или реле на GPIO12, мешающие загрузке.
  • ❌ Отсутствие общего провода между модулем и USB-UART-адаптером при прошивке.
  • ❌ Питание модуля от слабого линейного стабилизатора без запаса по току.
💡

Большинство «необъяснимых» сбоев WROVER-B — это конфликт по выводам: занятые PSRAM пины, strapping-линии с внешней нагрузкой или просадки питания 3,3 В.

FAQ: частые вопросы по распиновке ESP32-WROVER-B

Можно ли использовать GPIO16 и GPIO17, если отключить PSRAM в прошивке?

Нет. В модуле WROVER-B эти линии физически соединены с микросхемой памяти внутри корпуса модуля. Даже при отключённой в настройках PSRAM подключать к ним внешние цепи не следует. Если эти пины нужны — используйте модуль серии WROOM, где PSRAM отсутствует.

Какие пины гарантированно безопасны для подключения периферии?

Наиболее свободный набор: GPIO4, GPIO13, GPIO14, GPIO18, GPIO19, GPIO21, GPIO22, GPIO23, GPIO25, GPIO26, GPIO27, GPIO32, GPIO33. У них нет критичных стартовых ограничений, хотя у отдельных выводов есть особенности поведения при загрузке (например, кратковременные импульсы), которые стоит учитывать для чувствительной нагрузки.

Почему модуль не прошивается, хотя порт определяется?

Проверьте strapping-пины: внешняя схема может удерживать GPIO0, GPIO2 или GPIO12 в недопустимом состоянии в момент сброса. Отключите периферию от этих линий и повторите попытку. Также убедитесь, что RX/TX подключены перекрёстно и есть общий провод с адаптером.

Можно ли подавать на входы сигналы 5 В через резистор?

Одиночный последовательный резистор — ненадёжное решение: ток через защитные структуры входа всё равно остаётся. Корректные варианты — резистивный делитель на два плеча или специализированный преобразователь уровней, особенно для двунаправленных шин вроде I2C.

Чем распиновка WROVER-B отличается от WROVER (без буквы B)?

Оба модуля содержат PSRAM и занимают GPIO16/17, поэтому пользовательская карта выводов практически совпадает. Различия касаются в основном ревизии чипа внутри и электрических параметров. Точные отличия конкретных ревизий следует уточнять в официальной документации Espressif.