// Blynk settings
#define BLYNK_TEMPLATE_ID "TMPL65I2ZV2s7"
#define BLYNK_TEMPLATE_NAME "Smart Sensor"
#define BLYNK_AUTH_TOKEN "JLUWChZihxrEexYr-QVGSxKKLsMlJ4Rh"
// Libraries
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Pin definitions
#define LED 23
#define BLYNK_PRINT Serial
const int TRIG_PIN = 13;
const int ECHO_PIN = 12;
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Blynk timer
BlynkTimer timer;
// Callback when Blynk is connected
BLYNK_CONNECTED() {
// Sync virtual pin 5 on connection (V5 is used for the LED control)
Blynk.syncVirtual(V5);
}
// State variable for the toggle button
bool toggleState_1 = LOW;
// Blynk callback for virtual pin V5
BLYNK_WRITE(V5) {
// Read the state from the app
toggleState_1 = param.asInt();
// Control the LED based on the state
digitalWrite(LED, toggleState_1 ? HIGH : LOW);
// Send LED state to Blynk app
Blynk.virtualWrite(V5, toggleState_1);
}
// Function to send sensor data to Blynk
void sendSensor() {
// Read sensor data
float waterLevel = readWaterLevel();
Serial.println("-----------------------------------");
Serial.println("Water Level: " + String(waterLevel, 2) + " cm");
Serial.println("-----------------------------------");
// Send data to Blynk app
Blynk.virtualWrite(V0, waterLevel);
delay(100);
}
// Read distance from sensor and calculate water level
float readWaterLevel() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
float waterLevel = 400 - distance; // Adjust this based on your tank height
return waterLevel;
}
void setup() {
// Initialize serial communication
Serial.begin(9600);
// Connect to WiFi and Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Set LED pin as output
pinMode(LED, OUTPUT);
// Set ultrasonic sensor pins as output/input
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Set up timer to send sensor data every 2 seconds
timer.setInterval(2000L, sendSensor);
}
void loop() {
// Run Blynk tasks
Blynk.run();
// Run timer tasks
timer.run();
digitalWrite(LED, HIGH);
}