#define BLYNK_TEMPLATE_ID "TMPLqUGcc6I7"
#define BLYNK_DEVICE_NAME "AG IoT Switch"
#define BLYNK_AUTH_TOKEN "E73pXWQ2I23F7Al3HnZemyX6W97sSbTD"
// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino resetpin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define TRIGGERPIN 4
#define ECHOPIN 5
#define PUMP 15
char auth[] = BLYNK_AUTH_TOKEN;
long duration, distance, distance1;
float percentage;
int pumpstatus;
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void myTimerEvent()
{
digitalWrite(TRIGGERPIN, LOW);
delayMicroseconds(3);
digitalWrite(TRIGGERPIN, HIGH);
delayMicroseconds(12); // it may be 10 us
digitalWrite(TRIGGERPIN, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(ECHOPIN, HIGH);
// Calculating the distance
distance = (duration/2) / 29.1;
distance1=20-distance;
percentage = (distance1*100)/15;
if (distance1 <= 3)
{
digitalWrite(PUMP, HIGH);
pumpstatus = 255;
}
else if (distance1 >= 14)
{
digitalWrite(PUMP, LOW);
pumpstatus = 0;
}
Serial.println(" ");
Serial.print("Free Level : ");
Serial.print(distance);
Serial.print(" cm. Water Level: ");
Serial.print(distance1);
Serial.print(" cm. ");
Serial.print(" percentage = ");
Serial.print(percentage);
Serial.print(" %");
Blynk.virtualWrite(3, distance); //virtual pin V3
Blynk.virtualWrite(2, distance1); //virtual pin V2
Blynk.virtualWrite(4, pumpstatus); //virtual pin V4
Blynk.virtualWrite(5, percentage); //virtual pin V5
delay(500);
}
void setup()
{
// Debug console
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Don't proceed, loop forever
}
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.drawRoundRect(0, 0, 128, 64, 8, WHITE);
display.drawRoundRect(5, 5, 118, 54, 8, WHITE);
// Sets the color to black with a white background
display.setTextColor(WHITE);
display.setCursor(30,8);
display.println("WATER LEVEL");
display.drawLine(6,17,120,17, WHITE);
display.setCursor(20,20);
display.println("Please connect");
display.setCursor(32,30);
display.println("the wifi...");
display.drawLine(6,40,120,40, WHITE);
display.setCursor(33,46);
display.println("R C C I I T");
display.display();
// Debug console
Serial.begin(115200);
pinMode(TRIGGERPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(PUMP, OUTPUT);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, myTimerEvent);
Serial.println(" ");
Serial.println("Sensing the Water Level");
Blynk.begin(auth, ssid, pass);
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
// Setup a function to be called every second
//timer.setInterval(1000L, myTimerEvent);
}
void loop()
{
Blynk.run();
timer.run(); // Initiates BlynkTimer
display.clearDisplay();
display.setCursor(0,0);
display.drawRoundRect(0, 0, 128, 64, 8, WHITE);
display.drawRoundRect(5, 5, 118, 54, 8, WHITE);
// Sets the color to black with a white background
display.setTextColor(WHITE);
display.setCursor(30,8);
display.setTextSize(1);
display.println("WATER LEVEL");
display.drawLine(6,17,120,17, WHITE);
display.setCursor(15,25);
display.println("LEVEL = ");
display.setTextSize(2);
display.setCursor(65,20);
display.println(distance1);
display.setCursor(95,20);
display.setTextSize(2);
display.println("cm");
display.drawLine(6,40,120,40, WHITE);
display.setCursor(33,46);
display.setTextSize(1);
display.println("R C C I I T");
display.display();
}