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 вы можете увидеть разницу.
#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);
}
@AKTanara, 👍3
Обсуждение1 ответ
У меня только что возникла такая же проблема. Я просто поместил весь код подключения WIFI в функцию, прочитал данные ADC2, затем вызвал функцию для отправки, заканчивая WIFI.mode(WIFI_OFF), чтобы выключить WIFI, прочитал данные, а затем начал все заново. Я использую ESPNOW, поэтому не стоит паниковать по поводу подключения к моей сети, которое, очевидно, займет больше времени. С ESPNOW данные отправляются независимо, и они отправляются каждые несколько секунд, что меня устраивает. Я пытался поместить код подключения в цикл, но плата продолжала перезапускаться. Я видел много других материалов в Интернете об этом. Помещение его в функцию, похоже, позволяет решить эту проблему.
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Контакты RX и TX на esp32
- Почему OTA не работает с платой ESP32-CAM Ai-Thinker?
- ESP32 открывает "captive portal" при подключении
- Аналоговое чтение не работает при использовании WiFi
- Автоматическая веб-страница ESP32 AP
- Чтение данных из Google Таблиц с помощью Nodemcu
- WiFiClient::connected() не работает
**СПАСИБО ЗА ВСЕ ЭТИ КОММЕНТАРИИ И РАЗРАБОТКИ !!!** Кажется, я нашел ответ [ЗДЕСЬ](https://github.com/espressif/esp-idf/issues/164#issuecomment-744602578), @AKTanara