#define BLYNK_TEMPLATE_ID "TMPL6r-sgG6Jr"
#define BLYNK_TEMPLATE_NAME "ENERGY METER"
#define BLYNK_AUTH_TOKEN "d4TkH2lr6kHvIgNEfmsxpFPIoqymWpw9"
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#include <Wire.h> // Include the Wire library for I2C communication
#include <LiquidCrystal_I2C.h> // Include the I2C LCD library
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address and size
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const int voltagePin = 36; // Analog input pin for voltage measurement
const int currentPin = 39; // Analog input pin for current measurement
float voltage, current, power;
BlynkTimer timer;
void setup() {
Serial.begin(115200);
lcd.init(); // Initialize the LCD
lcd.backlight(); // Turn on the backlight
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
pinMode(voltagePin, INPUT);
pinMode(currentPin, INPUT);
timer.setInterval(1000L, sendDataToBlynk); // Send data to Blynk every 1 second
}
void loop() {
Blynk.run();
timer.run();
}
void sendDataToBlynk() {
int rawVoltage = analogRead(voltagePin);
int rawCurrent = analogRead(currentPin);
voltage = rawVoltage / 4095.0 * 3.3; // Convert ADC value to voltage (assuming 3.3V reference)
current = rawCurrent / 4095.0 * 3.3; // Convert ADC value to current (assuming 3.3V reference)
// Calculate power using P = VI
power = voltage * current;
Serial.print("Voltage: ");
Serial.print(voltage);
Serial.print(" V, Current: ");
Serial.print(current);
Serial.print(" A, Power: ");
Serial.print(power);
Serial.println(" W");
Blynk.virtualWrite(V0, voltage); // Send voltage value to Blynk's virtual pin V0
Blynk.virtualWrite(V1, current); // Send current value to Blynk's virtual pin V1
Blynk.virtualWrite(V2, power); // Send power value to Blynk's virtual pin V2
// Display values on the LCD
lcd.clear(); // Clear the LCD screen
lcd.setCursor(0, 0); // Set the cursor to the first line
lcd.print("Voltage: ");
lcd.print(voltage);
lcd.print(" V");
lcd.setCursor(0, 1); // Set the cursor to the second line
lcd.print("Current: ");
lcd.print(current);
lcd.print(" A");
}