При создании проектов на ESP32 часто возникает вопрос, какие контакты GPIO можно использовать, а какие – нет. Чип ESP32 имеет 48 контактов с различными функциями. Не все контакты доступны на различных платах, ESP32. Некоторые контакты на различных отладочных платах нельзя использовать.
Часто возникают вопросы, какие контакты GPIO можно использовать, а каких стоит избегать? В данной статье как раз это и рассмотрим.
Посмотрим распиновку ESP-WROOM-32. Вы можете использовать его в качестве справочника, если используете голый чип ESP32 для создания собственных проектов.
Примечание. Не GPIO доступны на всех отладочных платах. Но, каждый конкретно GPIO работает одинаково независимо от использованной вами платы.
Периферийные устройства ESP32.
К периферийным устройствам ESP32 относятся:
- 18 Каналов аналого-цифрового преобразователя (АЦП )
- 3 Интерфейса SPI3
- Интерфейс UART2
- Интерфейс I2C16
- Выходные каналы ШИМ
- 2 Цифро-аналоговых преобразователя (ЦАП)
- 2 Интерфейса I2S10
- Емкостные считывающие GPIO
Функции АЦП (аналого-цифровой преобразователь) и ЦАП (цифро-аналоговый преобразователь) назначены строго определённым пинам. Тем не менее, вы сами решаете, какие контакты будут отведены под интерфейсы UART, I2C, SPI, PWM и т. д. - они определяются в коде прошивки. Это возможно благодаря функции мультиплексирования чипа ESP32.
Существуют пины, назначенные по умолчанию, как показано на следующем рисунке (это пример платы ESP32 DEVKIT V1 с 36 контактами - расположение контактов может меняться в зависимости от производителя). Вы можете их переопределять.
Кроме того, есть контакты с определенными функциями, которые делают их подходящими или нет для конкретного проекта. В следующей таблице показано, какие контакты лучше всего использовать в качестве входов, выходов и какие из них следует использовать с осторожностью.
Контакты, выделенные зеленым цветом, можно использовать. Те, которые выделены желтым, можно использовать, но вам нужно обратить внимание, потому что они могут иметь неожиданное поведение, в основном, при загрузке. Контакты, выделенные красным, не рекомендуется использовать в качестве входов или выходов.
GPIO
|
Ввод
|
Вывод
|
Заметки
|
0
|
pulled up
|
ОК
|
outputs PWM signal at boot
|
1
|
Контакт TX
|
ОК
|
вывод отладки при загрузке
|
2
|
ОК
|
ОК
|
подключен к встроенному светодиоду
|
3
|
ОК
|
Вывод RX
|
ВЫСОКИЙ при загрузке
|
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 с 34 по 39 являются GPIO - только входные. Эти контакты не имеют внутренних подтягивающих или понижающих резисторов. Они не могут быть использованы как выходы, поэтому используйте эти контакты только как входы:
- GPIO 34
- GPIO 35
- GPIO 36
- GPIO 39
SPI-flash встроена в ESP-WROOM-32.
От GPIO 6 до GPIO 11 доступны в некоторых платах ESP32. Однако эти пины подключены к встроенной флэш-памяти SPI на микросхеме ESP-WROOM-32 и их не рекомендуется использовать для других целей. Назначение этих пинов:
- GPIO 6 (SCK / CLK)
- GPIO 7 (SDO / SD0)
- GPIO 8 (SDI / SD1)
- GPIO 9 (SHD / SD2)
- GPIO 10 (SWP / SD3)
- GPIO 11 (CSC / CMD)
Емкостные сенсорные GPIO.
ESP32 имеет 10 внутренних емкостных сенсорных датчиков. Они могут отслеживать всё, что содержит электрический заряд, например, они могут обнаруживать изменения, возникающие при касании пальцами GPIO. Эти контакты могут быть легко встроены в датчики касания и заменять механические кнопки. Емкостные сенсорные контакты также могут быть использованы для пробуждения ESP32 от глубокого сна.
Внутренние сенсорные датчики подключены к этим GPIO:
- T0 (GPIO 4)
- T1 (GPIO 0)
- T2 (GPIO 2)
- T3 (GPIO 15)
- T4 (GPIO 13)
- T5 (GPIO 12)
- T6 (GPIO 14)
- T7 (GPIO 27)
- T8 (GPIO 33)
- T9 (GPIO 32)
Аналого-цифровой преобразователь (АЦП).
ESP32 имеет входные каналы АЦП 18 x 12 бит. Это 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)
Примечание: контакты 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 имеются два 8-битных канала ЦАП для преобразования цифровых сигналов в аналоговые выходные сигналы напряжения. Пины ЦАП:
- ЦАП1 (GPIO25)
- ЦАП2 (GPIO26)
RTC GPIO.
На ESP32 есть поддержка RTC GPIO. GPIO, маршрутизируемые в подсистему с низким энергопотреблением RTC, можно использовать, когда ESP32 находится в состоянии глубокого сна. Эти RTC GPIO могут использоваться для выхода ESP32 из глубокого сна, когда работает сопроцессор Ultra Low Power (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)
PWM.
ШИМ-контроллер ESP32 имеет 16 независимых каналов, которые можно настроить для генерации ШИМ-сигналов с различными свойствами. Все выводы, которые могут выступать в качестве выходов, могут использоваться в качестве выводов ШИМ (GPIO с 34 по 39 не могут генерировать ШИМ).
Чтобы установить сигнал ШИМ, вам необходимо определить эти параметры в коде:
- Частота сигнала;
- Рабочий цикл;
- ШИМ-канал;
- GPIO, на которых вы хотите вывести сигнал.
I2C.
При использовании ESP32 с Arduino IDE следует использовать выводы ESP32 I2C по умолчанию (поддерживаются библиотекой Wire):
- GPIO 21 (SDA)
- GPIO 22 (SCL)
Если вы хотите использовать другие контакты, вам просто нужно вызвать:
Wire.begin(SDA, SCL);
SPI.
Пины для SPI по умолчанию:
PI
|
MOSI
|
MISO
|
CLK
|
CS
|
VSPI
|
GPIO 23
|
GPIO 19
|
GPIO 18
|
GPIO 5
|
HSPI
|
GPIO 13
|
GPIO 12
|
GPIO 14
|
GPIO 15
|
Прерывания.
Все GPIO могут быть настроены для обработки прерываний.
Микросхема ESP32 использовать пины при загрузке:
- GPIO 0
- GPIO 2
- GPIO 4
- GPIO 5 (во время загрузки должен быть ВЫСОКИЙ)
- GPIO 12 (во время загрузки должно быть НИЗКОЕ)
- GPIO 15 (во время загрузки должен быть ВЫСОКИЙ)
Они используются для перевода ESP32 в режим загрузчика или в режим перепрошивки. На большинстве плат разработки со встроенным USB / Serial вам не нужно беспокоиться о состоянии этих контактов. Плата переводит контакты в правильное состояние для перепрошивки или режима загрузки.
Однако, если к этим контактам подключены периферийные устройства, у вас могут возникнуть проблемы при попытке загрузить новый код, перепрошить ESP32 или перезагрузить плату.
Пины с изменением сигнала при загрузке.
Некоторые GPIO изменяют свое состояние на HIGH или выводят ШИМ-сигналы при загрузке или сбросе. Это означает, что если у вас есть выходы, подключенные к этим GPIO, вы можете получить неожиданные результаты при перезагрузке или загрузке ESP32.
- GPIO 1
- GPIO 3
- GPIO 5
- GPIO 6 - GPIO 11 (подключены к встроенной флэш-памяти SPI ESP32 - использовать не рекомендуется).
- GPIO 14
- GPIO 15
Пин (EN).
Enable (EN) - Вы можете использовать этот контакт, подключенный к кнопке, например, для перезапуска ESP32.
Допустимый ток у GPIO.
Абсолютный максимальный ток, потребляемый GPIO, составляет 40 мА.
ESP32 Встроенный датчик Холла.
ESP32 также имеет встроенный датчик Холла, который обнаруживает изменения в магнитном поле в его окружении.
Заключение.
Мы надеемся, что вы нашли это справочное руководство по GPIO ESP32 полезным. Если у вас есть дополнительные советы по GPIO ESP32, поделитесь ими, написав комментарий ниже.
Смотрите так же уроки по ESP32:
Урок 1. Веб-сервер ESP32 (ESP8266) в среде Arduino IDE
Урок 2. Подключаем DHT11, DHT22 к ESP32, ESP8266. Показание на веб-странице.
Урок 3. ESP32 и ESP8266 с выводом статуса на веб-страницу и на OLED дисплей.
Понравилась статья Распиновка ESP32, какие контакты GPIO можно использовать, а какие нет? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Комментарии