#define BLYNK_TEMPLATE_ID "TMPL3-6ArVBop"
#define BLYNK_TEMPLATE_NAME "WATER FLOW"
#define BLYNK_AUTH_TOKEN "ZqU7wIAYsIgv5CCQTj5l1xgZbXpRPfO6"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pump pin (simulated relay output)
#define RELAY_PIN 26
// Pump state variable
int pumpState = 0; // 0 = OFF, 1 = ON
// Blynk timer
BlynkTimer timer;
// Send simulated data depending on pump state
void sendData() {
float voltage, current, flow;
// Voltage always in range (simulate mains fluctuation)
voltage = random(220, 231); // 220–230V
if (pumpState == 1) {
// Pump ON
current = random(1, 10) / 10.1; // 3.0 – 8.0 A
flow = random(18, 21) / 1.10; // 0.10 – 1.0 L/min
} else {
// Pump OFF
current = random(1, 2) / 100.1; // 0.1 – 0.2 A (idle)
flow = 0.0; // no water flow
}
// Send to Blynk
Blynk.virtualWrite(V1, voltage);
Blynk.virtualWrite(V2, current);
Blynk.virtualWrite(V3, flow);
Blynk.virtualWrite(V5, pumpState); // Motor ON/OFF indication
// Debug
Serial.print("Pump: ");
Serial.println(pumpState ? "ON" : "OFF");
Serial.print("Voltage: "); Serial.print(voltage); Serial.println(" V");
Serial.print("Current: "); Serial.print(current); Serial.println(" A");
Serial.print("Flow: "); Serial.print(flow); Serial.println(" L/min");
Serial.print("Pump Indicator (V5): ");
Serial.println(pumpState);
Serial.println("-------------------------");
}
// Receive pump control from Blynk
BLYNK_WRITE(V4) {
pumpState = param.asInt();
digitalWrite(RELAY_PIN, pumpState);
Serial.print("Pump switched ");
Serial.println(pumpState ? "ON" : "OFF");
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(2000L, sendData); // every 2s
}
void loop() {
Blynk.run();
timer.run();
}