#define BLYNK_TEMPLATE_ID "TMPL3BxlltXHq"
#define BLYNK_TEMPLATE_NAME "energy monitor"
#define BLYNK_AUTH_TOKEN "BNwl4DdgCytaaoFzxd0Iv8Tfd_1tYhoK"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define CURRENT_PIN 34
float kwhTotal = 0.0;
float unitPrice = 8.0;
float voltage = 230.0;
float simMinutes = 0;
BlynkTimer timer;
void sendEnergyData() {
if (!Blynk.connected()) {
Serial.println("⚠️ Blynk disconnected, skipping...");
return;
}
int raw = analogRead(CURRENT_PIN);
float current = map(raw, 0, 4095, 0, 1500) / 100.0;
float power = voltage * current;
simMinutes += 1.0;
float simHours = simMinutes / 60.0;
// ✅ Fixed kWh accumulation
kwhTotal += (power / 1000.0) * (2.0 / 3600.0);
float totalCost = kwhTotal * unitPrice;
Blynk.virtualWrite(V0, current);
Blynk.virtualWrite(V1, power);
Blynk.virtualWrite(V2, totalCost);
Serial.print("Current: "); Serial.print(current, 2); Serial.print(" A");
Serial.print(" | Power: "); Serial.print(power, 1); Serial.print(" W");
Serial.print(" | Cost: ₹"); Serial.println(totalCost, 2);
}
void setup() {
Serial.begin(115200);
analogSetAttenuation(ADC_11db);
WiFi.begin(ssid, pass);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ WiFi Connected!");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, "blynk.cloud", 80);
Serial.println("✅ Blynk Started!");
timer.setInterval(2000L, sendEnergyData);
}
void loop() {
Blynk.run();
timer.run();
}