|
При разработке проектов на ESP32 количество доступных АЦП-входов критично, когда нужно подключить много аналоговых датчиков. Ниже — детальный обзор по актуальным чипам Espressif от лидера по числу входов до самых компактных моделей.
Наибольшее количество аналоговых входов предлагают линейки ESP32-S2 и ESP32-S3, а также старшие модели оригинального ESP32. Ниже представлена сводная таблица для сравнения:
| Микроконтроллер |
Всего каналов |
Модулей АЦП |
Разрядность |
Примечания |
ESP32-S2, ESP32-S3 |
20 |
2 |
13 бит |
Абсолютные лидеры по числу входов (GPIO 1-20) |
| ESP32 |
18 |
2 |
12 бит |
ADC2 (10 каналов) используется Wi-Fi стеком. |
| ESP32-P4 |
~12-14 (точно неизвестно) |
2 |
12/13 бит |
Новый чип, точное число входов уточняйте в даташите. |
| ESP32-C6 |
7 (0–6) |
1 |
12 бит |
Хороший баланс для проектов без Wi-Fi. |
| ESP32-C3 |
6 (0–4, 5) |
2 |
12 бит |
ADC2 имеет только 1 канал (GPIO5). Также много ограничений по использованию входов, см. [1]. |
| ESP32-H2 |
2 (0–1) |
1 |
12 бит |
Специализированный чип для Zigbee/Thread. |
Обратите внимание: все перечисленные АЦП относятся к типу SAR (последовательного приближения), что обеспечивает хорошую скорость измерения.
[Важные нюансы использования]
При выборе МК учитывайте не только количество портов, но и особенности их работы:
1. Проблема ADC2 и Wi-Fi (ESP32 и ESP32-S2): в классическом ESP32 и ESP32-S2 10 каналов второго АЦП (ADC2) используются драйверами Wi-Fi. Если в вашем проекте активен Wi-Fi, вы не сможете одновременно считывать аналоговые сигналы с этих портов GPIO — это вызовет ошибку. Для сенсоров при работе с Wi-Fi используйте только ADC1 (порты GPIO 32–39 на ESP32).
2. Разрядность: более высокая разрядность (13 бит у ESP32-S2 и ESP32-S3 против 12 у оригинального ESP32) дает чуть лучшую теоретическую точность, но на практике для стабильных показаний все равно требуется программная калибровка.
3. Не используйте GPIO0 для сенсоров на ESP32: в старых платах (ESP32) порт GPIO0 отвечает за загрузку (Boot Mode). Подключение датчика к этому выводу может помешать прошивке устройства.
Если ваша задача — опрашивать много аналоговых датчиков (например, массив фоторезисторов или потенциометров), берите ESP32-S3. Он дает максимум входов (20) и при этом современен. Для большинства стандартных задач (подключение 3-5 датчиков) с запасом хватит ESP32-C3 или ESP32-C6 — они компактнее и дешевле. Старый добрый ESP32 остается отличным выбором, но помните про конфликт ADC2 с Wi-Fi и используйте только первую группу портов GPIO (32–39).
[Выбор платы разработчика для ESP32-S3]
Вопрос о платах разработки для ESP32-S3 очень актуальный, так как именно на этом чипе больше всего аналоговых входов — целых 20 каналов АЦП. Это идеальный выбор для проектов с множеством аналоговых датчиков.
Среди популярных плат можно выделить несколько ключевых категорий, и важно понимать, сколько входов АЦП вы реально сможете задействовать на каждой из них.
| Плата разработки |
Всего доступно входов АЦП |
Примечания и особенности |
| Официальные платы Espressif (ESP32-S3-DevKitC-1) |
Все 20 |
Выведены почти все GPIO 1-20. Это референсные платы, гарантирующие доступ ко всей периферии чипа. |
| Seeed Studio XIAO ESP32-S3 |
До 11 |
Несмотря на компактный размер (палец), плата выводит много портов GPIO, включая 11 аналоговых. Отличный выбор для компактных устройств. |
| LILYGO T-Circle-S3 |
До 20 (но часть занята) |
У большинства GPIO есть альтернативные функции (дисплей, сенсоры), что уменьшает число свободных аналоговых портов. |
| Heltec LoRa 32 (V3) |
Переменное |
Из-за встроенного OLED-дисплея и LoRa-модуля значительная часть GPIO уже используется, но 5-7 входов для АЦП выделить можно. |
| Waveshare ESP32-S3-AUDIO-Board |
До 10 |
Много портов занято под аудиокодек, microSD и RGB-светодиоды. Аналоговых входов будет меньше из-за специализации платы. |
Важный момент: приведенные числа — это максимальный технический потенциал. В реальном проекте количество доступных аналоговых входов всегда будет меньше, потому что:
1. Часть портов занята встроенными на плате компонентами (дисплеи, microSD, аудиочипы). 2. Некоторые GPIO нужны вам для других интерфейсов (I2C, SPI, UART).
[Привязка входов АЦП ESP32-S3 к выводам портов GPIO]
Входы АЦП у ESP32-S3 жестко привязаны к определенным выводам GPIO. Это аппаратное ограничение — вы не можете произвольно назначить любой GPIO для аналогового ввода. Доступен фиксированный набор из 20 портов GPIO, которые разделены между двумя АЦП-модулями.
ESP32-S3 имеет два 12-битных SAR АЦП (ADC1 и ADC2), каждый из которых поддерживает по 10 каналов. Полная таблица привязки АЦП к GPIO:
| АЦП-модуль |
Канал |
Вывод GPIO |
RTC GPIO |
| ADC1 |
CH0 |
GPIO1 |
RTC_GPIO1 |
| CH1 |
GPIO2 |
RTC_GPIO2 |
| CH2(*) |
GPIO3 |
RTC_GPIO3 |
| CH3 |
GPIO4 |
RTC_GPIO4 |
| CH4 |
GPIO5 |
RTC_GPIO5 |
| CH5 |
GPIO6 |
RTC_GPIO6 |
| CH6 |
GPIO7 |
RTC_GPIO7 |
| CH7 |
GPIO8 |
RTC_GPIO8 |
| CH8 |
GPIO9 |
RTC_GPIO9 |
| CH9 |
GPIO10 |
RTC_GPIO10 |
| ADC2 |
CH0 |
GPIO11 |
RTC_GPIO11 |
| CH1 |
GPIO12 |
RTC_GPIO12 |
| CH2 |
GPIO13 |
RTC_GPIO13 |
| CH3 |
GPIO14 |
RTC_GPIO14 |
| CH4 |
GPIO15 |
RTC_GPIO15 |
| CH5 |
GPIO16 |
RTC_GPIO16 |
| CH6 |
GPIO17 |
RTC_GPIO17 |
| CH7 |
GPIO18 |
RTC_GPIO18 |
| CH8 |
GPIO19 |
RTC_GPIO19 |
| CH9 |
GPIO20 |
RTC_GPIO20 |
Примечание *: strapping pin (вывод управления загрузкой). Таким образом, этот вход использовать для аналогового ввода - плохая идея.
Таким образом, каждый аналоговый вход доступен строго на GPIO1–GPIO20. Все остальные порты (GPIO21, GPIO26–48) такой функции не имеют.
Ключевые ограничения и предостережения:
1. Конфликт ADC2 с Wi-Fi (важнее всего!). На ESP32-S3, как и на оригинальном ESP32, АЦП-модуль ADC2 используется Wi-Fi драйвером. Если в вашем проекте активен Wi-Fi (например, вы отправляете данные на сервер), вы не сможете одновременно читать аналоговые сигналы с GPIO11–GPIO20. Это вызовет ошибки. Для аналоговых датчиков при работе с Wi-Fi используйте только ADC1 (GPIO1–GPIO10).
2. Strapping pins (выводы, влияющие на загрузку). Некоторые порты, входящие в группу аналоговых, имеют особые функции при старте чипа и требуют осторожного обращения:
● GPIO0 и GPIO3: используются для определения режима загрузки (UART download mode, JTAG интерфейс). Подача неправильного уровня на эти порты во время включения может помешать запуску или прошивке. ● GPIO45 и GPIO46: также являются strapping pins, но они не входят в число аналоговых, так что для АЦП не критичны.
3. Порты, занятые flash/PSRAM (GPIO9 и GPIO10). На многих платах разработки с ESP32-S3 выводы GPIO9 и GPIO10 используются для подключения внешней flash-памяти и PSRAM. В таких платах эти порты не выведены на разъемы или их использование для других целей крайне не рекомендуется, так как это нарушит работу с памятью.
Практические рекомендации:
1. Проекты с Wi-Fi: используйте только GPIO1–GPIO10 (ADC1). Это даст вам 10 аналоговых входов, которых достаточно для большинства задач. Проекты без Wi-Fi: у вас есть доступ ко всем 20 аналоговым портам (GPIO1–GPIO20, с учетом других ограничений). 2. Избегайте проблем с загрузкой: старайтесь не подключать критически важные датчики к GPIO0 и GPIO3, если вы не уверены в уровнях сигналов при старте. 3. Проверяйте распиновку платы: перед использованием GPIO9 и GPIO10 убедитесь, что они не задействованы под flash/PSRAM на вашей конкретной модели платы.
[Порты для АЦП у платы YD-ESP32-23]
В магазине OZON можно купить недорогую плату [3], по сути это открытый проект [4].

