ที่ผมเขียนมามันถูกต้องแล้วใช่มั้ยครับหรือผมตกล่นตรงไหนอันนี้ผมกังวนที่สุดเลย55555
หรือพี่ๆมีใครเคยทำแนวๆนี้ช่วยแชร์ประสบการณ์หน่อยครับ
การต่อคิดว่าไม่มีปัญหาอะไรครับ ดูข้อมูลตัวอย่าง
ลองเอาโค้ตตัวอย่างไปเทสดู
#include <SoftwareSerial.h>
#include <PZEM004Tv30.h>
#define RELAY_PIN D8 // กำหนดขา D8 เพื่อสั่งเปิด/ปิดปลั๊กไฟ
// กำหนดพอร์ต Serial สำหรับการสื่อสารกับ PZEM-004T
SoftwareSerial pzemSerial(D5, D6); // TX -> D5, RX -> D6
PZEM004Tv30 pzem(&pzemSerial);
void setup() {
Serial.begin(115200); // Serial Monitor สำหรับ Debugging
pzemSerial.begin(9600); // Baud rate สำหรับการสื่อสารกับ PZEM-004T
pinMode(RELAY_PIN, OUTPUT); // กำหนดขา D8 เป็น OUTPUT เพื่อควบคุมรีเลย์
digitalWrite(RELAY_PIN, LOW); // เริ่มต้นปิดรีเลย์
Serial.println("เริ่มต้นการอ่านค่าไฟฟ้า");
}
void loop() {
// อ่านค่าไฟฟ้าจาก PZEM-004T
float voltage = pzem.voltage();
float current = pzem.current();
float power = pzem.power();
float energy = pzem.energy();
// แสดงข้อมูลบน Serial Monitor
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); Serial.println(" kWh");
// ตัวอย่างการสั่งเปิด/ปิดปลั๊กไฟตามค่ากำลังไฟฟ้า
if (power > 1000) { // หากกำลังไฟเกิน 1000W สั่งเปิดรีเลย์
digitalWrite(RELAY_PIN, HIGH); // เปิดรีเลย์ (สั่ง ON)
Serial.println("เปิดปลั๊กไฟ");
} else {
digitalWrite(RELAY_PIN, LOW); // ปิดรีเลย์ (สั่ง OFF)
Serial.println("ปิดปลั๊กไฟ");
}
delay(2000); // อ่านค่าใหม่ทุกๆ 2 วินาที
}