// IoT waterpump written by s.jashuva email - [email protected]
#define BLYNK_TEMPLATE_ID "TMPL3eiNE1QQe"
#define BLYNK_TEMPLATE_NAME "IoT waterpump"
#define BLYNK_AUTH_TOKEN "EBAt8dQcSNDQnWLUxX_47HnS4PH04XwH"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "jashuva"; // WiFi SSID name
char pass[] = "12345678"; // WiFi password
#define virtuallevel V0 // guage widget on Blynk app
#define virtualMode V1 // mode widget on blynk app
#define virtualPump V2 // pump widget on blynk app
const int trigger = 33; // trig connected to D4
const int echo = 25; // echo connected to D3
const int pump = 26; // pump connected to D5
const int led = 27; // led connected to D6
int modevalue = 0;
int pumpvalue = 0;
bool mode = true;
bool server = false;
long duration;
float distance;
int waterlevel;
int levellow = 15; // minimum tank depth
int levelhigh = 6; // maximum thersold level
int pumpstate = LOW;
BLYNK_WRITE(virtualMode) {
modevalue = param.asInt();
mode = (modevalue == 0) ? true : false;
}
BLYNK_WRITE(virtualPump) {
pumpvalue = param.asInt();
}
void setup() {
Blynk.begin(auth, ssid, pass);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(pump, OUTPUT);
pinMode(led, OUTPUT);
}
void tanklevel() {
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
duration = pulseIn(echo, HIGH);
distance = duration * 0.017;
waterlevel = ((distance - levellow) / (levelhigh - levellow)) * 100;
if (waterlevel < 0) {
waterlevel = 0;
}
if (waterlevel > 100) {
waterlevel = 100;
}
Blynk.virtualWrite(virtuallevel, waterlevel);
}
void pumpAutomate() {
if(server){
if (mode) {
if (waterlevel >= 95) {
pumpstate = LOW;
} else if (waterlevel <= 5) {
pumpstate = HIGH;
}
Blynk.virtualWrite(virtualPump, pumpstate);
}
else {
pumpstate = pumpvalue ? HIGH : LOW;
}
}
else{
if (waterlevel >= 95) {
pumpstate = LOW;
} else if (waterlevel <= 5) {
pumpstate = HIGH;
}
}
}
void serverLed(int a){
digitalWrite(led, HIGH);
delay(a);
digitalWrite(led, LOW);
delay(a);
}
void isServerconnected(){
server = Blynk.connected();
if(server){
serverLed(500);
}
else{
serverLed(2000);
}
}
void loop() {
Blynk.run();
isServerconnected();
if(server){
tanklevel();
pumpAutomate();
}
else {
tanklevel();
pumpAutomate();
}
digitalWrite(pump, pumpstate);
}