ADC2 и конфликт с Wi-Fi на ESP32
Аналоговые входы группы ADC2 на классическом ESP32 разделяют аппаратные ресурсы с Wi-Fi драйвером — при включённом радио чтение ADC2 может давать неточные значения или зависать, в отличие от независимого ADC1.
Возможные причины
- ADC2 на классическом ESP32 использует тот же аппаратный блок, что и Wi-Fi драйвер
- Чтение ADC2 запущено одновременно с активным Wi-Fi-соединением или сканированием сетей
- Код не проверяет код возврата adc2_get_raw(), который явно сигнализирует о занятости ресурса
- На ESP32-S3/C3 архитектура ADC отличается, и ограничение проявляется иначе или отсутствует
Что сделать
- По возможности переносите аналоговые датчики на пины группы ADC1 (GPIO32–39 на классическом ESP32) — они не конфликтуют с Wi-Fi.
- Если ADC2 обязателен, проверяйте код возврата adc2_get_raw() и обрабатывайте ситуацию, когда Wi-Fi занял ресурс (ESP_ERR_TIMEOUT).
- Временно отключайте Wi-Fi (WiFi.mode(WIFI_OFF)) перед критичным чтением ADC2, если это допустимо по логике устройства.
- На ESP32-S3/C3 сверьтесь с актуальной документацией — ограничение ADC2/Wi-Fi может не действовать так же строго, как на классическом ESP32.
- Для стабильных измерений в проектах с активным Wi-Fi проектируйте схему с использованием только ADC1-пинов с самого начала.
Когда менять железо
Аппаратной замены не требуется — решение всегда программное: смена пина на ADC1 или корректная обработка занятости ADC2.
Не официальная поддержка Espressif Systems. Точный список пинов сверяйте с datasheet вашего конкретного чипа и ревизии платы.