//LCD D1 SCL D2 SDA
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
#if defined(ESP32)
#error "Software Serial is not supported on the ESP32"
#endif
/* Use software serial for the PZEM
* Pin 12 Rx (Connects to the Tx pin on the PZEM)
* Pin 13 Tx (Connects to the Rx pin on the PZEM)
*/
#if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN)
#define PZEM_RX_PIN 12
#define PZEM_TX_PIN 13
#endif
SoftwareSerial pzemSWSerial(PZEM_RX_PIN, PZEM_TX_PIN);
PZEM004Tv30 pzem(pzemSWSerial);
void setup() {
/* Debugging serial */
Serial.begin(115200);
//LCD
lcd1.init();
lcd1.backlight();
}
void loop() {
Serial.print("Custom Address:");
Serial.println(pzem.readAddress(), HEX);
// Read the data from the sensor
float voltage = pzem.voltage();
float current = pzem.current();
float power = pzem.power();
float energy = pzem.energy();
float frequency = pzem.frequency();
float pf = pzem.pf();
// Check if the data is valid
if(isnan(voltage)){
Serial.println("Error reading voltage");
} else if (isnan(current)) {
Serial.println("Error reading current");
} else if (isnan(power)) {
Serial.println("Error reading power");
} else if (isnan(energy)) {
Serial.println("Error reading energy");
} else if (isnan(frequency)) {
Serial.println("Error reading frequency");
} else if (isnan(pf)) {
Serial.println("Error reading power factor");
} else {
// Print the values to the Serial console
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
Serial.print("Current: "); Serial.print(current); Serial.println("A");
Serial.print("Power: "); Serial.print(power); Serial.println("W");
Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
Serial.print("PF: "); Serial.println(pf);
lcd.setCursor(0,0);
lcd.print("Voltage: "); lcd.print(voltage); lcd.println(" V");
lcd.setCursor(0,1);
lcd.print("Current: "); lcd.print(current); lcd.println(" A");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Power: "); lcd.print(power); lcd.println(" W");
lcd.setCursor(0,1);
lcd.print("Energy: "); lcd.print(energy,3); lcd.println(" kWh");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Frequency: "); lcd.print(frequency,1); lcd.println(" Hz");
lcd.setCursor(0,1);
lcd.print("PF: "); lcd.println(pf);
lcd.clear();
}
Serial.println();
delay(2000);
}