I am new to Blynk and facing issue with below code, I have Elecrow automatic plant watering kit and tried to integrate code with Blynk. Hardware side I am using Arduino UNO with ESP8266. My issue is, it connects initially and immediately it disconnects. But same thing if I try with only Blynk sketch it is stable. Can anyone please help me to correct the below code.
#include <Blynk.h>
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "XXXX";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "XXX";
char pass[] = "XXX";
#define EspSerial Serial
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
// set all moisture sensors PIN ID
int moisture1 = A0;
int moisture2 = A1;
int moisture3 = A2;
int moisture4 = A3;
// declare moisture values
int moisture1_value = 0;
int moisture2_value = 0;
int moisture3_value = 0;
int moisture4_value = 0;
// set water relays
int relay1 = 3;
int relay2 = 4;
int relay3 = 5;
int relay4 = 6;
// set water pump
int pump = 2;
void setup()
{
Serial.begin(9600);
delay(10);
// Set ESP8266 baud rate
EspSerial.begin(ESP8266_BAUD);
delay(10);
Blynk.begin(auth, wifi, ssid, pass);
// Debug console
// declare relay as output
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
// declare pump as output
pinMode(pump, OUTPUT);
}
void loop()
{
Blynk.run();
// read the value from the moisture sensors:
moisture1_value = analogRead(moisture1);
moisture2_value = analogRead(moisture2);
moisture3_value = analogRead(moisture3);
moisture4_value = analogRead(moisture4);
// check which plant need water
// and open the switch for that specific plant
if(moisture1_value<=450){
digitalWrite(relay1, HIGH);
}
if(moisture2_value<=450){
digitalWrite(relay2, HIGH);
}
if(moisture3_value<=450){
digitalWrite(relay3, HIGH);
}
if(moisture4_value<=450){
digitalWrite(relay4, HIGH);
}
digitalWrite(pump, HIGH);
digitalWrite(relay1, HIGH);
delay(500);
digitalWrite(relay2, HIGH);
delay(500);
digitalWrite(relay3, HIGH);
delay(500);
digitalWrite(relay4, HIGH);
delay(500);
digitalWrite(relay1, LOW);
delay(500);
digitalWrite(relay2, LOW);
delay(500);
digitalWrite(relay3, LOW);
delay(500);
digitalWrite(relay4, LOW);
digitalWrite(pump, LOW);
delay(500);
// make sure there is at least one plant that needs water
// if there is, open the motor
if(moisture1_value<=450 || moisture2_value<=450 || moisture3_value<=450 || moisture4_value<=450){
digitalWrite(pump, HIGH);
}
// let it water the plant for 5 seconds
delay(5000);
// turn the pump off
digitalWrite(pump, LOW);
// go each switch and turn them off
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
digitalWrite(relay4, LOW);
// wait 5 minutes and repeat the process
Serial.println(moisture1_value);
delay(10000);
delay(300000);
}
I have changed the code but still facing same issue
#include <Blynk.h>
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "XXXX";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "XXXX";
char pass[] = "XXXX";
// Hardware Serial on Mega, Leonardo, Micro...
#define EspSerial Serial
// or Software Serial on Uno, Nano...
//#include <SoftwareSerial.h>
//SoftwareSerial EspSerial(2, 3); // RX, TX
// Your ESP8266 baud rate:
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
// set all moisture sensors PIN ID
int moisture1 = A0;
int moisture2 = A1;
int moisture3 = A2;
int moisture4 = A3;
int moisture5 = A4;
int moisture6 = A5;
int moisture7 = A6;
// declare moisture values
int moisture1_value = 0;
int moisture2_value = 0;
int moisture3_value = 0;
int moisture4_value = 0;
// set water relays
int relay1 = 3;
int relay2 = 4;
int relay3 = 5;
int relay4 = 6;
BlynkTimer timer;
// set water pump
int pump = 2;
int x = 0;
void waterPlant(int x)
{
Serial.print("Opening: ");
Serial.print(x);
//Open valve x ==> x will contain value of correct relay[1-4]
digitalWrite(x, HIGH);
//We wait 0.5 seconds before opening pump so we are sure valve is open. This will prevent the pump from pushing water to a closed valve and risking the tubes to leak or wose, break loose.
delay(500);
//Open pump for 3 seconds
digitalWrite(pump, HIGH);
delay(10000);
//close pump
digitalWrite(pump, LOW);
delay(500);
digitalWrite(x, LOW);
//Make sure all valves are closed again.
closeAll();
}
void setup()
{
Serial.begin(9600);
delay(10);
// Set ESP8266 baud rate
EspSerial.begin(ESP8266_BAUD);
delay(10);
Blynk.begin(auth, wifi, ssid, pass);
timer.setInterval(1000L, sensorDataSend); //timer will run every sec
// declare relay as output
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
// declare pump as output
pinMode(pump, OUTPUT);
// declare the ledPin as an OUTPUT:
Serial.begin(9600);
}
void loop()
{
Blynk.run();
timer.run(); // run timer every second
checkMoisture();
}
// check which plant need water
// and open the switch for that specific plant
void checkMoisture() {
if (analogRead(moisture1) <= 550) {
waterPlant(relay1);
}
if (analogRead(moisture2) <= 550) {
waterPlant(relay2);
}
if (analogRead(moisture3) <= 550) {
waterPlant(relay3);
}
if (analogRead(moisture4) <= 550) {
waterPlant(relay4);
}
delay(120000);
if (analogRead(moisture1) <= 450 || analogRead(moisture2) <= 450 || analogRead(moisture3) <= 450 || analogRead(moisture4) <= 450) {
checkMoisture();
}
else {
closeAll();
}
}
// turn pump & valves off just to be sure.
void closeAll()
{
Serial.println("closing pump + valves!");
digitalWrite(pump, LOW);
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
digitalWrite(relay4, LOW);
}
void sensorDataSend()
{
int sensorValue0 = analogRead(A0); // reading sensor from analog pin
Blynk.virtualWrite(V5, sensorValue0); // sending sensor value to Blynk app
int sensorValue1 = analogRead(A1); // reading sensor from analog pin
Blynk.virtualWrite(V6, sensorValue1);
int sensorValue2 = analogRead(A2); // reading sensor from analog pin
Blynk.virtualWrite(V7, sensorValue2);
int sensorValue3 = analogRead(A3); // reading sensor from analog pin
Blynk.virtualWrite(V8, sensorValue3);
int sensorValue4 = analogRead(A4); // reading sensor from analog pin
Blynk.virtualWrite(V9, sensorValue4);
int sensorValue5 = analogRead(A5); // reading sensor from analog pin
Blynk.virtualWrite(V10, sensorValue5);
}