Розпінування ESP32

ESP32 — популярний мікроконтролер із вбудованим Wi-Fi та Bluetooth, використовується в IoT-проектах. Для успішної роботи з платою важливо розуміти призначення її контактів.

Niqitos
Niqitos
4 вер. 2025 р.12 хвилин

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

На малюнку нижче показано розпіновку чіпа ESP-WROOM-32. Використовуйте його як довідковий матеріал, якщо ви використовуєте голу мікросхему ESP32 для складання власної плати:

Не всі GPIO доступні на всіх платах розробки, але кожен конкретний GPIO працює однаково, незалежно від плати розробки, що використовується. Якщо ви починаєте працювати з 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підключений через підтягуючий резисторOKвиводить ШІМ сигнал під час завантаження
1TX пінOKналагоджувальний контакт під час завантаження
2OKOKпідключений до вбудованого світлодіода, повинен залишатися плаваючим або перебувати у стані LOW для переходу в режим миготіння
3OKRX пінвиводить сигнал високого рівня під час завантаження
4OKOK
5OKOKвиводить ШИМ сигнал під час завантаження.
6XXпідключений до вбудованої флеш-пам'яті SPI
7XXпідключений до вбудованої флеш-пам'яті SPI
8XXпідключений до вбудованої флеш-пам'яті SPI
9XXпідключений до вбудованої флеш-пам'яті SPI
10XXпідключений до вбудованої флеш-пам'яті SPI
11XXпідключений до вбудованої флеш-пам'яті SPI
12OKOKESP32 не завантажується, якщо вхід підтягнутий до HIGH, що з'єднує контакт
13OKOK
14OKOKвиводить ШІМ сигнал під час завантаження
15OKOKвиводить ШІМ сигнал під час завантаження
16OKOK
17OKOK
18OKOK
19OKOK
21OKOK
22OKOK
23OKOK
25OKOK
26OKOK
27OKOK
32OKOK
33OKOK
34OKлише вхід
35OKлише вхід
36OKлише вхід
39OKлише вхід

Піни входу

GPIOs 34-39 є GPI - тобто працюють тільки в режимі введення, так як вони не оснащені резистором, що підтягує.

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

SPI flash на ESP-WROOM-32

GPIO з 6 по 11 мають контакти на деяких платах розробки ESP32, але ці контакти приєднані до вбудованого модуля SPI flash на чіпі 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 вхідних 12-бітових каналів АЦП (тоді як ESP8266 має лише 1 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)

Примітка: контакти АЦП2 не можна використовувати під час використання Wi-Fi. Тому, якщо ви використовуєте Wi-Fi і у вас виникають проблеми з отриманням значення з виходу АЦП2 GPIO, спробуйте використати замість нього вихід АЦП1 GPIO — це має вирішити проблему.

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

Висновки АЦП ESP32 немає лінійного поведінки. Ви, ймовірно, не зможете відрізнити 0 від 0,1 або 3,2 від 3,3 В. Це необхідно враховувати при використанні контактів АЦП. Ви отримаєте поведінку, схожу на показану на наступному малюнку.

Цифро-аналоговий перетворювач (ЦАП)

ESP32 має два 8-бітових канали ЦАП для перетворення цифрових сигналів в аналогові вихідні сигнали напруги. Канали ЦАП:

  • DAC1 (GPIO25)
  • DAC2 (GPIO26)

RTC GPIOs

ESP32 підтримує RTC GPIO. Висновки GPIO, підключені до RTC з низьким енергоспоживанням, можуть використовуватися, коли ESP32 знаходиться в режимі глибокого сну. Ці RTC GPIO можна використовувати для виведення 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)

Широтно-імпульсна модуляція (ШІМ)

Контролер світлодіодів ESP32 із ШІМ має 16 незалежних каналів, які можна налаштувати для генерації ШІМ-сигналів із різними характеристиками. Усі контакти, які можуть працювати як виходи, можуть використовуватися як контакти ШІМ (контакти GPIO з 34 до 39 не підтримують генерацію ШІМ).

