How many DHT you have? And i what pin is attached? (the reply must be one at pin13) Why define the same const 3 times?
Well try this code…
#include <DHT.h>
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <LiquidCrystal.h>
#include <Tasker.h>
char auth[] = "DO NOT SHARE THIS INFORMATION!!";
char ssid[] = "EITHER THIS OTHER INFORMATION!!";
char pass[] = "OR NEITHER OTHER INFORMATION!!";
#define EspSerial Serial
#define ESP8266_BAUD 115200
#define DHTTYPE DHT11 // DHT 11
#define DHTPIN 13
#define trigger 7
#define echo 8
#define RELAY1 9
#define RELAY2 13
#define RELAY3 10
#define buzzer 14
#define CycleSensorInterval 2000
#define LCDLines 4
#define LCDColumns 20
#define sensorPin A0
#define ledPin 40
#define ldrPin A2
Tasker Task(true);
DHT DHTSensor(DHTPIN, DHTTYPE);
byte Sensor2Check=0;
ESP8266 wifi(&EspSerial);
LiquidCrystal LCD(12, 11, 5, 4, 3, 2);
void CenterLCD(String SMS,byte Line=0,long ClearAfter=0);
void ClearLCD(int Line)
{
CenterLCD("",Line);
}
void LeftLCD(String SMS,byte Line=0,long ClearAfter=0)
{
if (Task.scheduledIn(ClearLCD,Line)>0) Task.cancel(ClearLCD,Line);
String FullText=SMS;
for (byte i=SMS.length();i<LCDColumns;i++) FullText.concat(" ");
LCD.setCursor(0,Line);
//FullText.toUpperCase();
LCD.print(FullText);
if (ClearAfter>0) Task.setTimeout(ClearLCD,ClearAfter,Line);
}
void CenterLCD(String SMS,byte Line=0,long ClearAfter=0)
{
if (Task.scheduledIn(ClearLCD,Line)>0) Task.cancel(ClearLCD,Line);
String FullText="";
int inicio=floor((LCDColumns-(SMS.length())) / 2);
if (inicio<0) inicio=0;
for (byte i=0;i<LCDColumns;i++)
{
if (i<inicio || i>=inicio+SMS.length()) FullText.concat(" ");
else FullText.concat(SMS.charAt(i-inicio));
}
LCD.setCursor(0,Line);
//FullText.toUpperCase();
LCD.print(FullText);
if (ClearAfter>0) Task.setTimeout(ClearLCD,ClearAfter,Line);
}
float GetDistance()
{
digitalWrite(trigger,LOW);
delayMicroseconds(2);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
delayMicroseconds(2);
return (float) pulseIn(echo,HIGH)*340/20000;
}
void DoBeep()
{
digitalWrite(buzzer,!digitalRead(buzzer));
}
void CheckSensors()
{
for (int i=0;i<=3;i++) ClearLCD(i);
Sensor2Check++;
if (Sensor2Check>4) Sensor2Check=1;
switch (Sensor2Check)
{
case 1:
CenterLCD("Moisture Indicator",0);
if (analogRead(sensorPin)>=400)
{
if (!digitalRead(RELAY1))
{
digitalWrite(RELAY1,HIGH);
Blynk.notify("ESP8266 Alert - Pump Turned ON");
CenterLCD("Dry, Pump Turned ON",1);
}
else CenterLCD("Dry, Pump ON",1);
}
else
{
if (digitalRead(RELAY1))
{
digitalWrite(RELAY1,LOW);
Blynk.notify("ESP8266 Alert - Pump Turned OFF");
CenterLCD("Wet, Pump Turned OFF",1);
}
else CenterLCD("Wet, Pump OFF",1);
}
LeftLCD("Moist: "+String(100 -((analogRead(sensorPin)/1023.00) * 100 ))+"%",2);
LeftLCD("H2O Level: "+String(analogRead(sensorPin), DEC),3);
break;
case 2:
CenterLCD("Light Indicator",0);
if (analogRead(ldrPin)<=100)
{
if (digitalRead(ledPin))
{
digitalWrite(ledPin,LOW);
Blynk.notify("ESP8266 Alert - Lights Turned OFF");
CenterLCD("Lights Turned OFF!",1);
}
else CenterLCD("BRIGHT, Lights OFF",1);
}
else
{
if (!digitalRead(ledPin))
{
digitalWrite(ledPin,HIGH);
Blynk.notify("ESP8266 Alert - Lights Turned ON");
CenterLCD("Lights Turned ON");
}
else CenterLCD("DARK, Lights ON");
}
break;
case 3:
CenterLCD("Water Level in Tank",0);
CenterLCD(String(GetDistance())+"Cm",1);
if(GetDistance()<=12)
{
CenterLCD("Tank Full Motor OFF",2);
if (digitalRead(RELAY2))
{
if (Task.scheduledIn(DoBeep)>0) Task.cancel(DoBeep);
digitalWrite(buzzer, LOW);
digitalWrite(RELAY2, LOW);
Blynk.notify("ESP8266 Alert - Motor Turned OFF");
CenterLCD("Motor Turned OFF",2);
}
}
else
{
CenterLCD("LOW Water Level",2);
if(!digitalRead(RELAY2))
{
digitalWrite(RELAY2,HIGH);
digitalWrite(buzzer, HIGH);
Blynk.notify("ESP8266 Alert - Motor Turned ON");
CenterLCD("Motor Turned ON",2);
Task.setTimeout(DoBeep,500);
}
}
break;
case 4:
CenterLCD("HEAT & HUMIDITY",0);
LeftLCD("Temparature: "+String(DHTSensor.readTemperature())+"*C",1);
LeftLCD("Humidity: "+String(DHTSensor.readHumidity())+"%",2);
if(DHTSensor.readTemperature()<=35)
{
CenterLCD("Normal Temperature",3);
if(digitalRead(RELAY3))
{
digitalWrite(RELAY3,LOW);
Blynk.notify("ESP8266 Alert - Fans Turned OFF");
CenterLCD("FAN Turned OFF",3);
}
}
else
{
CenterLCD("High Teperature",3);
if(!digitalRead(RELAY3))
{
digitalWrite(RELAY3,HIGH);
Blynk.notify("ESP8266 Alert - Fans Turned ON");
CenterLCD("FAN Turned ON",3);
}
}
break;
}
}
void setup()
{
LCD.begin(LCDColumns,LCDLines);
LCD.clear();
CenterLCD("IOT Based Smart",0);
CenterLCD("AGRICULTURE",1);
pinMode(sensorPin, INPUT);
pinMode(ldrPin, INPUT);
pinMode(echo, INPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(trigger, OUTPUT);
pinMode(buzzer, OUTPUT);
EspSerial.begin(ESP8266_BAUD);
Blynk.begin(auth, wifi, ssid, pass);
Task.setTimeout(CheckSensors,CycleSensorInterval);
}
void loop()
{
Blynk.run();
Task.loop();
}
I make the system totally automated. The system cycles the sensor check every 2 seconds (configurable) and check one sensor each time.
I didn’t try it… but it should work fine!
There is a clear problem and that is that when the engine of the water tank is turned on, the level is checked every 8 seconds and depending on the speed of the engine the water could overflow.
With minor changes you can make it works with a simple ESP-01 with a MCP23017 and a I2C LCD
If the overflow still happening maybe it’s due to some var type mistake… Post a log or say where it fails