• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос ESP32 при включенном wifi не работает датчик влажности

Eugenepwnz

New member
Добрый вечер. до того, как программно делаю Wifi.begin датчик влажности показывает значения влажности. После wifi.begin показывает все время заоблачное значение и не важно в воде он или нет.

Датчик аналоговый от амперки . Arduino IDE 1.8.9 Питаю датчик от 3.3в а сигнал припаял на 25, пробовал еще на 14. Подскажите пожалуйста как пользоваться аналоговыми датчиками и на каких пинах это возможно...

Wemos ESP32 OLED
Код:
Код:
#include <WiFi.h>

#define hip 25

struct eeprom_data_t {
  char STAssid[17];
  char STApass[17];
} eeprom_data;

void setup() {

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);

  float humidityNow = analogRead(hip); // TYT OK
  Serial.println(humidityNow);
  WiFi.begin(eeprom_data.STAssid, eeprom_data.STApass);
  humidityNow = analogRead(hip); // TYT VSEGDA ZAOBLACHNOE ZNACHENIE
  Serial.println(humidityNow);

  int waitWiFi = 0;
  while ( WiFi.status() != WL_CONNECTED ) {

    if (waitWiFi >= 5) {
      ESP.restart();
      return;
    }
waitWiFi +=1;
delay(1000);
  }
}

void loop() {


}
 

CodeNameHawk

Moderator
Команда форума
В Setup делайте операции, которые нужно выполнить только один раз.
Перенесите эти строки в loop
  • humidityNow = analogRead(hip); // TYT VSEGDA ZAOBLACHNOE ZNACHENIE
Serial.println(humidityNow);
и добавьте задержку эдак в секунду.
Провод от датчика до есп экранированный?
 

Eugenepwnz

New member
В Setup делайте операции, которые нужно выполнить только один раз.
Перенесите эти строки в loop

и добавьте задержку эдак в секунду.
Провод от датчика до есп экранированный?
Спасибо за ответ! Я не могу перенести это в сетап. Мне нужно получать значения с датчика каждые 30 секунд. Задержки добавлял, не помогает. Провод от датчика как из коробки, 3 провода 15см (земля,питание,сигнал). Не экранированный. На западных форумах пишут что большинство пинов перестает работать как заводишь вай фай...
 

Eugenepwnz

New member
Ясное дело, что не можете, оно уже у вас в "сетап". Я вам предлагал исправить перенеся в "лооп".
у меня эта процедура в лупе в основном коде. Этот код я выдрал для быстрого тестирования. он как и в лупе работает.
Если вы имеете ввиду вот так, то это тоже не работает. Там загвоздка в том, что когда вайфай заводишь то он видимо пины под себя забирает... Это только предположение...
Код:
#include <WiFi.h>
#define hip 25
struct eeprom_data_t {
  char STAssid[17];
  char STApass[17];
} eeprom_data;
void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  float humidityNow = analogRead(hip); // TYT OK
  Serial.println(humidityNow);
  WiFi.begin(eeprom_data.STAssid, eeprom_data.STApass);
  int waitWiFi = 0;
  while ( WiFi.status() != WL_CONNECTED ) {
    if (waitWiFi >= 5) {
      ESP.restart();
      return;
    }
    waitWiFi += 1;
    delay(1000);
  }
}
void loop() {
  float humidityNow = analogRead(hip); // TYT VSEGDA ZAOBLACHNOE ZNACHENIE
  Serial.println(humidityNow);
  delay(1000);
}
 

CodeNameHawk

Moderator
Команда форума
Что выдает в сериал?
Отключите датчик от есп, ногу есп соедините резистором 100 на землю, что показывает сериал?

Вывод на вход назначить(pinMode) не пробовали?
 

Eugenepwnz

New member
Что выдает в сериал?
Отключите датчик от есп, ногу есп соедините резистором 100 на землю, что показывает сериал?

Вывод на вход назначить(pinMode) не пробовали?
Поменял на инт. Тоже самое.
когда вай фай врублен то выдает одно и тоже:
4095
4095
4095
4095
4095
4095
4095
4095
4095


