//===== Datastream Virtual Pin =====//
// V0 = แรงดันไฟฟ้า voltage
// V1 = กระแสไฟฟ้า current
// V2 = กำลังไฟฟ้า power
// V3 = พลังงาน energy

#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID “xxxxxxxxx”
#define BLYNK_TEMPLATE_NAME “xxxxxxxxxx”
#define BLYNK_FIRMWARE_VERSION “0.1.0”
#define BLYNK_DEBUG

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <PZEM004Tv30.h>
#if !defined(PZEM_RX_PIN) && !defined(PZEM_TX_PIN)
  #define PZEM_RX_PIN 16
  #define PZEM_TX_PIN 17
#endif

#if !defined(PZEM_SERIAL)
  #define PZEM_SERIAL Serial2
#endif
#if defined(ESP32)
  PZEM004Tv30 pzem(PZEM_SERIAL, PZEM_RX_PIN, PZEM_TX_PIN);
#elif defined(ESP8266)
#else
  PZEM004Tv30 pzem(PZEM_SERIAL);
#endif

BlynkTimer timer;
int blynkIsDownCount = 0;

//=====Wi-Fi & Blynk Credential=====//
char auth[] = “xxxxxxxxxxxxxxxxxxxx”; // Blynk Authen Key
char ssid[] = “xxxxxxxxxx”; // SSID WiFi
char pass[] = “xxxxxxxxxx”; // รหัส Wifi
int SW_V4;a

void setup()
{
  Serial.begin(115200);
  Serial.println(“Starting…”);
  WiFi.begin(ssid,pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(250);
    Serial.print(“.”);
  }
  Serial.println(“WiFi Connected”);
  Serial.println(“IP Address: “);
  Serial.println(WiFi.localIP());
  Serial.println();
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(30000L, reconnecting);
  timer.setInterval(2000L,read_pzem);

}

//=====Read Pzem004t=====//
void read_pzem()
{
  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();

// 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 {

// 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.println();
  Blynk.virtualWrite(V0,voltage);
  Blynk.virtualWrite(V1,current);
  Blynk.virtualWrite(V2,power);
  Blynk.virtualWrite(V3,energy);
}

BLYNK_CONNECTED()
{
  Serial.println(“.”); //per debug
  Blynk.syncAll();

  if (Blynk.connected())
  {  
      Serial.println(“Blynk Connected”);
//pool_size1 = node3.writeSingleRegister(0x09,0x0100);
  }
}

void reconnecting()
{
  if (!Blynk.connected())
  {
     blynkIsDownCount++;
     BLYNK_LOG(“blynk server is down! %d times”,  blynkIsDownCount);
     Blynk.connect(5000);
     Blynk.syncAll();
   }
}

void loop()
{
  if (Blynk.connected()) {
    Blynk.run();
  }

  timer.run();
}

*หมายเหตุ ใน Arduino IDE คอมไพล์ไม่ผ่านให้แก้เครื่องหมาย  ” ” ให้ถูกต้อง

*** ปรับปรุง 27 มี.ค. 2568 ***