Почему именно модуль
Если в проект нужно добавить беспроводную связь или собрать устройство для «интернета вещей», ESP32 сегодня — едва ли не самый очевидный выбор. У него есть двухъядерный вариант для задач, требовательных к вычислительной мощности, а встроенные Wi-Fi и Bluetooth избавляют от отдельных радиоузлов в схеме. Плюс к этому — достаточное количество линий ввода-вывода, памяти и интерфейсов, чтобы закрыть потребности большинства применений.
Компания Espressif, разработчик чипа ESP32, выпускает не только сами кристаллы, но и модули с отладочными платами на их основе. Для собственной печатной платы модуль ESP32-WROOM-32 — отличный вариант, и у него есть заметное преимущество перед голым чипом: модуль уже прошёл сертификацию FCC. Это значит, что для соответствия требованиям FCC не придётся предпринимать никаких дополнительных шагов, и производство заметно упрощается. Именно поэтому при разработке своей платы так важно понимать распиновку ESP32-WROOM-32 — ей и посвящён этот материал.
Общая картина: 38 выводов
Всего у модуля ESP32-WROOM-32 38 выводов. Их полная карта выглядит так:
Из этого числа 32 вывода — это GPIO, каждому из которых можно назначить ту или иную функцию, записав нужные значения в соответствующие регистры. GPIO бывают разных типов: только цифровые, с поддержкой аналогового ввода, с поддержкой ёмкостного касания и так далее. Большинство цифровых GPIO допускают включение внутренней подтяжки к питанию или к земле либо перевод в высокоимпедансное состояние.
Ещё одна общая возможность: любой из GPIO может работать источником прерывания.
Какие выводы можно использовать без опаски
Выводов у модуля много, но далеко не каждый одинаково пригоден для произвольной нагрузки. По степени пригодности их разумно разделить на три группы:
- выводы первого выбора — полностью безопасны, с них и стоит начинать разводку;
- выводы, требующие внимания: их поведение, особенно в момент загрузки, может оказаться непредсказуемым, поэтому применять их следует только тогда, когда без этого действительно не обойтись;
- выводы, которых лучше избегать вовсе.
Оговорки, из-за которых вывод попадает во вторую или третью группу, сводятся к нескольким типовым случаям:
- вывод работает только на вход и не может быть сконфигурирован как выход;
- вывод должен быть в состоянии HIGH во время загрузки — при удержании его в LOW пропадает стартовый лог;
- вывод должен быть в состоянии LOW во время загрузки и вдобавок подключён к светодиоду на плате;
- вывод должен быть HIGH во время загрузки и LOW для программирования;
- вывод Rx — задействован при прошивке и отладке;
- вывод Tx — задействован при прошивке и отладке.
Наглядно безопасные для использования GPIO показаны на иллюстрации:
Отдельно стоит запомнить, что выводы 4, 5, 6 и 7 не могут быть сконфигурированы как выходы. Их можно использовать как цифровые или аналоговые входы либо для других целей. Кроме того, в отличие от остальных GPIO, у них нет внутренних подтягивающих резисторов ни к питанию, ни к земле.
Аналоговая часть: АЦП, ЦАП и сенсорные входы
В модуле ESP32-WROOM-32 два блока АЦП — ADC1 и ADC2, и в каждом по несколько каналов. ADC1 содержит 6 каналов (они обозначены как ADC1_CH0 и ADC1_CH3…ADC1_CH7), ADC2 — 10 каналов (ADC2_CH0…ADC2_CH9).
Разрешение АЦП настраивается вплоть до 12 бит, то есть преобразователь различает 4096 (2^12) дискретных уровней. При рабочем напряжении 3,3 В это даёт шаг 3,3 В / 4096 единиц, или 0,0008 В (0,8 мВ) на единицу.
Важный практический нюанс: при включённом Wi-Fi выводы ADC2 использовать нельзя. Если беспроводная связь нужна, аналоговые сигналы заводите на входы ADC1.
В обратную сторону работают два 8-битных ЦАП: они преобразуют цифровой код в аналоговое напряжение.
Ещё десять GPIO поддерживают ёмкостное касание и обозначены TOUCH0…TOUCH9. Принцип их работы — измерение изменения ёмкости, когда рядом с поверхностью вывода оказывается палец или другой проводящий предмет. На них строят сенсорные кнопки, сенсорные слайдеры и даже простейшее распознавание жестов. Дополнительно такие выводы умеют будить ESP32 из глубокого сна, что особенно ценно в устройствах, критичных к потреблению.
Интерфейсы связи: I2C, SPI и UART
Шин I2C у модуля две, но выделенных под них выводов нет: назначение свободное, и любой GPIO может быть сконфигурирован как SDA (линия данных) или SCL (линия тактирования). При этом по умолчанию принято использовать GPIO21 под SDA и GPIO22 под SCL — так проще работать с уже существующими скетчами, библиотеками и кодом для Arduino.
Интерфейсов SPI три: SPI, HSPI и VSPI. HSPI и VSPI обычно отдают под общие задачи, а третий занят обменом с микросхемой SPI-флеша, встроенной в модуль. Как и в случае с I2C, привязка выводов свободная — под SPI можно сконфигурировать любой GPIO.
UART-интерфейсов тоже три: UART0, UART1 и UART2. Они обеспечивают последовательный обмен с периферией, а также используются для логирования и отладки. Учтите, что выводы UART1 (GPIO 9 и GPIO 10) заняты обменом со встроенным SPI-флешем, поэтому воспользоваться ими не получится — однако сам UART1 остаётся доступен, если реализовать протокол программно (bit-banging) на других GPIO. Помимо базовых TX и RX, UART в ESP32 поддерживает линии RTS (запрос на передачу) и CTS (готовность к приёму) для аппаратного управления потоком, хотя применяют их нечасто.
ШИМ и выводы RTC
Формировать ШИМ-сигнал способен практически любой GPIO модуля. Разрешение ШИМ настраивается высоким — обычно до 16 бит, что даёт тонкое управление скважностью. Частота тоже регулируется в широких пределах, типично от единиц герц до десятков мегагерц, поэтому один и тот же узел одинаково пригоден и для управления двигателями, и для диммирования светодиодов.
Часть выводов заведена на низкопотребляющую подсистему RTC — их называют RTC GPIO. Через них ESP32 пробуждается из глубокого сна, и к ним же подключается периферия, работающая с RTC.
Strapping-выводы, питание и EN
Strapping-выводов у ESP32 пять: GPIO0, GPIO2, GPIO5, GPIO12 и GPIO15. Их состояние в момент подачи питания определяет, во что уйдёт контроллер — в режим BOOT (выполнение программы из флеш-памяти) или в режим FLASH (загрузка новой программы во флеш).
Отсюда практическое следствие: если на эти выводы навешена внешняя периферия, при попытке прошить ESP32 новой прошивкой вы можете столкнуться с проблемами — периферия просто не даст контроллеру перейти в нужный режим.
Выводы питания обеспечивают модуль необходимым напряжением. Основной из них — 3V3, на него следует подавать стабильные 3,3 В.
Вывод EN — это вход разрешения работы ESP32. Подтянут к HIGH — кристалл включён и работает, переведён в LOW — выключен.
Похожие материалы на сайте