Программирование ARM ESP32: справочник по выводам Fri, December 13 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


ESP32: справочник по выводам Печать
Добавил(а) microsin   

Микросхемы микроконтроллера ESP32 имеют 48 ножек, но не все они доступны на популярных отладочных платах. В этой статье (перевод [1]) приведено описание назначения основных выводов ESP32 и портов GPIO.

На рисунке ниже показана цоколевка модуля ESP-WROOM-32. Эту цоколевку можно использовать в качестве образца для разработки своей собственной платы на основе чипа ESP32.

ESP32 wroom 32 pinout fig01

Нагрузочная способность 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 выводами, цоколевка выводов может меняться в зависимости от производителя платы).

ESP32 DOIT DEV KIT v1 pinout fig02

Дополнительно на выводах присутствуют специальные функции, которые могут подойти для определенного проекта, или могут не понадобиться. В следующей таблице показано, какие выводы лучше использовать как входы, какие как выходы, и с какими выводами корпуса следует быть осторожным. Помеченные зеленым цветом выводы можно использовать свободно. Те, которые подсвечены желтым, тоже можно использовать, но на них нужно обратить особое внимание из-за их неожиданное поведение при загрузке (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. Характеристика оцифровки будет примерно такой, как показана на рисунке ниже.

ADC non linear fig03

[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 с помощью вызова конструктора с параметрами:

Wire.begin(SDA, SCL);

Более подробно про использование протокола обмена 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.

 

Добавить комментарий


Защитный код
Обновить

Top of Page