ESP32 - PZEM004Tv30 read data
#include <Arduino.h>
#include <PZEM004Tv30.h>
#include <SPIFFS.h>
#include <FS.h>
#include <WiFi.h>
#include <WebServer.h>
#define RX_PIN 16 // กำหนดพิน Rx สำหรับการเชื่อมต่อกับ PZEM
#define TX_PIN 17 // กำหนดพิน Tx สำหรับการเชื่อมต่อกับ PZEM
#define INTERVAL 10000 // เก็บข้อมูลทุก 5 วินาที
// PZEM instance
PZEM004Tv30 pzem(Serial2, RX_PIN, TX_PIN);
// WiFi Hotspot credentials
const char *ssid = "ESP32-AP"; // ตั้งค่า SSID สำหรับ Hotspot
const char *password = "123456789"; // ตั้งค่ารหัสผ่าน
WebServer server(80); // Web server บนพอร์ต 80
unsigned long previousMillis = 0;
void handleDownload() {
File file = SPIFFS.open("/data.csv", FILE_READ);
if(file){
server.sendHeader("Content-Type", "text/csv");
server.sendHeader("Content-Disposition", "attachment; filename=data.csv");
server.streamFile(file, "application/octet-stream");
file.close();
} else {
server.send(404, "text/plain", "File not found");
}
}
void setup() {
Serial.begin(115200);
// ตั้งค่า Hotspot (Access Point)
WiFi.softAP(ssid, password);
Serial.println("Access Point Started");
Serial.print("IP Address: ");
Serial.println(WiFi.softAPIP());
// เริ่มต้น SPIFFS
if(!SPIFFS.begin(true)){
Serial.println("SPIFFS Mount Failed");
return;
}
// สร้างไฟล์ CSV หากยังไม่มี
if(!SPIFFS.exists("/data.csv")){
File file = SPIFFS.open("/data.csv", FILE_WRITE);
if(file){
file.println("Time,Voltage,Current,Power,Energy"); // หัวตาราง CSV
file.close();
}
}
// ตั้งค่าการส่งออกไฟล์ CSV ผ่านเว็บเซิร์ฟเวอร์
server.on("/download", handleDownload);
server.begin();
Serial.println("HTTP server started");
Serial.println("Setup complete");
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= INTERVAL) {
previousMillis = currentMillis;
// อ่านค่าจาก PZEM
float voltage = pzem.voltage();
float current = pzem.current();
float power = pzem.power();
float energy = pzem.energy();
// แสดงค่าที่อ่านได้ผ่าน Serial
Serial.print("Voltage: "); Serial.print(voltage); Serial.print("V, ");
Serial.print("Current: "); Serial.print(current); Serial.print("A, ");
Serial.print("Power: "); Serial.print(power); Serial.print("W, ");
Serial.print("Energy: "); Serial.println(energy);
// เขียนข้อมูลลงในไฟล์ CSV
File file = SPIFFS.open("/data.csv", FILE_APPEND);
if(file){
String data = String(millis()/1000) + "," + String(voltage) + "," + String(current) + "," + String(power) + "," + String(energy);
file.println(data);
file.close();
} else {
Serial.println("Failed to open file for appending");
}
}
// จัดการกับเว็บเซิร์ฟเวอร์
server.handleClient();
// จัดการคำสั่งผ่าน Serial
if(Serial.available()){
String command = Serial.readStringUntil('\n');
command.trim();
if(command == "delete csv"){
SPIFFS.remove("/data.csv");
Serial.println("CSV file deleted");
}
else if(command == "get csv"){
File file = SPIFFS.open("/data.csv", FILE_READ);
if(file){
while(file.available()){
Serial.write(file.read());
}
file.close();
} else {
Serial.println("Failed to open CSV file");
}
}
}
}
Last updated