ESP32:Основы/Справочник выводов ESP32
Справочник выводов ESP32[1]
Микроконтроллер ESP32 имеет 48 выводов с несколькими функциями. Не все пины доступны на всех платах разработки ESP32, и некоторые из них нельзя использовать.
Возникает множество вопросов о том, как правильно использовать GPIO-пины на ESP32. Какие пины следует использовать в своем проекте, а какие лучше избегать? Целью данной статьи является создание простого и легкодоступного справочника по GPIO-пинам на ESP32.
На рисунке ниже представлена распиновка модуля ESP-WROOM-32. Этот рисунок может быть использован в качестве справочника при создании пользовательских плат на базе ESP32:
Периферийные устройства ESP32
Периферийные устройства ESP32 включают в себя следующие компоненты:
- 18 каналов АЦП (аналого-цифровой преобразователь);
- 3 интерфейса SPI (последовательный периферийный интерфейс);
- 3 интерфейса UART (универсальный асинхронный приемопередатчик);
- 2 интерфейса I2C (интеркоммуникационная шина);
- 16 каналов ШИМ (широтно-импульсная модуляция);
- 2 ЦАП (цифро-аналоговый преобразователь);
- 2 интерфейса I2S (звуковая передача данных);
- 10 программируемых пинов общего назначения с возможностью емкостного сенсорного ввода.
Характеристики АЦП и ЦАП зафиксированы на определенных статических пинах. Однако, пользователь может назначить любой пин на функцию UART, I2C, SPI, PWM или другую - для этого достаточно задать нужную конфигурацию в коде. Возможность такого мультиплексирования функций реализуется за счет особенностей микросхемы ESP32.
Хотя конфигурацию свойств пинов можно задать программно, некоторые из пинов уже имеют определенную функцию по умолчанию. На приведенном ниже рисунке приведен пример расположения пинов на плате ESP32 DEVKIT V1 DOIT с 36 контактами (расположение пинов может меняться в зависимости от производителя).
Кроме того, некоторые пины имеют специфические функции, которые делают их более или менее подходящими для определенного проекта. В следующей таблице показано, какие пины лучше использовать в качестве входов, выходов, а также на каких нужно быть особенно осторожным.
Пины, выделенные зеленым цветом, можно безопасно использовать. Те, что выделены желтым цветом, также можно использовать, но необходимо обращать внимание, поскольку они могут иметь неожиданное поведение, особенно при запуске. Пины, выделенные красным цветом, не рекомендуется использовать как входы или выходы.
GPIO | Вход | Выход | Примечания |
---|---|---|---|
0 | Подтянут к + | ✓ | Выходной сигнал ШИМ на старте, должен быть НИЗКИМ для входа в режим прошивки |
1 | TX | ✓ | Отладочный вывод при старте устройства |
2 | ✓ | ✓ | Подключен к встроенному светодиоду, должен быть оставлен в плавающем состоянии (не подключен) или установлен в низкое состояние для входа в режим прошивки |
3 | ✓ | RX | Установлено в высокое состояние при загрузке |
4 | ✓ | ✓ | |
5 | ✓ | ✓ | Выходной ШИМ-сигнал при старте устройства, связывающий вывод; связывающий контакт (переопределяющий назначение других выводов при подаче на него сигнала) |
6 | ✗ | ✗ | Подключено к интегрированной SPI-флеш-памяти |
7 | ✗ | ✗ | Подключено к интегрированной SPI-флеш-памяти |
8 | ✗ | ✗ | Подключено к интегрированной SPI-флеш-памяти |
9 | ✗ | ✗ | Подключено к интегрированной SPI-флеш-памяти |
10 | ✗ | ✗ | Подключено к интегрированной SPI-флеш-памяти |
11 | ✗ | ✗ | Подключено к интегрированной SPI-флеш-памяти |
12 | ✓ | ✓ | Ошибка загрузки при подключении стрэппинг(связывающий вывод; связывающий контакт (переопределяющий назначение других выводов при подаче на него сигнала)) пина к высокому уровню напряжения |
13 | ✓ | ✓ | |
14 | ✓ | ✓ | Генерирует сигнал ШИМ при запуске |
15 | ✓ | ✓ | Выходной ШИМ-сигнал при старте устройства, связывающий вывод; связывающий контакт (переопределяющий назначение других выводов при подаче на него сигнала) |
16 | ✓ | ✓ | |
17 | ✓ | ✓ | |
18 | ✓ | ✓ | |
19 | ✓ | ✓ | |
20 | ✓ | ✓ | |
21 | ✓ | ✓ | |
22 | ✓ | ✓ | |
23 | ✓ | ✓ | |
24 | ✓ | ✓ | |
25 | ✓ | ✓ | |
26 | ✓ | ✓ | |
27 | ✓ | ✓ | |
28 | ✓ | ✓ | |
29 | ✓ | ✓ | |
30 | ✓ | ✓ | |
31 | ✓ | ✓ | |
32 | ✓ | ✓ | |
33 | ✓ | ✓ | |
34 | ✓ | Только ввод | |
35 | ✓ | Только ввод | |
36 | ✓ | Только ввод | |
39 | ✓ | Только ввод |
Пины только для ввода
GPIO 34-39 - пины только для ввода. Они не имеют встроенных подтягивающих или стягивающих резисторов и поэтому не могут быть использованы как пины вывода. Рекомендуется использовать эти пины только в качестве входов.
- GPIO 34;
- GPIO 35;
- GPIO 36;
- GPIO 39;
Интегрированная SPI-флэш память находится на чипе ESP-WROOM-32
На некоторых платах разработки ESP32 доступны выводы GPIO 6-11. Однако эти выводы соединены с интегрированной 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 внутренних емкостных сенсоров, позволяющих регистрировать изменения в электрически заряженных объектах, таких как человеческая кожа. Благодаря этому они могут обнаруживать изменения, возникающие при касании указанных выводов с помощью пальца. Они легко интегрируются в емкостные платы и могут использоваться для замены механических кнопок. Встроенные емкостные сенсоры также могут быть использованы для "разбуживания" 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);
Аналого-цифровой преобразователь (ADC)
ESP32 обладает 18 входными каналами АЦП с разрешением 12 бит, в то время как у ESP8266 имеется только один входной канал АЦП с разрешением 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);
Входные каналы АЦП имеют разрешение 12 бит. Это означает, что аналоговые значения могут находиться в диапазоне от 0 до 4095, где 0 соответствует 0 В, а 4095 - 3,3 В. Также можно установить разрешение каналов в коде и диапазон АЦП.
Выходы ADC ESP32 не имеют линейного поведения. Вероятно, вы не сможете различить между 0 и 0,1 В или между 3,2 и 3,3 В. Нужно иметь это в виду при использовании выходов ADC. Поведение будет похожим на то, которое показано на следующей картинке.
Цифро-аналоговый преобразователь (ЦАП)
На микроконтроллере ESP32 имеется два канала цифро-аналогового преобразователя (ЦАП), каждый из которых имеет разрешение 8 бит. ЦАП позволяет преобразовывать цифровой сигнал в аналоговый, который может быть использован для управления напряжением на выходе.
- DAC1 (GPIO25);
- DAC2 (GPIO26);
RTC GPIO
ESP32 поддерживает RTC GPIO, т.е. GPIO, связанные с RTC, могут использоваться в режиме глубокого сна, когда устройство работает на энергосберегающем режиме. Эти 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);
ШИМ
Контроллер ШИМ (Широтно-Импульсная Модуляция) на ESP32 имеет 16 независимых каналов, которые могут быть настроены для генерации ШИМ-сигналов с различными параметрами. Все выводы микроконтроллера, которые могут использоваться в качестве выходов, могут быть использованы как ШИМ-выводы (GPIO 34-39 не могут генерировать ШИМ).
Для установки ШИМ-сигнала необходимо определить следующие параметры в коде:
- Частота сигнала;
- Соотношение заполнения (отношение длительности импульса к периоду);
- Канал ШИМ;
- GPIO-пин, на который требуется выводить сигнал.
I2C
На микроконтроллере ESP32 есть два канала I2C, и любой пин может быть настроен как SDA или SCL. При использовании ESP32 с IDE Arduino используются следующие пины I2C по умолчанию:
- GPIO 21 (SDA);
- GPIO 22 (SCL);
Если вы хотите использовать другие пины при использовании библиотеки Wire, вам нужно вызвать:
Wire.begin(SDA, SCL);
SPI
По умолчанию, привязка контактов для интерфейса SPI выглядит следующим образом:
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 имеет следующие связывающие выводы(strapping pins):
- GPIO 0 (должен быть низким для входа в режим загрузчика);
- GPIO 2 (должен находиться в плавающем состоянии или быть низким во время запуска);
- GPIO 4;
- GPIO 5 (должен быть высоким во время запуска);
- GPIO 12 (должен быть низким во время запуска);
- GPIO 15 (должен быть высоким во время запуска).
Они используются для перевода ESP32 в режим загрузчика или прошивки. На большинстве плат со встроенным USB/Serial не нужно беспокоиться о состоянии этих контактов, потому что плата автоматически устанавливает контакты в правильное состояние для прошивки или режима загрузки.
Однако, если у вас есть периферийные устройства, подключенные к этим контактам, у вас может возникнуть проблема при попытке загрузки нового кода, прошивки ESP32 с новой прошивкой или перезагрузки платы. Если у вас есть некоторые периферийные устройства, подключенные к связывающим выводам(strapping pins), и вы испытываете проблемы с загрузкой кода или прошивки 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
Согласно разделу "Рекомендуемые условия эксплуатации" в документации ESP32, максимально допустимый ток, который может потреблять каждый вывод GPIO не должен превышать 40 мА. Это означает, что при проектировании электрических схем на базе ESP32 необходимо учитывать этот параметр и не превышать указанный лимит тока на каждом выводе GPIO.
Датчик эффекта Холла
ESP32 также оснащен встроенным датчиком эффекта Холла, который обнаруживает изменения магнитного поля в окружающей среде.
См.также
Внешние ссылки