Для встановлення ШИМ-сигналу необхідно визначити такі параметри в коді:

  • частота сигналу;
  • коефіцієнт заповнення;
  • канал ШІМ;
  • Порт GPIO, який ви хочете подати сигнал.

I2C

При використанні ESP32 з Arduino IDE слід використовувати стандартні контакти ESP32 I2C (підтримувані бібліотекою Wire):

  • GPIO 21 (SDA)
  • GPIO 22 (SCL)

Serial Peripheral Interface (SPI)

За промовчанням призначення контактів для SPI:

SPIMOSIMISOCLKCS
VSPIGPIO 23GPIO 19GPIO 18GPIO 5
HSPIGPIO 13GPIO 12GPIO 14GPIO 15

UART

ESP32 підтримує до трьох інтерфейсів UART: UART0, UART1 і UART2, залежно від моделі плати ESP32, що використовується.

Порт UART0 зазвичай резервується для зв'язку з послідовним монітором під час завантаження та налагодження. Однак його також можна використовувати для зв'язку з іншими пристроями після завантаження коду, якщо монітор не потрібен. UART1 та UART2: доступні для зв'язку із зовнішніми пристроями. Як і I2C і SPI, ці контакти UART можна призначити будь-якому контакту GPIO ESP32. Однак, на більшості моделей плат вони мають стандартне призначення контактів. Для більшості плат ESP32 призначення контактів UART є наступним:

UART PortTXRXRemarks
UART0GPIO 1GPIO 3Used for Serial Monitor and uploading code; Can be assigned to other GPIOs;
UART1GPIO 10GPIO 9Must be assigned to other GPIOs
UART2GPIO 17GPIO 16Can be assigned to other GPIOs

Що стосується UART1 (GPIO 9 і GPIO10), ці контакти GPIO підключені до флеш-пам'яті ESP32 SPI, тому використовувати їх не можна. Щоб використати UART1 для зв'язку з іншими пристроями, необхідно визначити інші контакти за допомогою бібліотеки HardwareSerial.

Переривання

Всі GPIO можна настроїти на переривання.

Зв'язувальні контакти

Чіп ESP32 має такі зв'язувальні контакти:

  • GPIO 0
  • GPIO 2
  • GPIO 4
  • GPIO 5
  • GPIO 12
  • GPIO 15

Вони використовуються для переведення ESP32 у режим завантажувача або прошивки. На більшості плат з вбудованим USB/послідовним портом вам не потрібно турбуватися про стан цих контактів. Плата сама переводить контакти в стан, необхідний для прошивки чи завантаження. Докладніше про вибір режиму завантаження ESP32 можна дізнатися тут.

Однак, якщо до цих контактів підключено периферійні пристрої, можуть виникнути проблеми із завантаженням нового коду, прошивкою ESP32 або скиданням налаштувань плати. Якщо до цих контактів підключено периферійні пристрої, і виникають проблеми із завантаженням коду або прошивкою ESP32, можливо, ці пристрої заважають ESP32 перейти в потрібний режим. Ознайомтеся з документацією щодо вибору режиму завантаження, щоб дізнатися, як це зробити. Після скидання налаштувань, прошивки або завантаження ці контакти працюють як слід.

Контакти HIGH при завантаженні

Деякі GPIO змінюють стан на HIGH або виводять ШИМ-сигнали під час завантаження чи скидання. Це означає, що якщо до цих GPIO підключені виходи, ви можете отримати несподівані результати під час скидання або завантаження ESP32.

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

Enable (EN)

Вивід «Enable» (EN) – це контакт увімкнення регулятора напруги 3,3 В. Він підтягнутий до потенціалу, тому для відключення регулятора напруги 3,3 В його слід підключити до заземлення. Це означає, що цей контакт можна використовувати, підключивши його до кнопки, наприклад, для перезапуску ESP32.

Потужний струм GPIO

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

Вбудований датчик Холла ESP32

ESP32 також має вбудований датчик Холла, який виявляє зміни магнітного поля навколо нього.

На завершення

Сподіваємося, цей довідковий посібник з GPIO-портів ESP32 був вам корисним. Якщо у вас є додаткові поради щодо GPIO-портів ESP32, будь ласка, поділіться ними в коментарях нижче.