Чип ESP32 имеет 48 контактов с множеством функций. Не все выводы доступны на всех макетных платах ESP32, и некоторые выводы нельзя использовать.
Есть много вопросов о том, как использовать GPIO ESP32. Какие пины следует использовать? Какие пины следует избегать в своих проектах? Этот пост призван стать простым и понятным справочным руководством по GPIO ESP32.
На рисунке ниже показана распиновка ESP-WROOM-32. ;Вы можете использовать его в качестве эталона, если используете ;голый чип ESP32 ;для создания пользовательской платы:
Примечание. ;Не все GPIO доступны на всех макетных платах, но каждый конкретный GPIO работает одинаково независимо от используемой вами макетной платы. ;Если вы только начинаете работать с ESP32, рекомендуем прочитать наше руководство: ;Начало работы с платой разработки ESP32 ;.
Периферийные устройства ESP32
К периферийным устройствам ESP32 относятся:
- 18 каналов аналого-цифрового преобразователя (АЦП
- 3 SPI-интерфейса
- 3 интерфейса UART
- 2 интерфейса I2C
- 16 выходных каналов ШИМ
- 2 цифро-аналоговых преобразователя (ЦАП)
- 2 интерфейса I2S
- 10 емкостных датчиков GPIO
Функции АЦП (аналогово-цифровой преобразователь) и ЦАП (цифро-аналоговый преобразователь) назначаются определенным статическим контактам. ;Однако вы можете решить, какие контакты являются 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
- 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 также имеет встроенный датчик Холла, который обнаруживает изменения магнитного поля в окружающей среде.