Чип ESP32 имеет 48 контактов с множеством функций. Не все выводы доступны на всех макетных платах ESP32, и некоторые выводы нельзя использовать.

Есть много вопросов о том, как использовать GPIO ESP32. Какие пины следует использовать? Какие пины следует избегать в своих проектах? Этот пост призван стать простым и понятным справочным руководством по GPIO ESP32.

На рисунке ниже показана распиновка ESP-WROOM-32. ;Вы можете использовать его в качестве эталона, если используете ;голый чип ESP32 ;для создания пользовательской платы:

Примечание. ;Не все GPIO доступны на всех макетных платах, но каждый конкретный GPIO работает одинаково независимо от используемой вами макетной платы. ;Если вы только начинаете работать с ESP32, рекомендуем прочитать наше руководство: ;Начало работы с платой разработки ESP32 ;.

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

К периферийным устройствам ESP32 относятся:

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

Хотя вы можете определить свойства выводов в программном обеспечении, по умолчанию они назначены, как показано на следующем рисунке (это пример для ;платы ESP32 DEVKIT V1 DOIT ;с 36 выводами — расположение выводов может меняться в зависимости от производителя).

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

Выводы, выделенные зеленым, можно использовать. ;Те, которые выделены желтым, можно использовать, но вам нужно обратить внимание, потому что они могут иметь неожиданное поведение, в основном при загрузке. ;Выводы, выделенные красным, не рекомендуется использовать в качестве входов или выходов.

GPIO Вход Выход Заметки
0 PullUp OK выводит ШИМ-сигнал при загрузке
1 контакт TX OK отладочный вывод при загрузке
2 OK OK подключен к бортовому светодиоду
3 OK Контакт RX ВЫСОКИЙ при загрузке
4 OK OK ;
5 OK OK выводит ШИМ-сигнал при загрузке
6 X X подключен к встроенной флэш-памяти SPI
7 X X подключен к встроенной флэш-памяти SPI
8 X X подключен к встроенной флэш-памяти SPI
9 X X подключен к встроенной флэш-памяти SPI
10 X X подключен к встроенной флэш-памяти SPI
11 X X подключен к встроенной флэш-памяти SPI
12 OK OK загрузка не удалась, если вытянуть высоко
13 OK OK ;
14 OK OK выводит ШИМ-сигнал при загрузке
15 OK OK выводит ШИМ-сигнал при загрузке
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 ; только ввод

Продолжайте читать для более подробного и глубокого анализа GPIO ESP32 и его функций.

Ввод только контактов

GPIO с 34 по 39 — это GPI — только входные контакты. ;Эти контакты не имеют внутренних подтягивающих или подтягивающих резисторов. ;Их нельзя использовать как выходы, поэтому используйте эти контакты только как входы:

  • GPIO 34
  • GPIO 35
  • GPIO 36
  • GPIO 39

Флэш-память SPI, встроенная в ESP-WROOM-32

