ПинЛог

ADC2 и конфликт с Wi-Fi на ESP32

Аналоговые входы группы ADC2 на классическом ESP32 разделяют аппаратные ресурсы с Wi-Fi драйвером — при включённом радио чтение ADC2 может давать неточные значения или зависать, в отличие от независимого ADC1.

Возможные причины

  • ADC2 на классическом ESP32 использует тот же аппаратный блок, что и Wi-Fi драйвер
  • Чтение ADC2 запущено одновременно с активным Wi-Fi-соединением или сканированием сетей
  • Код не проверяет код возврата adc2_get_raw(), который явно сигнализирует о занятости ресурса
  • На ESP32-S3/C3 архитектура ADC отличается, и ограничение проявляется иначе или отсутствует

Что сделать

  1. По возможности переносите аналоговые датчики на пины группы ADC1 (GPIO32–39 на классическом ESP32) — они не конфликтуют с Wi-Fi.
  2. Если ADC2 обязателен, проверяйте код возврата adc2_get_raw() и обрабатывайте ситуацию, когда Wi-Fi занял ресурс (ESP_ERR_TIMEOUT).
  3. Временно отключайте Wi-Fi (WiFi.mode(WIFI_OFF)) перед критичным чтением ADC2, если это допустимо по логике устройства.
  4. На ESP32-S3/C3 сверьтесь с актуальной документацией — ограничение ADC2/Wi-Fi может не действовать так же строго, как на классическом ESP32.
  5. Для стабильных измерений в проектах с активным Wi-Fi проектируйте схему с использованием только ADC1-пинов с самого начала.

Когда менять железо

Аппаратной замены не требуется — решение всегда программное: смена пина на ADC1 или корректная обработка занятости ADC2.

Не официальная поддержка Espressif Systems. Точный список пинов сверяйте с datasheet вашего конкретного чипа и ревизии платы.

Связанные материалы