/* CONNECTION INSTRUCTION
email:[email protected]
pss:
*/
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL2_PPn6pgE"
#define BLYNK_TEMPLATE_NAME "WATER LEVEL MONITORING"
#define BLYNK_AUTH_TOKEN "YoX7arQQgGJjtYsnFgAxfWwauozHuE-5"
#define pump 19
#define floatSwitch 23
//#define trigger 5
//#define echoPin 18
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <HCSR04.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
UltraSonicDistanceSensor hc(5,18);
LiquidCrystal_I2C lcd(0x27, 20, 4);
String notification;
float level;
bool wellState,pumpState,isManual;
void setup()
{
lcd.init();
lcd.backlight();
loadingdisplay();
Serial.begin(115200);
delay(100);
pinMode(pump,OUTPUT);
pinMode(floatSwitch,INPUT);
digitalWrite(pump,HIGH);
Blynk.begin(auth, ssid, pass);
}
void loop()
{
homedisplay();
Blynk.run();
get_data();
send_update();
if(!isManual)
{
if(wellState)
{
if(level>=25)
{
Blynk.virtualWrite(V1,HIGH);
digitalWrite(pump,LOW);
}
if(level<=5)
{
Blynk.virtualWrite(V1,LOW);
digitalWrite(pump,HIGH);
}
}
else
{
digitalWrite(pump,HIGH);
pumpState=HIGH;
Blynk.virtualWrite(V1,pumpState);
}
}
else
{
digitalWrite(pump,HIGH);
}
}
BLYNK_WRITE(V3)
{
int data=param.asInt();
if(data!=isManual)
{
isManual=data;
Serial.println(isManual?"SYSTEM RUN MANUAL":"SYSTEM RUN AUTOMATIC");
}
}
void get_data()
{
level= hc.measureDistanceCm();
Serial.print("level is:");
Serial.println(level);
//////////////////
wellState=digitalRead(floatSwitch);
Serial.print("WATER AMOUNT IN WELL IS:");
Serial.println(wellState?"ENOUGH":"NOT SUFFICIENT");
}
void send_update()
{
Blynk.virtualWrite(V0,level);
Blynk.virtualWrite(V1,pumpState);
Blynk.virtualWrite(V2,wellState);
}
void loadingdisplay()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" WATER LEVEL ");
lcd.setCursor(0,1);
lcd.print(" MONITORING VIA IoT ");
lcd.setCursor(0,2);
lcd.print(" SYSTEM INITIALIZE ");
lcd.setCursor(0,3);
lcd.print("PLEASE WAIT");
for(int k=11;k<20;k++)
{
lcd.setCursor(k,3);
lcd.print(".");
delay(500);
}
}
void homedisplay()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("WATER LEVEL:");
lcd.setCursor(12,0);
lcd.print(level,2);
lcd.setCursor(0,1);
lcd.print("WELL :");
lcd.setCursor(6,1);
lcd.print(wellState?"ENOUGH":"INSUFICIENT");
lcd.setCursor(0,2);
lcd.print("PUMP ACTION:");
lcd.setCursor(12,2);
lcd.print(pumpState?"OFF":"ON");
lcd.print(notification);
delay(1000);
}