#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(Serial1, 16, 17);
void setup() {
Serial.begin(115200);
}
void loop() {
float voltage = pzem.voltage();
if(voltage != NAN){
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
} else {
Serial.println("Error reading voltage");
}
float current = pzem.current();
if(current != NAN){
Serial.print("Current: "); Serial.print(current); Serial.println("A");
} else {
Serial.println("Error reading current");
}
float power = pzem.power();
if(current != NAN){
Serial.print("Power: "); Serial.print(power); Serial.println("W");
} else {
Serial.println("Error reading power");
}
float energy = pzem.energy();
if(current != NAN){
Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
} else {
Serial.println("Error reading energy");
}
float frequency = pzem.frequency();
if(current != NAN){
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
} else {
Serial.println("Error reading frequency");
}
float pf = pzem.pf();
if(current != NAN){
Serial.print("PF: "); Serial.println(pf);
} else {
Serial.println("Error reading power factor");
}
Serial.println();
delay(1500);
}
เบื้องต้น ทดลองสลับ สายดูก่อนครับ จาก 16 เป็น 17 17 เป็น 16
ขอบคุณที่แนะนำครับ ลองแล้วก็ยังเหมือนเดิม พอมีวิธีอื่นอีกไหมครับ
เอาข้อมูลมาจาก admin นะครับ
UART2 คือ Serial2 มันต่อขา 16 กับ 17 ถูกแล้วครับ
ปรับ Code อีกนิด
//---- PZEM --------------------------------------------
#include <PZEM004Tv30.h>
//ถ้าค่าไม่ขึ้นก็ลองสลับสายดูนะครับ
#define RX2 16
#define TX2 17
#include <HardwareSerial.h>
PZEM004Tv30 pzem(&Serial2);
void setup() {
Serial.begin(115200);//เวลาดู monitor ใช้ Boudrate 115200
Serial2.begin(9600, SERIAL_8N1, RX2, TX2);
}
void loop() {
float voltage = pzem.voltage();
if (voltage != NAN) {
Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
} else {
Serial.println("Error reading voltage");
}
float current = pzem.current();
if (current != NAN) {
Serial.print("Current: "); Serial.print(current); Serial.println("A");
} else {
Serial.println("Error reading current");
}
float power = pzem.power();
if (current != NAN) {
Serial.print("Power: "); Serial.print(power); Serial.println("W");
} else {
Serial.println("Error reading power");
}
float energy = pzem.energy();
if (current != NAN) {
Serial.print("Energy: "); Serial.print(energy, 3); Serial.println("kWh");
} else {
Serial.println("Error reading energy");
}
float frequency = pzem.frequency();
if (current != NAN) {
Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
} else {
Serial.println("Error reading frequency");
}
float pf = pzem.pf();
if (current != NAN) {
Serial.print("PF: "); Serial.println(pf);
} else {
Serial.println("Error reading power factor");
}
Serial.println();
delay(1500);
}
คือถ้าใช้ลักษณะนี้ จะมีปัญหากับการ Upload ดังนั้นก่อน Upload ให้ถอดสาย RX TX ก่อนนะครับ เมื่อ Upload เสร็จก็เสียบสายไปใหม่
อธิบายเพิ่มเติมหน่อยได้ไหมครับ พอดีผมไม่ค่อยเข้าใจ
ลอง Upload code ดูก่่อนครับ ถ้ามันทำงาน ก็ให้ศักษาะรายละเอียดดูอีกที
ตอนนี้ผมทำสั่วนนั้นได้แล้วครับ ผมอย่างอ่าน3ตัวพอมีวิธีแนะนำไหมครับผมอ่านค่าได้มากสุดแค่2ตัวในบอร์ดเดียว
ศึกษาดูจากที่นี่นะครับ
C:\Users\PUYIOT\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/HardwareSerial.cpp
ดูค่า 3 ชุดนี้ว่า มันเปลี่ยนค่าได้หรือปล่าว และถ้าเปลี่ยนได้ Serial monitor ของคุณ ก็จะไม่สามารถดูค่าอะไรได้อีก
ได้แล้วครับ ขอบคุณมากครับ