Микросхемы микроконтроллера ESP32 имеют 48 ножек, но не все они доступны на популярных отладочных платах. В этой статье (перевод [1]) приведено описание назначения основных выводов ESP32 и портов GPIO.
На рисунке ниже показана цоколевка модуля ESP-WROOM-32. Эту цоколевку можно использовать в качестве образца для разработки своей собственной платы на основе чипа ESP32.
Нагрузочная способность GPIO. В даташите на ESP32 указан предельно допустимый ток 40 мА, который может обеспечить ножка выхода порта GPIO.
[Периферийные устройства ESP32]
На чипе ESP32 реализованы следующие аппаратные периферийные устройства:
• 18 каналов АЦП (ADC) • 3 интерфейса SPI • 3 интерфейса UART • 2 интерфейса I2C • 16 каналов PWM • 2 преобразователя ЦАП (DAC) • 2 интерфейса I2S • 10 ножек GPIO с функцией сенсорного ввода (Capacitive Sensing)
Блоки ADC (аналого-цифровой преобразователь) и DAC (цифро-аналоговый преобразователь) статически привязаны к определенным выводам. Сигналы интерфейсов UART, I2C, SPI, PWM можно привязывать к разным выводам, это делается с помощью внутренней матрицы мультиплексирования кристалла ESP32.
Хотя можно назначать свойства выводов программно, у выводов есть настройки по умолчанию, что показано на следующей картинке (для примера показана плата ESP32 DEVKIT V1-DOIT с 36 выводами, цоколевка выводов может меняться в зависимости от производителя платы).
Дополнительно на выводах присутствуют специальные функции, которые могут подойти для определенного проекта, или могут не понадобиться. В следующей таблице показано, какие выводы лучше использовать как входы, какие как выходы, и с какими выводами корпуса следует быть осторожным. Помеченные зеленым цветом выводы можно использовать свободно. Те, которые подсвечены желтым, тоже можно использовать, но на них нужно обратить особое внимание из-за их неожиданное поведение при загрузке (boot). Выводы, помеченные красным, не рекомендуется использовать как входы или выходы.
GPIO |
Вход |
Выход |
Примечание |
0 |
pull-up |
OK |
Может выводить сигнал PWM в режиме загрузки. |
1 |
OK |
TX |
При загрузке выводит через UART сообщения. |
2 |
OK |
OK |
Подключен к светодиоду на плате. |
3 |
RX |
OK |
Во время загрузки в лог. 1. |
4 |
OK |
OK |
|
5 |
OK |
OK |
Может выводить сигнал PWM в режиме загрузки. |
6 |
x |
x |
Подключается к памяти SPI Flash. |
7 |
x |
x |
Подключается к памяти SPI Flash. |
8 |
x |
x |
Подключается к памяти SPI Flash. |
9 |
x |
x |
Подключается к памяти SPI Flash. |
10 |
x |
x |
Подключается к памяти SPI Flash. |
11 |
x |
x |
Подключается к памяти SPI Flash. |
12 |
OK |
OK |
Если подтянуто к лог. 1, то загрузка не работает. |
13 |
OK |
OK |
|
14 |
OK |
OK |
Может выводить сигнал PWM в режиме загрузки. |
15 |
OK |
OK |
Может выводить сигнал PWM в режиме загрузки. |
16 |
OK |
OK |
|
17 |
OK |
OK |
|
18 |
OK |
OK |
|
19 |
OK |
OK |
|
- |
- |
- |
|
21 |
OK |
OK |
|
22 |
OK |
OK |
|
23 |
OK |
OK |
|
- |
- |
- |
|
25 |
OK |
OK |
|
26 |
OK |
OK |
|
27 |
OK |
OK |
|
- |
- |
- |
|
- |
- |
- |
|
- |
- |
- |
|
- |
- |
- |
|
- |
- |
- |
|
32 |
OK |
OK |
|
33 |
OK |
OK |
|
34 |
OK |
|
Работает только как вход. |
35 |
OK |
|
Работает только как вход. |
36 |
OK |
|
Работает только как вход. |
- |
- |
- |
|
- |
- |
- |
|
39 |
OK |
|
Работает только как вход. |
[Ножки, работающие только как входы]
GPIO34 .. GPIO39 это GPI (General Purpose Input) – они работают только на ввод, как выходы их использовать нельзя. На них нет внутренних резисторов подтяжки (pull-up или pull-down).
GPIO34 GPI GPIO35 GPI GPIO36 GPI GPIO39 GPI
[Выводы для подключения SPI Flash]
GPIO6 .. GPIO11 выведены на некоторых платах разработчика ESP32. Однако они соединяются с микросхемой SPI flash на модуле ESP-WROOM-32 и многих других подобных модулях, поэтому выводы GPIO6 .. GPIO11 не рекомендуется использовать для других целей.
GPIO6 SCK/CLK GPIO7 SDO/SD0 GPIO8 SDI/SD1 GPIO9 SHD/SD2 GPIO10 SWP/SD3 GPIO11 CSC/CMD
[Capacitive Touch GPIO]
У ESP32 есть 10 внутренних входов емкостных сенсоров. Они чувствительны к изменениям емкости на входе, т. е. ко всему, что может удерживать электрический заряд, наподобие человеческой кожи. Таким образом, эти выводы могут обнаруживать такие события, как касания пальцами емкостных датчиков. Эти выводы могут быть легко интегрированы в интерфейс пользователя для создания сенсорных кнопок, заменяющих механические. Также выводы Capacitive Touch могут использоваться для вывода ESP32 из состояния глубокого сна (deep sleep, режим пониженного энергопотребления).
GPIO4 T0 GPIO0 T1 GPIO2 T2 GPIO15 T3 GPIO13 T4 GPIO12 T5 GPIO14 T6 GPIO27 T7 GPIO33 T8 GPIO32 T9
Как использовать эти выводы в среде Arduino IDE, см. [3].
[ADC]
У ESP32 есть 18 каналов ADC с разрешающей способностью 12 бит (для сравнения: у ESP8266 есть только 1 канал ADC с разрешающей способностью 10 бит).
GPIO36 ADC1_CH0 GPIO37 ADC1_CH1 GPIO38 ADC1_CH2 GPIO39 ADC1_CH3 GPIO32 ADC1_CH4 GPIO33 ADC1_CH5 GPIO34 ADC1_CH6 GPIO35 ADC1_CH7 GPIO4 ADC2_CH0 GPIO0 ADC2_CH1 GPIO2 ADC2_CH2 GPIO15 ADC2_CH3 GPIO13 ADC2_CH4 GPIO12 ADC2_CH5 GPIO14 ADC2_CH6 GPIO27 ADC2_CH7 GPIO25 ADC2_CH8 GPIO26 ADC2_CH9
Как использовать эти выводы, см. [4, 5].
Примечание: выводы ADC2 нельзя использовать, когда работает Wi-Fi. Таким образом, если Вы используете Wi-Fi, и испытываете проблемы с чтением аналоговых значений каналов ADC2, то для оцифровки аналоговых величин, то используйте вместо них каналы ADC1.
Входные каналы ADC могут оцифровывать сигналы с 12-битной разрешающей способностью. Это значит, что результаты измерений могут быть в диапазоне 0 .. 4095, где 0 соответствует уровню напряжения 0V, и 4095 уровню 3.3V. Также в коде программы можно программно установить разрешающую способность используемых каналов и рабочий диапазон ADC.
Некоторые уровни, близкие к уровням шин питания, нельзя оцифровать строго линейно. Скорее всего Вы не сможете надежно различить уровни 0 и 0.1V, или 3.2 и 3.3V. Характеристика оцифровки будет примерно такой, как показана на рисунке ниже.
[DAC]
Имеется 2 канала DAC с разрешающей способностью 8 бит. Они позволяют преобразовать цифровые значения в аналоговые сигналы.
GPIO25 DAC1 GPIO26 DAC2
[RTC GPIO]
Выводы RTC поддерживают специальное функционирования в режимах пониженного энергопотребления [6], они могут сохранять запрограммированные уровни в режиме deep sleep. Также эти ножки могут выводить ESP32 из режима deep sleep, когда работает сопроцессор сверхнизкого энергопотребления ULP [7].
GPIO36 RTC_GPIO0 GPIO39 RTC_GPIO3 GPIO34 RTC_GPIO4 GPIO35 RTC_GPIO5 GPIO25 RTC_GPIO6 GPIO26 RTC_GPIO7 GPIO33 RTC_GPIO8 GPIO32 RTC_GPIO9 GPIO4 RTC_GPIO10 GPIO0 RTC_GPIO11 GPIO2 RTC_GPIO12 GPIO15 RTC_GPIO13 GPIO13 RTC_GPIO14 GPIO12 RTC_GPIO15 GPIO14 RTC_GPIO16 GPIO27 RTC_GPIO17
Как использовать RTC GPIO для пробуждения ESP32 см. [8].
[PWM]
Контроллер LED PWM [9] имеет 16 независимых каналов, которые можно сконфигурировать для генерации сигналов ШИМ. Все ножки GPIO могут использоваться для функций PWM, кроме GPIO34 .. GPIO39.
Более подробно о том, как использовать ESP32 PWM в среде Arduino IDE, см. [10].
[I2C]
У ESP32 есть 2 канала I2C, и любые ножки GPIO можно использовать как сигналы интерфейса SDA или SCL. В Arduino IDE по умолчанию настроены следующие выводы I2C:
GPIO21 SDA GPIO22 SCL
Можно при желании настроить другие выводы при инициализации библиотеки Wire с помощью вызова конструктора с параметрами:
Более подробно про использование протокола обмена I2C в Arduino IDE см. [11].
[SPI]
По умолчанию сигналы SPI настроены на следующие выводы:
GPIO23 VSPI MOSI GPIO19 VSPI MISO GPIO18 VSPI CLK GPIO5 VSPI CS
GPIO13 HSPI MOSI GPIO12 HSPI MISO GPIO14 HSPI CLK GPIO15 HSPI CS
[Прерывания]
Все ножки GPIO могут быть сконфигурированы для генерации прерывания по изменению уровня. Более подробно про использованию прерываний см. [12, 13].
[Управление загрузкой]
У ESP32 имеются следующие выводы для управления загрузкой (strapping pins):
GPIO0 GPIO2 GPIO4 GPIO5 (должен быть в лог. 1 во время boot) GPIO12 (должен быть в лог. 0 во время boot) GPIO15 (должен быть в лог. 1 во время boot)
Эти ножки используются для перевода ESP32 в режим загрузчика (bootloader) или режим прошивки. На большинстве отладочных плат со встроенным интерфейсом USB (используется как мост для UART) не нужно беспокоиться о состоянии этих выводов. Схема на плате переводит эти выводы в правильные уровни, чтобы активировать режим прошивки или загрузки. Более подробно про выбор ESP32 Boot Mode см. официальную документацию на чип ESP32.
Следует иметь в виду, что если Вы подключили к этим выводам внешние устройства, то можете столкнуться с проблемами при прошивке нового кода ESP32 или со сбросом платы. Причина может быть в том, что эти периферийные устройства в момент сброса устанавливают недопустимые уровни на выводах управления загрузкой, не давая ESP32 войти в необходимый режим. После завершения сброса, прошивки или загрузки эти выводы могут работать как обычные выводы GPIO или запрограммированные выводы внутренних периферийных устройств.
[Лог. 1 на выводах во время загрузки]
Некоторые ножки GPIO меняют уровень на лог. 1, или выводят сигналы PWM во время загрузки (boot) или сброса. Это значит, что если на эти ножки что-то подключено снаружи, то это может привести при сбросе или загрузке к непредсказуемому поведению устройства ESP32.
GPIO1 GPIO3 GPIO5 GPIO6 .. GPIO11(*) GPIO14 GPIO15
Примечание (*): эти выводы используется для соединения с памятью SPI flash, не рекомендуется применять для других целей.
[Ножка EN]
Enable (EN) это вывод, разрешающий работу регулятора 3.3V. На этом выводе имеется встроенная подтяжка к лог. 1 (pull-up), для запрета регулятора 3.3V соедините EN с GND (лог. 0). Это значит, что вывод EN можно подключить к кнопке, чтобы сбрасывать ESP32.
[Ссылки]
1. ESP32 Pinout Reference: Which GPIO pins should you use? site:randomnerdtutorials.com. 2. Getting Started with the ESP32 Development Board site:randomnerdtutorials.com. 3. ESP32 Capacitive Touch Sensor Pins with Arduino IDE site:randomnerdtutorials.com. 4. ESP32 ADC Read Analog Values with Arduino IDE site:randomnerdtutorials.com. 5. ESP32/ESP8266 Analog Readings with MicroPython site:randomnerdtutorials.com. 6. ESP32: режимы пониженного энергопотребления. 7. ESP32: программирование сопроцессора ULP. 8. ESP32 Deep Sleep with Arduino IDE and Wake Up Sources site:randomnerdtutorials.com. 9. ESP32: API-функции ESP-IDF управления ШИМ-контроллером LEDC. 10. ESP32 PWM with Arduino IDE (Analog Output) site:randomnerdtutorials.com. 11. ESP32 I2C Communication site:randomnerdtutorials.com. 12. ESP32 with PIR Motion Sensor using Interrupts and Timers site:randomnerdtutorials.com. 13. MicroPython: Interrupts with ESP32 and ESP8266 site:randomnerdtutorials.com. |