На этой плате для входов АЦП можно использовать порты, помеченные зеленым цветом:
| Канал |
Вывод GPIO |
Имя в ESP-IDF для ADC |
Имя ESP-IDF для RTC |
Имя в Arduino IDE (analogRead()) |
Другие аппаратные функции (IO MUX) |
Блок ADC1:
|
| CH0 |
GPIO1 |
ADC1_CH0 |
RTC_GPIO1 |
1 или A0 |
TOUCH1 (сенсорный вход) |
| CH1 |
GPIO2 |
ADC1_CH1 |
RTC_GPIO2 |
2 или A1 |
TOUCH2 (сенсорный вход) |
CH2
|
GPIO3 |
ADC1_CH2 |
RTC_GPIO3 |
3 или A2 |
Управление загрузкой |
| CH3 |
GPIO4 |
ADC1_CH3 |
RTC_GPIO4 |
4 или A3 |
TOUCH4 (сенсорный вход) |
| CH4 |
GPIO5 |
ADC1_CH4 |
RTC_GPIO5 |
5 или A4 |
TOUCH5 (сенсорный вход) |
| CH5 |
GPIO6 |
ADC1_CH5 |
RTC_GPIO6 |
6 или A5 |
TOUCH6 (сенсорный вход) |
| CH6 |
GPIO7 |
ADC1_CH6 |
RTC_GPIO7 |
7 или A6 |
TOUCH7 (сенсорный вход) |
| CH7 |
GPIO8 |
ADC1_CH7 |
RTC_GPIO8 |
8 или A7 |
TOUCH8 (сенсорный вход), SUBSPICS1 (SPI slave) |
| CH8 |
GPIO9 |
ADC1_CH8 |
RTC_GPIO9 |
9 или A8 |
TOUCH9, FSPIHD (SPI Host), SUBSPIHD |
| CH9 |
GPIO10 |
ADC1_CH9 |
RTC_GPIO10 |
10 или A9 |
TOUCH10, FSPICS0 (SPI Host), FSPIIO4, SUBSPICS0 |
| Блок ADC2: |
| CH0 |
GPIO11 |
ADC2_CH0 |
RTC_GPIO11 |
11 или A10 |
TOUCH11, FSPID (SPI Host), FSPIIO5, SUBSPID |
| CH1 |
GPIO12 |
ADC2_CH1 |
RTC_GPIO12 |
12 или A11 |
TOUCH12, FSPICLK (SPI Host), FSPIIO6, SUBSPICLK |
| CH2 |
GPIO13 |
ADC2_CH2 |
RTC_GPIO13 |
13 или A12 |
TOUCH13, FSPIQ (SPI Host), FSPIIO7, SUBSPIQ |
| CH3 |
GPIO14 |
ADC2_CH3 |
RTC_GPIO14 |
14 или A13 |
FSPIWP (SPI Host), FSPIDOS, SUBSPIWP |
| CH4 |
GPIO15 |
ADC2_CH4 |
RTC_GPIO15 |
15 или A14 |
U0RTS (UART0), XTAL_32K_P (такты 32кГц) |
| CH5 |
GPIO16 |
ADC2_CH5 |
RTC_GPIO16 |
16 или A15 |
U0CTS (UART0), XTAL_32K_N (такты 32кГц) |
| CH6 |
GPIO17 |
ADC2_CH6 |
RTC_GPIO17 |
17 или A16 |
U1TXD (UART1 передача) |
| CH7 |
GPIO18 |
ADC2_CH7 |
RTC_GPIO18 |
18 или A17 |
U1RXD (UART1 прием), CLK_OUT3 (вывод тактовой частоты) |
| CH8 |
GPIO19 |
ADC2_CH8 |
RTC_GPIO19 |
19 или A18 |
USB DN2 |
| CH9 |
GPIO20 |
ADC2_CH9 |
RTC_GPIO20 |
20 или A19 |
USB DP2 |
Важные замечания:
1. Помеченные красным цветом порты использовать как входы АЦП на этой плате нельзя.
2. Аналоговые функции: как видно из таблицы, эти порты используются двумя разными АЦП — ADC1 (GPIO1-10) и ADC2 (GPIO11-18). Это деление важно, так как АЦП2 имеет некоторые особенности при одновременном использовании с Wi-Fi.
3. Сенсорные входы (TOUCH): почти все эти порты, за исключением GPIO14-18, могут работать как входы для емкостных сенсорных кнопок.
4. SPI интерфейсы: многие порты имеют альтернативные функции для шин SPI (например, FSPI* для основного контроллера и SUBSPI* для вспомогательного), что полезно при подключении нескольких SPI-устройств.
[Ссылки]
1. ESP32-C3: работа со встроенным АЦП. 2. ESP32 ADC. 3. ESP32-S3 Двойная Плата Для Разработки Core Board ESP32 S3 N16R8 N8R2 site:ozon.ru. 4. rtek1000 / YD-ESP32-23. |