От GPIO 6 до GPIO 11 выставлены некоторые платы разработки ESP32. ;Однако эти контакты подключены к встроенной флэш-памяти SPI на микросхеме ESP-WROOM-32 и не рекомендуются для других целей. ;Так что не используйте эти пины в своих проектах:

  • GPIO6 (SCK/CLK
  • GPIO7 (SDO/SD0
  • GPIO8 (SDI/SD1
  • GPIO9 (SHD/SD2
  • GPIO10 (SWP/SD3
  • GPIO11 (CSC/CMD

Емкостные сенсорные GPIO

;

ESP32 имеет 10 внутренних емкостных сенсорных датчиков. ;Они могут ощущать изменения во всем, что содержит электрический заряд, например, в человеческой коже. ;Таким образом, они могут обнаруживать изменения, возникающие при прикосновении к GPIO пальцем. ;Эти штифты можно легко интегрировать в емкостные пэды и заменить механические кнопки. ;Емкостные сенсорные контакты также можно использовать для ;пробуждения ESP32 от глубокого сна ;.

Эти внутренние сенсорные датчики подключены к этим GPIO:

  • T0 (GPIO 4)
  • T1 (GPIO 0)
  • Т2 (GPIO 2)
  • Т3 (GPIO 15)
  • T4 (GPIO 13)
  • T5 (GPIO 12)
  • Т6 (GPIO 14)
  • Т7 (GPIO 27)
  • Т8 (GPIO 33)
  • Т9 (GPIO 32)

Узнайте, как использовать сенсорные контакты с Arduino IDE: ;Сенсорные контакты ESP32 с Arduino IDE

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

ESP32 имеет 18 x 12-битных входных каналов АЦП (в то время как ;ESP8266 имеет только 1x 10-битный АЦП ;). ;Это GPIO, которые можно использовать в качестве АЦП и соответствующих каналов:

  • 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_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)

Узнайте, как использовать выводы АЦП ESP32:

Примечание. ;Контакты ADC2 нельзя использовать при использовании Wi-Fi. ;Итак, если вы используете Wi-Fi и у вас возникли проблемы с получением значения от GPIO ADC2, вы можете вместо этого использовать GPIO ADC1. ;Это должно решить вашу проблему.

Входные каналы АЦП имеют 12-битное разрешение. ;Это означает, что вы можете получить аналоговые показания в диапазоне от 0 до 4095, где 0 соответствует 0 В, а 4095 — 3,3 В. ;Вы также можете установить разрешение ваших каналов по коду и диапазону АЦП.

Выводы АЦП ESP32 не имеют линейного поведения. ;Вероятно, вы не сможете различить 0 и 0,1 В или 3,2 и 3,3 В. ;Вы должны помнить об этом при использовании выводов АЦП. ;Вы получите поведение, подобное показанному на следующем рисунке.


Посмотреть источник

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

На ESP32 есть 2 x 8-битных канала ЦАП для преобразования цифровых сигналов в аналоговые выходные сигналы напряжения. ;Это каналы ЦАП:

  • ЦАП1 (GPIO25)
  • ЦАП2 (GPIO26)

GPIO RTC

На ESP32 есть поддержка RTC GPIO. ;GPIO, направляемые в подсистему RTC с низким энергопотреблением, можно использовать, когда ESP32 находится в глубоком сне. ;Эти GPIO RTC можно использовать для пробуждения ESP32 из глубокого сна, когда работает сопроцессор со сверхнизким энергопотреблением (ULP). ;Следующие GPIO могут использоваться в качестве ;внешнего источника пробуждения ;.

  • RTC_GPIO0 (GPIO36)
  • RTC_GPIO3 (GPIO39)
  • RTC_GPIO4 (GPIO34)
  • RTC_GPIO5 (GPIO35)
  • RTC_GPIO6 (GPIO25)
  • RTC_GPIO7 (GPIO26)
  • RTC_GPIO8 (GPIO33)
  • RTC_GPIO9 (GPIO32)
  • RTC_GPIO10 (GPIO4)
  • RTC_GPIO11 (GPIO0)
  • RTC_GPIO12 (GPIO2)
  • RTC_GPIO13 (GPIO15)
  • RTC_GPIO14 (GPIO13)
  • RTC_GPIO15 (GPIO12)
  • RTC_GPIO16 (GPIO14)
  • RTC_GPIO17 (GPIO27)

Узнайте, как использовать RTC GPIO для пробуждения ESP32 от глубокого сна: ;Глубокий сон ESP32 с Arduino IDE и источниками пробуждения

ШИМ

ШИМ-контроллер ESP32 LED имеет 16 независимых каналов, которые можно настроить для генерации ШИМ-сигналов с различными свойствами. ;Все контакты, которые могут выступать в качестве выходов, могут использоваться как контакты PWM (GPIO с 34 по 39 не могут генерировать PWM).

Чтобы установить ШИМ-сигнал, вам нужно определить эти параметры в коде:

  • частота сигнала;
  • рабочий цикл;
  • канал ШИМ;
  • GPIO, куда вы хотите вывести сигнал.

Узнайте, как использовать ESP32 PWM с Arduino IDE: ;ESP32 PWM с Arduino IDE

I2C

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

  • GPIO 21 (ПДД)
  • GPIO 22 (СКЛ)

Если вы хотите использовать другие контакты при использовании библиотеки проводов, вам просто нужно вызвать:

Wire.begin(SDA, SCL);

Узнайте больше о протоколе связи I2C с ESP32 с помощью Arduino IDE: ;Связь ESP32 I2C (установка контактов, несколько интерфейсов шины и периферийные устройства)

SPI

By default, the pin mapping for SPI is:

SPI MOSI MISO CLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15

прерывания

Все GPIO могут быть настроены как прерывания.

Узнайте, как использовать прерывания с ESP32:

Обвязочные булавки

Чип ESP32 имеет следующие контакты для обвязки:

  • GPIO 0
  • GPIO 2
  • GPIO 4
  • GPIO 5 (должен быть ВЫСОКИМ во время загрузки)
  • GPIO 12 (должен быть НИЗКИМ во время загрузки)
  • GPIO 15 (должен быть ВЫСОКИМ во время загрузки)

Они используются для перевода ESP32 в режим загрузчика или прошивки. ;На большинстве макетных плат со встроенным USB/Serial вам не нужно беспокоиться о состоянии этих контактов. ;Плата переводит контакты в правильное состояние для режима прошивки или загрузки. ;Более подробную информацию о ;выборе режима загрузки ESP32 можно найти здесь ;.

Однако, если у вас есть периферийные устройства, подключенные к этим контактам, у вас могут возникнуть проблемы с загрузкой нового кода, прошивкой ESP32 новой прошивкой или сбросом платы. ;Если у вас есть какие-либо периферийные устройства, подключенные к обвязочным контактам, и у вас возникают проблемы с загрузкой кода или прошивкой ESP32, это может быть связано с тем, что эти периферийные устройства не позволяют ESP32 войти в правильный режим. ;Прочтите ;документацию по выбору режима загрузки ;, чтобы выбрать правильный путь. ;После сброса, перепрошивки или загрузки эти контакты работают должным образом.

Контакты HIGH при загрузке

Некоторые GPIO меняют свое состояние на HIGH или выводят сигналы PWM при загрузке или сбросе. ;Это означает, что если у вас есть выходы, подключенные к этим GPIO, вы можете получить неожиданные результаты при перезагрузке или загрузке ESP32.

  • GPIO 1
  • GPIO 3
  • GPIO 5
  • GPIO 6 — GPIO 11 (подключен к встроенной флэш-памяти SPI ESP32 — не рекомендуется использовать).
  • GPIO 14
  • GPIO 15

Включить (EN)

Enable (EN) — это контакт включения регулятора 3,3 В. ;Он подтянут, поэтому подключите его к земле, чтобы отключить регулятор 3,3 В. ;Это означает, что вы можете использовать этот вывод, подключенный к кнопке, например, для перезапуска ESP32.

потребляемый ток GPIO

Абсолютный максимальный ток, потребляемый каждым GPIO, составляет 40 мА в соответствии с разделом «Рекомендуемые условия эксплуатации» в техническом описании ESP32.

Встроенный датчик Холла ESP32

ESP32 также имеет встроенный датчик Холла, который обнаруживает изменения магнитного поля в окружающей среде.