#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <PZEM004Tv30.h>
#include <SoftwareSerial.h>
// Ініціалізація LCD1602 з I2C адресою 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Ініціалізація серійного зв'язку для дебагу та емуляції PZEM004T
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, 16, 17); // UART на пінів 16 (RX) та 17 (TX)
// Ініціалізація LCD1602
lcd.init();
lcd.backlight();
lcd.print("Initializing...");
delay(2000);
}
void loop() {
if (Serial2.available()) {
// Отримання даних з UART (емуляція даних PZEM004T)
String data = Serial2.readStringUntil('\n');
Serial.println(data); // Вивід даних на серійний монітор
// Розбір даних
float voltage, current, power, energy, frequency, pf;
sscanf(data.c_str(), "%f,%f,%f,%f,%f,%f", &voltage, ¤t, &power, &energy, &frequency, &pf);
// Виведення даних на LCD1602
lcd.clear();
lcd.setCursor(0, 0); // Початок з першого рядка
lcd.print("V:"); lcd.print(voltage); lcd.print("V");
lcd.setCursor(0, 1); // Початок з другого рядка
lcd.print("I:"); lcd.print(current); lcd.print("A");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("P:"); lcd.print(power); lcd.print("W");
lcd.setCursor(0, 1);
lcd.print("E:"); lcd.print(energy); lcd.print("Wh");
delay(2000);
}
}