• /
  • /

Руководство по распиновке ESP32 (pinout): особенности настройки и подключения

При проектировании устройств на основе микроконтроллера ESP32 важно правильно подобрать используемые выводы GPIO. Всего плата оснащена 48 контактами, однако доступность некоторых из них ограничена конструкцией конкретных отладочных плат.

Для корректной работы платы и проектов на её основе рекомендуем ознакомиться с нашим руководством по правильному назначению и применению каждого вывода, включая использование аналого-цифровых преобразователей (АЦП), что позволит избежать ошибок и повысить надёжность устройства.

Периферийные устройства ESP32

Функциональность аналого-цифровых преобразователей (АЦП) и цифро-аналоговых преобразователей (ЦАП) жёстко привязана к определённым выводам микроконтроллера ESP32. В отличие от них, остальные периферийные интерфейсы – UART, I2C, SPI, PWM и прочие – допускают гибкое назначение контактов посредством программного обеспечения, обеспечиваемое аппаратной функцией мультиплексирования выводов ESP32.

Плата ESP32 оснащена обширным набором встроенной периферии:

  • 18-канальный АЦП/разрешение 12 бит;
  • два ЦАП-канала;
  • интерфейсы последовательной передачи данных: 3 SPI, 16 I2C, 10 I2S;
  • 2 UART;
  • выходы для генерации ШИМ;
  • GPIO-контакты на ввод/вывод.
В таблице, расположенной ниже, мы собрали самую полную инструкцию по использованию пинов в ESP32. Зелёным цветом выделены контакты, разрешённые и рекомендуемые нашими специалистами для различных целей в процессе программирования. Оранжевым цветом выделены разрешённые контакты, однако следует обратить внимание на возможные проблемы при их выборе: при загрузке системы и других процессах их поведение может быть неожиданным. Красный цвет в таблице – GPIO, которые мы для выбора в качестве устройств ввода/вывода использовать не рекомендуем.
GPIO
Подключение на ввод
Подключение на вывод
Примечание
0
подтягивающий резистор
+
outputs PWM signal at boot
1
Контакт TX
+
вывод отладки при загрузке
2
+
+
подключен к встроенному светодиоду
3
+
Вывод RX
HIGH при загрузке
4
+
+
5
+
+
outputs PWM signal at boot
6
-
-
SPI
7
-
-
SPI
8
-
-
SPI
9
-
-
SPI
10
-
SPI
11
-
-
SPI
12
+
+
загрузка не работает, если сигнал микроконтроллера подтянут к HIGH
13
+
+
14
+
+
outputs PWM signal at boot
15
+
+
outputs PWM signal at boot
16
+
+
17
+
+
18
+
+
19
+
+
21
+
+
22
+
+
23
+
+
25
+
+
26
+
+
27
+
+
32
+
+
33
+
+
34
+
используется только для ввода
35
+
используется только для ввода
36
+
используется только для ввода
39
+
используется только для ввода
Входы GPIO
для цифровых сигналов
Для ввода цифровой информации используются исключительно пины GPIO с номерами от 34 до 39 включительно. Эти контакты лишены встроенных подтягивающих и стягивающих резисторов. Рекомендуемые номера контактов – без GPIO 34, GPIO 35, GPIO 36, GPIO 39.

Если память SPI-flash встроена в ESP-WROOM-32

Многие выводы в платах ESP32 имеют специфическое назначение. В частности, это пины от GPIO 6 до GPIO 11, доступные на многих современных моделях ESP32. Они физически связаны с интерфейсом встроенного накопителя flash-памяти через SPI. Каждый вывод GPIO соответствует своему функционалу, если он связан с SPI-flash памятью:
Важно! Эти контакты используются исключительно чипом ESP32 для взаимодействия с памятью устройства. Использование этих контактов для иных функций (входа сигналов, выхода управляющих импульсов и пр.) способно привести к нестабильной работе модуля и потере данных. Рекомендуем учитывать данное ограничение при разработке схемотехники и программировании микроконтроллера, чтобы избежать проблем совместимости и корректности работы оборудования.

Функции ёмкостных сенсорных датчиков GPIO


На плате ESP32 содержатся внутренние ёмкостные сенсорные датчики. Их 10. Функции этих датчиков разнообразны. Они отслеживают все изменения, которые могут зафиксировать на основании изменения электрического заряда при контакте с ними. Например, сенсорный датчик GPIO в ESP32 может зафиксировать изменение, если прикоснуться к GPIO пальцами руки. Преимущество таких датчиков в том, что ими можно легко заменять кнопки механического характера управления, и создавать на их основе сенсорные датчики касания. Можно внедрять такие датчики в механизм пробуждения платы ESP32 от глубокого сна.

Внутренние сенсорные датчики соответствуют следующим пинам, которые отражены в таблице:

АЦП: аналого-цифровой преобразователь в ESP32

