ESP32 ADC <-> Проблема с WIFI

Я использую ESP32 ADC1 (а не ADC2, который конфликтует с функциями Wi-Fi) для захвата некоторых аналоговых данных, полученных @IO36 (порт ADC1). Как только я раскомментирую строку WiFi.mode(WIFI_AP_STA) (даже если строка WiFi.begin() все еще закомментирована), аналоговые показания сходят с ума!

НЕКОТОРЫЕ ПРИМЕЧАНИЯ:
1- Аппаратное обеспечение, которое обрабатывает входной сигнал, чтобы сделать его пригодным для аналогового входа ESP32, использует тот же источник питания, что и модуль ESP32.
2- Конденсатор SMD емкостью 100 мкФ подключен к линии истока модуля ESP32 рядом с ним, чтобы уменьшить влияние пульсаций его энергопотребления на другие устройства.
3- Попробовал adc1_get_raw, ничего не изменилось.
4- Попробовал этот код на другом модуле ESP32, он также показал огромные разница в показаниях adc1 до и после раскомментирования WiFi.mode(WIFI_AP_STA).
5- использование корневых API, таких как esp_wifi_init & esp_wifi_set_mode & esp_wifi_start вместо оберток Arduino, таких как WiFi.mode, не помогло.

НОВАЯ ПОДСКАЗКА: Очевидно, проблема связана с режимом Wi-Fi ACCESSPOINT (т. е. WIFI_AP), поскольку настройка Wi Режим -Fi to STATION (т. е. WIFI_STA) не вызывает этой проблемы.
В общем, все, что связано с функцией WIFI, приводит к нестабильной работе АЦП. Независимо от того, какую плату ESP32 вы используете, вы можете просто построить последовательный канал любого канала ADC1 до и после команды инициализации WIFI, даже с плавающими выводами ADC1 вы можете увидеть разницу.

Сигнал сходит с ума, хотя на входе питания ESP32 установлен ограничитель 100 мкФ

    #include <WiFi.h>
    float R = 0;
    
    void setup() {
        Serial.begin(500000);
    // WiFi.mode(WIFI_AP_STA); // раскомментирование этой строки Analogread сводит с ума! даже если следующая строка все еще прокомментирована...
    // Wi-Fi.begin();
        analogSetAttenuation(ADC_0db);
    }
    
    void loop() {
        R = analogRead(36);    
        Serial.println(R/12.21);
    }

, 👍3

Обсуждение

**СПАСИБО ЗА ВСЕ ЭТИ КОММЕНТАРИИ И РАЗРАБОТКИ !!!** Кажется, я нашел ответ [ЗДЕСЬ](https://github.com/espressif/esp-idf/issues/164#issuecomment-744602578), @AKTanara


1 ответ


1

У меня только что возникла такая же проблема. Я просто поместил весь код подключения WIFI в функцию, прочитал данные ADC2, затем вызвал функцию для отправки, заканчивая WIFI.mode(WIFI_OFF), чтобы выключить WIFI, прочитал данные, а затем начал все заново. Я использую ESPNOW, поэтому не стоит паниковать по поводу подключения к моей сети, которое, очевидно, займет больше времени. С ESPNOW данные отправляются независимо, и они отправляются каждые несколько секунд, что меня устраивает. Я пытался поместить код подключения в цикл, но плата продолжала перезапускаться. Я видел много других материалов в Интернете об этом. Помещение его в функцию, похоже, позволяет решить эту проблему.

,