Датчик влажности почвы

Всем привет.
Делаю автополив для 3-х горшков на esp8266 и blynk.
Есть 3 функции, которые считываю данные с датчиков влажности:

 void readData1(){
  digitalWrite(powerPin1, HIGH);
  sensorData1 = analogRead(A0); //reading the sensor on A0
  Blynk.virtualWrite(V1, sensorData1); //sending to Blynk
  digitalWrite(powerPin1, LOW);
}

Если функция одна, то все работает корректно, если функций 2 или:

void readData1(){
  digitalWrite(powerPin1, HIGH);
  sensorData1 = analogRead(A0); //reading the sensor on A0
  Blynk.virtualWrite(V1, sensorData1); //sending to Blynk
  digitalWrite(powerPin1, LOW);
}

void readData2(){
  digitalWrite(powerPin2, HIGH);
  sensorData2 = analogRead(A0); //reading the sensor on A0
  Blynk.virtualWrite(V2, sensorData2); //sending to Blynk
  digitalWrite(powerPin2, LOW);
}

То данные не передаются в blynk.
Если добавить задержку в любую из функций, то все работает должным образом:

void readData1(){
  digitalWrite(powerPin1, HIGH);
  sensorData1 = analogRead(A0); //reading the sensor on A0
  **delay(200);**
  Blynk.virtualWrite(V1, sensorData1); //sending to Blynk
  digitalWrite(powerPin1, LOW);
}

void readData2(){
  digitalWrite(powerPin2, HIGH);
  sensorData2 = analogRead(A0); //reading the sensor on A0
  Blynk.virtualWrite(V2, sensorData2); //sending to Blynk
  digitalWrite(powerPin2, LOW);
}

Подскажите, почему так и как правильно делать?
Сейчас полный скетч выглядит следующим образом:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "pkey";
char ssid[] = "ssid";
char pass[] = "pass";

const int powerPin1 = 4;
const int powerPin2 = 5;
int sensorData1;
int sensorData2;

BlynkTimer timer;

void readData1(){
  digitalWrite(powerPin1, HIGH);
  sensorData1 = analogRead(A0); //reading the sensor on A0
  Blynk.virtualWrite(V1, sensorData1); //sending to Blynk
  digitalWrite(powerPin1, LOW);
}

void readData2(){
  digitalWrite(powerPin2, HIGH);
  sensorData2 = analogRead(A0); //reading the sensor on A0
  delay(200);
  Blynk.virtualWrite(V2, sensorData2); //sending to Blynk
  digitalWrite(powerPin2, LOW);
}

void setup(){
Serial.begin(9600);
Blynk.begin(auth, ssid, pass, IPAddress(192, 168, 1, 25), 8080);
pinMode(powerPin1, OUTPUT);
pinMode(powerPin2, OUTPUT);
timer.setInterval(2000L, readData1);
timer.setInterval(2000L, readData2);
}

void loop(){
  Blynk.run();
  timer.run(); // running timer every second
}

Функции вызываются в одно время, так нельзя. Излишнее разделение на функции в которых нет нужды, считывание в одну функцию отправка в другую. Считывание аналогово пина занимает время поэтому надо оставлять запас хотябы 200миллисекунд чтоб проблем не было. Пс какие датчики используешь?

Спасибо, поправлю скетч.
Датчик черный - moisture sensor v1.2

Если используешь много датчиков то лучше использовать мультиплексор на аналоговом порту, чтобы питание на датчиках было постоянно.

В чем принципиальная разница?
В любом случае я планирую отправлять esp в deepsleep для экономии зарядка.

Разница в том сколько датчиков ты можешь подключить твоим способом, и сколько датчиков можно подключить через 16 канальный мультиплексор.

Насколько я понимаю, все упирается в кол-во пинов.
У меня 3 датчика, считываю с них данные поочередно и 3 мотора для полива.

Привет! Так же задумал повторить проект по автополиву ,
ESP8622 WIFI (Wemos d1 mini)
Реле (Мосфет IRF520 )
Насос помпа 5v DC

Пока что без датчиков влажности , ВКЛ по расписанию раз в три дня ,
на три - пять цветков
Узнал что можно добавить deepsleep для экономии заряда - подскажите как это добавить

В программировании новичек прошу прощения , вопросов накопилось много .

Еще для улучшения устройства было бы замечательно добавить несколько доп функций :

WIFI Manager - например если нужно использовать устройство полива с другой WIFI сетью и что бы прошивку не обновлять с помощью приложения Arduino IDE и компа , используем менеджер
https://github.com/tzapu/WiFiManager/tree/development
находим нужный WIFI вводим пароль и пересохраняем настройки . - Подключил биоблиотеку загрузил скетч , находит wifi SSID ввожу пароль нажимаю сохранить и ничего не изменяется сеть вай фай не сохраняет почему-то…пока разбираюсь

Таймер deepsleep для экономии заряда - было бы интерестно добавить

И как обьеденять несколько скетчей в одном коде правильно?

И самый главный вопрос : Тут хотел бы максимально точно все выяснить
Залив скетч с настройками , устройство работат принцип таймера и включения релле , вкл реле через заданный интервал времени, время уточняет через Blynk
виджет RTC через wifi и облачный сервер Blynk .

И допустим пропадает WIFI - скажем на 5-10 минут ,что происходит ,устройство работать не сможет ?
Возможно ли сделать так что б устройство продолжало работать по таймеру даже при отключенном WIFI ? - Подскажите пожалуйста подробно как это сделать , я нашел здесь тему ,но не очень понятно что куда добавлять и работает ли это (Run program without wifi connection)
Затем если скажем через 2 дня появляется WIFI - как переподключится к сети ?
Впринципе от WIFI нужно только сверить время для RTC и корректировать настройки

Вообщем если кто-то подобное уже реализовал в своих проектах ,
возможно вы поделитесь скетчем или информацией где искать , буду очень признателен !
Спасибо

Используйте свой delay.

void delayMod(unsigned long delayTime) {
	unsigned long startTime = millis();
	while (millis() - startTime < delayTime)
	{
		continue;
	}
	yield();
}