Микроконтроллер ESP32 оснащен мощным встроенным модулем аналого-цифрового преобразования (АЦП), который позволяет считывать значения напряжения и превращать их в цифровые данные для дальнейшей обработки. Разрешение каждого канала составляет 18×12 бит, обеспечивая высокую точность измерений даже в условиях шумной среды.

На плате доступно несколько входных каналов, распределенных между двумя блоками –ADC1 и ADC2. Приведём полные списки пинов для подключения сигналов для каждого блока – всего их 18. Из них 8 GPIO предназначены для работы с ADC1, остальные 10 GPIO используются на вход с ADC2.
Каналы для ASC1:

  • ADC1_CH0 – GPIO 36;
  • ADC1_CH1 – GPIO 37;
  • ADC1_CH2 – GPIO 38;
  • ADC1_CH3 – GPIO 39;
  • ADC1_CH4 – GPIO 32;
  • ADC1_CH5 – GPIO 33;
  • ADC1_CH6 – GPIO 34;
  • ADC1_CH7 – GPIO 35.
Каналы для ADC2:

  • ADC2_CH0 – GPIO 4;
  • ADC2_CH1 – GPIO 0;
  • ADC2_CH2 – GPIO 2;
  • ADC2_CH3 – GPIO 15;
  • ADC2_CH4 – GPIO 13;
  • ADC2_CH5 – GPIO 12;
  • ADC2_CH6 – GPIO 14;
  • ADC2_CH7 – GPIO 27;
  • ADC2_CH8 – GPIO 25;
  • ADC2_CH9 – GPIO 26.
Важно! Из данного списка нельзя использовать любые контакты ADC2, если планируется их совместное использование с WiFi. Почему? Потому что существует большая вероятность вообще не получить от них сигнала. Однако решить данный вопрос можно очень просто – используйте каналы ADC2, и проблема должна быть решена.
Параметры аналого-цифровых преобразователей этим не ограничены. Разрешающая способность всех входных каналов АЦП составляет 12 бит, обеспечивая диапазон аналоговых показаний от 0 до 4095 единиц. Для удобства работы предусмотрено программное изменение разрешающей способности отдельных каналов и задание необходимого диапазона преобразования напряжения.

Минимальное значение соответствует напряжению 0 В, максимальное – 3,3 В.

ЦАП: цифро-аналоговый преобразователь

В составе ESP32 есть 2 8-битных канала цифро-аналогового преобразователя (ЦАП). Они, по классике, необходимы для трансформации цифрового сигнала в аналоговые выходные сигналы напряжения. Каналы ЦАП находятся на следующих пинах:

  • ЦАП1 – GPIO25;
  • ЦАП2 – GPIO26.

RTC GPIO

На микроконтроллерах семейства ESP32 предусмотрена возможность работы специальных выводов – RTC GPIO, поддерживающих работу даже во время нахождения устройства в режиме глубокого сна (Deep-Sleep). В данном режиме подвергается выключению большая часть системных элементов, их питание ограничено. Всего у ESP32 есть два режима пониженного энергопотребления. Ещё один – это Light-Sleep. В этом состоянии система ограничивает тактирование периферийными устройствами, RAM и CPU, что снижает и напряжение. При возобновлении работы функционирование всех элементов продолжается без потери данных (на момент входа).

Выводы непосредственно для RTC могут подключаться непосредственно к встроенному ультра-низковольтному сопроцессору (Ultra Low Power Coprocessor), который способен контролировать состояние отдельных сигналов и выводить устройство из режима пониженного потребления энергии, если обнаружены изменения на входах или выполнены заданные условия.

В качестве внешних источников пробуждения рекомендуем использовать следующие пины GPIO, номера которых мы вывели в отдельную таблицу согласно каждому из RTC:

PWM

ESP32 оснащён встроенным модулем, отвечающим за обработку сигналов широтно-импульсной модуляции (ШИМ). Этот модуль включает в себя 16 настраиваемых каналов, каждый из которых способен передавать индивидуальные сигналы ШИМ.

Однако важно учитывать, что некоторые контакты платы (GPIO с 34 до 39) не поддерживают генерацию ШИМ-сигнала. Остальные же порты могут использоваться в качестве полноценных каналов ШИМ. При настройке ШИМ-сигнала в программе следует указать следующие характеристики:

  • частоту сигнала;
  • используемый канал ШИМ;
  • рабочий цикл импульса;
  • номер порта GPIO для вывода сигнала.

I2C

У нас часто спрашивают, какие пины поддерживаются библиотекой Wire при совместном использовании микроконтроллера ESP32 с Arduino IDE. По умолчанию рекомендуем использовать выводы ESP32 I2C:

  • GPIO 21 (SDA);
  • GPIO 22 (SCL).

Другие контакты можно использовать с помощью простой команды: Wire.begin (SDA, SCL);

SPI

Автоматически можно использовать для подключения SPI следующие выходы в ESP32:

Обработка прерываний: какие пины использовать

