BLYNK
HOME       📲 GETTING STARTED       📗 DOCS       ❓HELP CENTER       👉 SKETCH BUILDER

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

esp8266
#1

Всем привет.
Делаю автополив для 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
}
0 Likes

#2

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

0 Likes

#3

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

0 Likes

#4

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

0 Likes

#5

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

0 Likes

#6

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

0 Likes

#7

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

0 Likes