Без вай фая выдает такие значения:
без воды и в руке, влажность повышается:
0
0
617
570
633
632
617
620
0
0
0


Код по которому тестировал:
Код:
#include <WiFi.h>

#define hip 15

struct eeprom_data_t {
  char STAssid[17];
  char STApass[17];
} eeprom_data;

void setup() {

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);
 
  pinMode(hip,INPUT);

  int humidityNow = analogRead(hip); // TYT OK
  Serial.println(humidityNow);
  WiFi.begin(eeprom_data.STAssid, eeprom_data.STApass);


  int waitWiFi = 0;
  while ( WiFi.status() != WL_CONNECTED ) {

    if (waitWiFi >= 1) {
      //ESP.restart();
      //return;
      break;
    }
    waitWiFi += 1;
    delay(1000);
  }
}

void loop() {

  int humidityNow = analogRead(hip); // TYT VSEGDA ZAOBLACHNOE ZNACHENIE
  Serial.println(humidityNow);
  delay(1000);

}
Вот еще нашел, на просторах пендосов:
adcAttachPin(HUM_IN_POT_PIN);
analogReadResolution(11);
analogSetAttenuation(ADC_6db);
Программное переключение, но оно не работает... Попробую в эту сторону покопать =(
 

CodeNameHawk

Moderator
Команда форума
Если работает без wifi, то или схема подключения неправильная(нп. нет нагрузочного резистора) или наводки, нп. по питанию или на сам щуп.
Покажите электрические схемы датчика и есп.
Попробуйте подключить датчик через резистор 100 ом, а возле вывода есп конденсатор 100 пф. на землю.
 
В мануале по esp написано, что аналогово-цифровой преобразователь не работает совместно с включенным Wi-Fi.

Чтобы померять аналоговый сигнал, надо выключить Wi-Fi, померять сигнал, включить Wi-Fi.
 
Ну тут видимо две проблемы пересекаются: АЦП2 используется драйвером Wi-Fi (что это значит - неясно, надо смотреть устройство кристалла) и на оба АЦП будут наводится серьезные помехи при работе передатчика Wi-Fi.
Ровно это и наблюдает ТС - при включенном передатчике он получает 4095 с АЦП. Могу осторожно предположить, что именно FF получается из-за несимметричной структуры входных цепей АЦП - сигнал передатчика детектируется и постоянной составляющей забивает вход АЦП.
Можно попробовать зашунтировать вход резистором килоом на 10 или емкостью нанофарад 10. Но думаю - не поможет.
 

nikolz

Well-known member
в общем суть в том что ацп используется в приемниках wifi
В ESP можно использовать АЦП но при работающем wifi будут помехи
поэтому рекомендуется выключать wifi если надо точное измерения.
----------------------
Применительно к ESP8266 я измеряю напряжение питания при работающем wifi ошибка в пределах 10 мв
Если надо измерять точно и много (12 бит и скорость до 900 кгц) то отключаю все и измеряю в массив.
 

krepton85

Member
Столкнулся с такой же проблемой на ESP32S2. Если не делать ни одного замера до подключения к Wi-Fi , то с подключенным WiFi измеряет нормально АЦП, а если до и после подключения, то значения АЦП уже разные (зашкал с Wi-Fi).
 

pvvx

Активный участник сообщества
Наверняка для обоих АЦП одно и тоже. Кристалл маленький, помехи большие.
У других чипов таких проблем нет.
Все ESP отличаются древней технологией производства в микронах (2011 год разработки и сфера производства - ширпотреб) и огромным импульсным потреблением питания при работе RF части, плюс китайцы в палатках экономят на конденсаторах питания и LDO чипах.
Какой нафиг ADC при пиках тока более пол ампера и кривой разводке? Как там прыгает Ref ADC?
 

pvvx

Активный участник сообщества
в общем суть в том что ацп используется в приемниках wifi
Т.е., вы хотите сказать, что у ADC не хватает скорости переключиться на другой вход?
Но при этом пишите:
(12 бит и скорость до 900 кгц)
Что-то не стыкуется в корне.
Более вероятно, что ADC изначально кривой и криво разведен в кристалле. Иначе таких показаний, как они выдают не получить.
 
Сверху Снизу