Здесь все просто: любые GPIO могут выполнять роль проводника для обработки любых типов прерываний. Настройка функционала обработчика прерываний на EPS32 весьма удобна, если существует необходимость настройки и стабильной работы WiFi. Кроме этого благодаря периодическому отслеживанию поступающих сигналов на выводы плата способна эффективно обрабатывать их трансформацию во времени и ответно реагировать. Так можно настраивать интеграцию кнопок и библиотек. Разберём на коротком примере. После выбора/настройки программистом режима прерывания и связывания конкретного события с библиотекой Arduino, вывод фиксирует трансформацию сигнала с низкого на высокий или наоборот.

Требуется перезагрузка или обновление? Распределяем на ESP32 выводы правильно!

Для этого лучше всего подойдут следующие пины:

  • GPIO 0. Самый часто используемый пин для перезагрузки или введения системы в режим перепрошивки, однако можно использовать и другие;
  • GPIO 2;
  • GPIO 4;
  • GPIO 5 (в процессе загрузки уровень должен быть HIGH/высокий);
  • GPIO 12 (в процессе загрузки уровень должен быть LOW/низкий);
  • GPIO 15 (в процессе загрузки уровень должен быть HIGH/высокий).
Независимо от производителя, USB-платы обладают универсальной совместимостью и способны легко переключаться между режимами перепрошивки и загрузки. Пользователю не требуется контролировать состояние контактов – в автоматическом режиме система самостоятельно настраивает их в оптимальное положение для корректного выполнения необходимых операций. Это значительно упрощает процесс обновления ПО или перехода в режим загрузки.

Важно! Если у вас произведено подключение внешних устройств к данным пинам, то в случае возникновения необходимости загрузки нового кода, перепрошивки ESP32 или перезагрузки, система может работать нестабильно.

Какие пины меняют сигнал при загрузке и почему

Когда происходит процесс запуска или сброса, ряд пинов GPIO могут изменять своё состояние на HIGH. Это говорит о том, что система работает в режиме инициализации и использует все возможные варианты переключения выводов GPIO. Второй вариант развития событий здесь – происходит вывод ШИМ-сигналов. В результате может произойти следующее: если у вас есть выходы, которые подключены к данным пинам, то при их запуске или сбросе вполне возможно получить неожиданный результат. Список таких пинов прилагаем ниже:

  • GPIO 1;
  • GPIO 3;
  • GPIO 5;
  • пины GPIO 6-11;
  • GPIO 14;
  • GPIO 15.

Обратим внимание, что активное использование пинов GPIO с 6 по 11 для перезагрузки или сброса вообще не рекомендуется. Дело в том, что они подключены к встроенной памяти SPI-FLASH ESP32. Для перезагрузки можно использовать другой пин – EN (enable). Он подключен к кнопке управления, и его использование не вызовет осложнений в управлении внешними компонентами.

Допустимый уровень тока у GPIO

Максимально допустимое значение потребления уровня тока у GPIO при его эксплуатации составляет 40 мА. Это типичное значение для данного микроконтроллера. Оно связано с особенностями его конструкции ввиду используемых материалов для полупроводниковых компонентов устройства.

Обратите внимание! В ESP32 есть встроенный датчик, который чутко реагирует на все изменения в прилегающем к нему магнитном поле – датчик Холла. Контакты этого датчика: Sens_VP (positive), Sens_VN (negative). Его наличие облегчает процесс трансляции показаний к WiFi или Bluetooth. Следовательно, можно легко и просто следить за состоянием устройств в удалённом порядке.  

Заключение

В данном справочнике отражена максимально объективная информация по распиновке ESP32 и реализации всех возможных выводов. Мы собрали актуальные данные по настройке, подключению и использованию контактов. Делитесь своим опытом взаимодействия с ESP32 и расскажите об успехе распиновки в комментариях! Обсуждение поможет другим пользователям блога более подробно разобраться в данной теме. Всегда с вами, «Enjoy Robotics».

Подарите ребёнку профессию будущего!

Обучение перспективной IT-профессии — легко и увлекательно! Онлайн-курсы программирования для детей и подростков.
Кому подойдут наши курсы?
Начинающим программистам
Технически ориентированным детям
Творческим детям, стремящимся понимать и создавать технологии
Онлайн-формат
Учитесь с нашими преподавателемя онлайн в удобное время и в комфортной обстановке
Хотите научиться программировать, создавать приложения или игры?
Знакомство с базовыми концепциями, переменные, типы данных, циклы, и – так далее
Решение программных задач и участие в проектах для закрепления знаний на практике
Наши курсы дадут вам необходимые знания
Подготовка к карьере в сфере высоких технологий, инженерии или науки
Развитие навыков пространственного мышления, логики и решения задач
Посмотрите, какие проекты делают ученики — ваш ребёнок сможет так же
Создали уютный красивый дом
Создали программу-калькулятор
Roblox
Roblox
Python
Создали 3D-персонажа из известного фильма
Blender
Создали 3D-игру «Выживание в лесу»
Unity