ราตรีสวัสดิ์ที่รัก PUYOL ฉันมีข้อผิดพลาดนี้เมื่อรวบรวม
ESP8266_Pzem_004t_v3.0_v3: 28: 51: ข้อผิดพลาด: Scheduler.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
hi from mexico
Please capture picture error a paste to comment.
ที่รักของฉัน Remy ใจดีมากสำหรับเวลาที่จะแสดงความคิดเห็นในข้อผิดพลาดการรวบรวมของฉันได้รับการแก้ไขแล้วและแสดงให้ฉันข้อผิดพลาดนี้โดยการเพิ่มห้องสมุดและรวบรวมมัน
Please paste full your code.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <FS.h>
#include <DNSServer.h>
#include <ArduinoJson.h>
#define BLYNK_MAX_SENDBYTES 1200
#include <BlynkSimpleEsp8266.h>
#include <EEPROM.h>
//------------------------------ Configuración en la sección Blynk ------------------------------------------------//
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial
int blynkIsDownCount = 0;
char blynk_token[34] = "8dwBaSBOE8htLFrK37JPAYB1hm8TaQkU";//Ingrese nuestro Blynk_token enviado por Blynk por correo electrónico al crear un nuevo proyecto. 8dwBaSBOE8htLFrK3217JPA1YB1hm8TaQkU"
BlynkTimer timer;
//---------------------------------- Determine el número de pin del nodo MCU ESP 8266. --------------------------------------------//
#define D0 16 //Use el LED azul del MCU ESP8266 para tener una luz intermitente de acuerdo con el código escrito.
#define D3 0 // Úselo como un botón para acceder a la configuración AP de acuerdo con las necesidades del usuario.
//------------------------------------------------------------------------------------------------------------------------//
#include <Scheduler.h>
// ------------------------Se puede utilizar la biblioteca de pantallas LCD. De esta manera, puede crear un personaje.---------------------------------//
#include <LCD.h> // Las líneas 1 y 2 se pueden cambiar.
#include <Wire.h> // Las líneas 1 y 2 se pueden cambiar.
#include <LiquidCrystal_I2C.h> //Esta línea debe estar solo en la línea 3. Si va a las líneas 1 y 2, no se compilará.
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //// Establezca la dirección del dispositivo de pantalla LCD con conexión I2C.
//------------------------------------------------------------------------------------------------------------------------//
bool shouldSaveConfig = false;
//callback notifying us of the need to save config
void saveConfigCallback () {
Serial.println("Should save config");
shouldSaveConfig = true;
}
//------------------------------------------------------------------------------------------------------------------------//
//-------------Para el servidor local distribuido, agregue **** solo 2 líneas-------------- (??????? Blynk Server ??????????????) ----------//
char server[] = "oasiskit.com";
int port = 8080;
//------------------------------------------------------------------------------------------------------------------------//
#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(12, 13); // 12(D6)=RX , 13(D7) = TX : TX->D6(GPIO012),RX->D7(GPIO013)
//La variable toma Ft de Blynk para almacenar en la EEPROM.
float Ft;
String Ft_1;
float Ft_2;
//La variable toma la fecha de Blynk y la almacena en la EEPROM.
float Rst_D;
String Rst_D1;
float Rst_D2;
//La variable toma el valor de hora de Blynk para almacenarlo en la EEPROM.
float Rst_H;
String Rst_H1;
float Rst_H2;
//La variable toma el valor minuto de Blynk para almacenarlo en la EEPROM.
float Rst_M;
String Rst_M1;
float Rst_M2;
//Variable para recibir facturas mensuales de electricidad.
float Electric_bill;
float kWh_1;
float kWh_2;
float kWh_3;
float kWh_T;
float kWh_T1;
//Presione el botón Restablecer kWh de Blynk.
int Blynkreset_kWh;
WidgetLED led_rst_kWh(V12);//Se ENCENDERÁ cuando mantenga presionado el botón durante 5 segundos
//RTC Library
#include "Arduino.h"
#include "Wire.h"
#include "uRTCLib.h"
// uRTCLib rtc;
uRTCLib rtc(0x68);
//Establezca la programación de correo electrónico solo una vez
int Email_status = 0;
int Email_status1 = 0;
BLYNK_WRITE(V10)
{
Ft_1 = param.asString();//Heredar texto de Blynk en String
Ft_2 = Ft_1.toFloat();//Convertir valor de cadena a flotante
//Ingresamos el valor de Blynk como String = -0.116 para que Ft_1 lo obtenga.
//Ft obtendrá la conversión de Ft_1 a Float = -0.12
// Verás que el valor de Folat se redondea a 2 decimales, no mayor debido a la capacidad del dispositivo en sí.
// causando que el costo se vuelva loco alrededor del 3.44%, causando la factura de electricidad / mes 3.44% menos que el valor real, aproximadamente 0.64 (150 unidades) - 2.14 (500 unidades) baht
// Este proyecto no cambiará ningún valor porque el valor es ligeramente diferente (1 mes no usa menos de 500 unidades con seguridad)
//Este conjunto se hizo en caso de que No está conectado a la aplicación Blynk, aún puede ver todos los valores correctamente Pero cada vez que se cambia el valor de Ft, la fecha, hora y minuto deben configurarse a través de la aplicación Blynk cada vez
EEPROM.put(0, Ft_2); //Escriba el valor Ft_2 que es un flotante en la Dirección 0.
EEPROM.commit(); //Terminar de escribir
Ft = EEPROM.get(0, Ft_2);//Leer Ft_2 como flotante de la dirección 0
Serial.println(Ft);//Mostrar Ft en el monitor serie
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("...... Sync Ft .....");
lcd.setCursor(6, 3);
lcd.print(Ft, 3);
delay(2000);
lcd.clear();
}
BLYNK_WRITE(V20)//Restablezca kWh automático para la fecha establecida desde Blynk en la máquina.
{
Rst_D1 = param.asString();//Heredar texto de Blynk en String
Rst_D2 = Rst_D1.toFloat();//Convertir valor de cadena a flotante
//Este conjunto se hizo en caso de que No está conectado a la aplicación Blynk, todavía puede obtener el valor Rst kWh, pero cada vez que los cambios de fecha y hora deben configurarse a través de la aplicación Blynk
EEPROM.put(20, Rst_D2); //Escriba el valor flotante Rst_D2 en la dirección 20.
EEPROM.commit(); //Terminar de escribir
Rst_D = EEPROM.get(20, Rst_D2);//Lea Rst_2, Flotante de la dirección 20.
Serial.println(Rst_D);//Mostrar Rst en Serial Monitor
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Sync Auto Rst By Day");
lcd.setCursor(0, 2);
lcd.print(" Day: ");
lcd.setCursor(10, 2);
lcd.print(Rst_D, 0);
delay(2000);
lcd.clear();
}
BLYNK_WRITE(V21)//Restablezca kWh automático de acuerdo con las horas establecidas desde Blynk en la máquina.
{
Rst_H1 = param.asString();//Heredar texto de Blynk en String
Rst_H2 = Rst_H1.toFloat();//Convertir valor de cadena a flotante
//Este conjunto se hizo en caso de que No está conectado a la aplicación Blynk, todavía puede obtener el valor Rst kWh, pero cada vez que los cambios de fecha y hora deben configurarse a través de la aplicación Blynk
EEPROM.put(30, Rst_H2); //Escriba el valor Rst_H2 Float en la Dirección 30
EEPROM.commit(); //Terminar de escribir
Rst_H = EEPROM.get(30, Rst_H2);//Lea Rst_H2, Flotador de la dirección 30.
Serial.println(Rst_H);//Mostrar Rst en Serial Monitor
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Sync AutoRst By Hour");
lcd.setCursor(0, 2);
lcd.print(" Hour: ");
lcd.setCursor(10, 2);
lcd.print(Rst_H, 0);
delay(2000);
lcd.clear();
}
BLYNK_WRITE(V22)//Restablezca el kWh automático de acuerdo con los minutos establecidos desde Blynk en la máquina.
{
Rst_M1 = param.asString();//Heredar texto de Blynk en String
Rst_M2 = Rst_M1.toFloat();//Convertir valor de cadena a flotante
//Este conjunto se hizo en caso de que No está conectado a la aplicación Blynk, todavía puede obtener el valor Rst kWh, pero cada vez que los cambios de fecha y hora deben configurarse a través de la aplicación Blynk
EEPROM.put(40, Rst_M2); //Escriba el valor Rst_H2 Float en la dirección 0
EEPROM.commit(); //Terminar de escribir
Rst_M = EEPROM.get(40, Rst_M2);//Leer Rst_M2, Flotar desde la dirección 40
Serial.println(Rst_M);//Mostrar Rst en Serial Monitor
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Sync Auto Rst ");
lcd.setCursor(0, 1);
lcd.print(" By Minute ");
lcd.setCursor(0, 3);
lcd.print(" Minute: ");
lcd.setCursor(10, 3);
lcd.print(Rst_M, 0);
delay(2000);
lcd.clear();
}
BLYNK_WRITE(V11)//Restablecer kWh en 5 segundos desde Blynk
{
int pinValue = param.asInt();
if (pinValue == 1) {
Blynkreset_kWh = 1;
}
if (pinValue == 0) {
Blynkreset_kWh = 0;
}
}
//Blynk Server Connection
class Task_1 : public Task {
protected:
void setup() { }
void loop() {
//-----------------------------------------------------------------------------------------------------------//
if (Blynk.connected())
{
Blynk.run();
digitalWrite(D0, LOW);
} else {
digitalWrite(D0, LOW);
delay(200);
digitalWrite(D0, HIGH);
delay(100);
}
//-----------------------------------------------------------------------------------------------------------//
timer.run();//Deja que Blynk tenga tiempo para trabajar.
delay(500);
}
} Task_1_task;
//Muestra los valores de PZEM.
class Task_2 : public Task {
protected:
void setup() { }
void loop() {
float voltage = pzem.voltage();
if (voltage != NAN) {
//Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
lcd.setCursor(1, 0);
lcd.print(voltage, 0);
lcd.setCursor(4, 0);
lcd.print("Vac");
Blynk.virtualWrite(V1, voltage);
} else {
}
float current = pzem.current();
if (current != NAN) {
//Serial.print("Current: "); Serial.print(current); Serial.println("A");
lcd.setCursor(13, 0);
lcd.print(current, 2);
lcd.print(" A");
Blynk.virtualWrite(V2, current);
} else {
}
float power = pzem.power();
if (current != NAN) {
lcd.setCursor(0, 1);
lcd.print(power, 2);
lcd.setCursor(8, 1);
lcd.print("W");
Blynk.virtualWrite(V3, power);
} else {
}
float energy = pzem.energy();
if (current != NAN) {
lcd.setCursor(10, 1);
lcd.print(energy, 2);
lcd.print(" kWh");
Blynk.virtualWrite(V4, energy);
} else {
}
float frequency = pzem.frequency();
if (current != NAN) {
lcd.setCursor(8, 0);
lcd.print(frequency, 0);
lcd.setCursor(10, 0);
lcd.print("Hz");
Blynk.virtualWrite(V5, frequency);
} else {
}
float pf = pzem.pf();
if (current != NAN) {
Blynk.virtualWrite(V6, pf);
} else {
}
delay(4000);
}//loop
} Task_2_task;
//El cargo de electricidad se calculará de acuerdo con el uso en el hogar. Nuestras más de 150 unidades / mes. Cualquiera menos que esto puede pensar en la fórmula por nosotros mismos.
class Task_3 : public Task {
protected:
void setup() { }
void loop() {
float energy = pzem.energy();
// Presione el botón en la parte frontal del dispositivo durante 5 segundos para restablecer kWh.
if (digitalRead(D3) == LOW) {
delay(3000);
pzem.resetEnergy();
}
// Presione el botón de Blynk durante 5 segundos para restablecer kWh. Mantenga presionado hasta que el LED se apague.
if (Blynkreset_kWh == 1) {
led_rst_kWh.on();
delay(3000);
pzem.resetEnergy();
led_rst_kWh.off();
pzem.resetEnergy();
}
if (Blynkreset_kWh == 0) {
led_rst_kWh.off();
}
// Reinicio automático kWh. La configuración es de Blynk, almacenada en la EEPROM de la máquina.
// Envío de correo electrónico solo 1 vez.
if (Rst_D == rtc.day() && Rst_H == rtc.hour() && Rst_M == rtc.minute() && Email_status == 0) {
pzem.resetEnergy();
//Serial.println ("restablecer kWh"); se restablecerá repetidamente en 1 minuto y se cancelará hasta que se cree un nuevo minuto.
String body = String("La factura mensual de electricidad") + (rtc.month() - 1) + String(" Cantidad ") + Electric_bill + String(" Baht, el sistema tiene Reset Reset kWh = 0 *** *** Verifique el Ft *** mensual con By PUYIOT ");
Blynk.email("mysmarthomepuy@gmail.com", " Notificación mensual de pago de electricidad ", body);
delay(500);
Email_status = 1;
Email_status1 = 0;
}
else if (Rst_D == rtc.day() && Rst_H == rtc.hour() && Rst_M == rtc.minute() && Email_status == 1) {
delay(10);
Email_status1 = 1;
}
if (Rst_M != rtc.minute() && Email_status1 == 1 ) {
delay(10);
Email_status = 0;
}
//1.2 La tasa normal de consumo de electricidad es de más de 150 unidades por mes.
//En nuestro país, este tipo de carga se utiliza para el tipo 1125, que consiste en usar electricidad más de 150 unidades / mes, la tasa es de 38,22 baht / mes.
//1 - 150 baht 3.2484 baht por unidad
if (energy >= 1 && energy <= 150) {
kWh_1 = energy * 3.2484;
}
if (energy > 150) {
kWh_1 = 150 * 3.2484;
}
//Unidades 151 - 400 por unidad 4.2218 baht
if (energy >= 151 && energy <= 400) {
kWh_2 = energy * 4.2218;
}
if (energy > 400) {
kWh_2 = 250 * 4.2218;
//401 -> 4.4217 baht por unidad
kWh_3 = (energy - 400) * 4.4217;
}
//Gastos totales
kWh_T = kWh_1 + kWh_2 + kWh_3;
kWh_T1 = kWh_T + 38.22 + (energy * Ft);
Electric_bill = kWh_T1 + (kWh_T1 * 0.07);
lcd.setCursor(0, 3);
lcd.print("B/M: ");
lcd.setCursor(5, 3);
lcd.print(Electric_bill , 2);
lcd.setCursor(12, 3);
//lcd.print("Bath");
Blynk.virtualWrite(V7, Electric_bill);
lcd.setCursor(13, 3);
lcd.print(Rst_D, 0);
//lcd.print("D");
lcd.setCursor(15, 3);
lcd.print(Rst_H, 0);
lcd.setCursor(17, 3);
lcd.print(":");
//lcd.print("H");
lcd.setCursor(18, 3);
lcd.print(Rst_M, 0);
delay(2000);
}//loop
} Task_3_task;
//Mostrar dd:mm:yy hh:mm
class Task_4 : public Task {
protected:
void setup() { }
void loop() {
rtc.refresh();
int year_ = rtc.year() + 43; //+43 para obtener el año 63
lcd.setCursor(0, 2);
//Agregue 0 en caso de número, día, mes, hora, minuto, segundo
if (rtc.day() < 10)
{
lcd.print("0");
lcd.print(rtc.day());
}
else lcd.print(rtc.day());
lcd.print('-');
if (rtc.month() < 10)
{
lcd.print("0");
lcd.print(rtc.month());
}
else lcd.print(rtc.month());
lcd.print('-');
lcd.print(year_);
lcd.setCursor(12, 2);
if (rtc.hour() < 10)
{
lcd.print("0");
lcd.print(rtc.hour());
}
else lcd.print(rtc.hour());
lcd.print(':');
if (rtc.minute() < 10)
{
lcd.print("0");
lcd.print(rtc.minute());
}
else lcd.print(rtc.minute());
lcd.print(':');
if (rtc.second() < 10)
{
lcd.print("0");
lcd.print(rtc.second());
}
else lcd.print(rtc.second());
delay(1000);
}
} Task_4_task;
//------------------------------------------------------------------------------------------------------------------------//
//********************************************* void setup **************************************************//
//------------------------------------------------------------------------------------------------------------------------//
void setup() {
//-------IO NODE MCU Esp8266-------//
pinMode(D0, OUTPUT); //Establezca el modo de funcionamiento para el pin D0 para señalar el pin en varias condiciones.
pinMode(D3, INPUT_PULLUP);//Establezca el modo activo en pin D3 a pin Mantenga presionado el botón para establecer la configuración AP.
// Deje que todos los LED se apaguen primero.
digitalWrite(D0, LOW);//Permita que el LED azul se apague primero.
//-------------------------------//
Serial.begin(115200);
//-------------------------------//
EEPROM.begin(512);
//Quiere saber si el valor de Ft que es un Flotante almacenado en la EEPROM es el valor = el valor que realmente se ingresa desde Bylnk.
Ft = EEPROM.get(0, Ft_2);
Serial.print("Ft in Void setup : ");
Serial.println(Ft);
//Me gustaría saber si el valor de fecha en el Flotante almacenado en la EEPROM tiene el valor = el valor que realmente se ingresó desde Bylnk.
Rst_D = EEPROM.get(20, Rst_D2);
Serial.print("Day in Void setup : ");
Serial.println(Rst_D);
//Me gustaría saber que el valor horario del Flotador almacenado en la EEPROM tiene el valor = el valor que realmente se ingresa desde Bylnk.
Rst_H = EEPROM.get(30, Rst_H2);
Serial.print("Hour in Void setup : ");
Serial.println(Rst_H);
//Quiere saber si el valor minuto que es un flotante almacenado en la EEPROM es el valor = el valor que realmente se ingresa desde Bylnk
Rst_M = EEPROM.get(40, Rst_M2);
Serial.print("Minute in Void setup : ");
Serial.println(Rst_M);
lcd.begin(20, 4);
lcd.clear();
#ifdef ARDUINO_ARCH_ESP8266
Wire.begin(4, 5); // GPIO4 = D2 and GPIO5 = D1 on ESP8266
#else
Wire.begin();
#endif
//rtc.set(0, 46, 11, 3, 3, 3, 20);//Use solo el temporizador. Si desea configurarlo, tome // Desarmar. Una vez configurado correctamente, luego tome // poner como antes.
// RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
//read configuration from FS json
Serial.println("mounting FS...");//Mostrar el mensaje en el monitor serie.
if (SPIFFS.begin()) {
Serial.println("mounted file system");//Mostrar el mensaje en el monitor serie.
if (SPIFFS.exists("/config.json")) {
//file exists, reading and loading
Serial.println("reading config file");//Mostrar el mensaje en el monitor serie.
File configFile = SPIFFS.open("/config.json", "r");
if (configFile) {
Serial.println("opened config file");
size_t size = configFile.size();
// Allocate a buffer to store contents of the file.
std::unique_ptr<char[]> buf(new char[size]);
configFile.readBytes(buf.get(), size);
DynamicJsonBuffer jsonBuffer;
JsonObject& json = jsonBuffer.parseObject(buf.get());
json.printTo(Serial);
if (json.success()) {
Serial.println("\nparsed json");//Mostrar el mensaje en el monitor serie.
strcpy(blynk_token, json["blynk_token"]);
} else {
Serial.println("failed to load json config");//Mostrar el mensaje en el monitor serie.
}
}
}
} else {
Serial.println("failed to mount FS");//Mostrar el mensaje en el monitor serie.
}
//end read
//************************** AP AUTO CONNECT ********************************************//
WiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 34);
//WiFiManager
//Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wifiManager;
//set config save notify callback
wifiManager.setSaveConfigCallback(saveConfigCallback);
wifiManager.addParameter(&custom_blynk_token);
for (int i = 5; i > -1; i--) { // Cuente 5 segundos antes de presionar el botón AP Config.
digitalWrite(D0, HIGH);
delay(500);
digitalWrite(D0, LOW);
delay(500);
Serial.print (String(i) + " ");//Mostrar el mensaje en el monitor serie.
}
if (digitalRead(D3) == LOW) {
digitalWrite(D0, LOW);
Serial.println("Button Pressed");//Mostrar el mensaje en el monitor serie.
wifiManager.resetSettings();//Borre el SSID y la contraseña que se guardó.
// wifiManager.autoConnect(); Se usa para crear automáticamente puntos de acceso desde ESP + ChipID.
if (!wifiManager.autoConnect("PUYIOT AP CONFIG")) {
Serial.println("failed to connect and hit timeout");//Mostrar el mensaje en el monitor serie.
delay(3000);
//reset and try again, or maybe put it to deep sleep--reiniciar e intentar nuevamente, o quizás ponerlo en reposo profundo
ESP.reset();
delay(5000);
}
}
Serial.println("Connected.......OK!)");//Mostrar el mensaje en el monitor serie.
strcpy(blynk_token, custom_blynk_token.getValue());
//save the custom parameters to FS
if (shouldSaveConfig) {
Serial.println("saving config");//Mostrar el mensaje en el monitor serie.
DynamicJsonBuffer jsonBuffer;
JsonObject& json = jsonBuffer.createObject();
json["blynk_token"] = blynk_token;
File configFile = SPIFFS.open("/config.json", "w");
if (!configFile) {
Serial.println("failed to open config file for writing");//Mostrar el mensaje en el monitor serie.
}
json.printTo(Serial);
json.printTo(configFile);
configFile.close();
//end save
}
//************************** TERMINA AP AUTO CONNECT *****************************************//
Serial.println("local ip"); //Mostrar el mensaje en el monitor serie.
delay(100);
Serial.println(WiFi.localIP());//Mostrar el mensaje en el monitor serie.
Serial.println("gateway");
delay(100);
Serial.println(WiFi.gatewayIP());
Serial.println("subnetMask");
delay(100);
Serial.println(WiFi.subnetMask());
Serial.println("SSID");
delay(100);
Serial.println(WiFi.SSID());
Serial.println("Password");
delay(100);
Serial.println(WiFi.psk());
// Blynk.config(blynk_token); //// Inicia una conexión normal del servidor Blynk.
Blynk.config(blynk_token, server, port);
////Comience a conectarse a Blynk Server ********* para el servidor local que se entrega, servidor, puerto. Todo esto está hecho.
timer.setInterval(30000L, reconnecting); //Function reconnect
Scheduler.start(&Task_1_task);
Scheduler.start(&Task_2_task);
Scheduler.start(&Task_3_task);
Scheduler.start(&Task_4_task);
Scheduler.begin();
}
//------------------------------------------------------------------------------------------------------------------------//
//********************************************* TERMINA void setup **************************************************//
//------------------------------------------------------------------------------------------------------------------------//
//------------------------------------------------------------------------------------------------------------------------//
//********************************************* void Loop ***************************************************//
//------------------------------------------------------------------------------------------------------------------------//
void loop() {
}
//------------------------------------------------------------------------------------------------------------------------//
//********************************************* Fin de void Loop **************************************************//
//------------------------------------------------------------------------------------------------------------------------//
//------------------------------------------------------------------------------------------------------------------------//
void reconnecting()
{
if (!Blynk.connected())
{
blynkIsDownCount++;
BLYNK_LOG("blynk server is down! %d times", blynkIsDownCount);
Blynk.connect(5000);
}
}
BLYNK_CONNECTED()
{
Blynk.syncAll();//Sincronice todos los datos más recientes del servidor Blynk.
}
คำขอโทษสำหรับคนที่ฉันตอบว่าฉันเพิ่งรู้จักกับพอร์ทัลนี้และการแปลของฉันก็ซับซ้อน
คำขอโทษสำหรับคนที่ฉันตอบว่าฉันเพิ่งรู้จักกับพอร์ทัลนี้และการแปลของฉันก็ซับซ้อนรหัสของฉันก็เหมือนกันกับที่นี่ในพอร์ทัลESP8266_Pzem_004t_v3.0_v3.ino (23.6 KB)
i use library name : ESP8266Scheduler
you can Download here :
Your check code has "}"
Is that correct?
ผมมีเรื่องแจ้งครับ จากกระทู้ นี้ ผมคิดว่ามี สมาชิก หรือผู้ที่ต้องการทำโปรเจคนี้ กำลังทำและลอง Code อยู่หรือปล่าวไม่แน่ใจ คือใน Code ที่ผมแชร์ไป มันมี Gmail ผมอยู่ด้วย ซึ่งตอนนี้ผมแก้เป็น xxxx@gmail.com แล้ว มันมี Gmail ผม ส่งเข้ามาหาครับ รายงานแจ้งค่าไฟประจำเดือน ซึ่งมันไม่ใช่ของผมครับ คืออยากแจ้งให้คนที่ทดลองทำอยู่ ทราบว่า งานคุณนะ OK แล้ว แต่ กรุณาเปลี่ยน Gmail เป็น Gmail ของคุณด้วยนะครับ
ส่วนหนึ่งขอน้อมรับความผิดพลาดนะครับที่ไม่ดูให้ดีก่อน
เมลมาจาก เมคซิโก รึป่าวครับพี่ 555 ดีที่ไม่เข้ารัวๆ
คิดได้ว่า จะหาความน่าเชื่อถือจาก PZEM ยังไง ก็เอาแบบง่ายๆ ที่คิดได้ดีกว่าครับ
วันที่ | เวลา | มิเตอร์การไฟฟ้า kWh | PZEM kWh |
---|---|---|---|
6/3/2563 | 19.32 | 41608 (เกือบๆ 8) | 21.978 |
6/3/2563 | 8.01 | 41604 (เกือบๆ4) | 17.019 |
ค่าความต่าง | 4 | 4.959 |
ค่าที่ได้แตกต่างกันเกือบ 1 หน่วย
ลองคิดหาสาเหตุ ค่าที่ผิดพลาดแบบง่ายๆ ดูก่อน
-
เครื่องวัดของการไฟฟ้าเป็นแบบ Analog ส่วน PZEM เป็นแบบ Digital ก็ย่อมให้ค่าที่ออกมาแตกต่างกัน
-
เครื่องวัดของการไฟฟ้าเป็นแบบ Analog มันบอกค่าจุดทศนิยมไม่ได้ ตำแหน่งสุดท้ายก็ต้องประมาณเอา
ในกรณีดังรูปหลักสุดท้าย อยู่ระหว่าง 3 กับ 4 ก็ต้องประมาณเอา ทำให้ค่าคลาดเคลื่อน กับแบบ Digital
3. ค่า Digital มากกว่าค่า Analog เป็นผลดีกับใคร
เดี๋ยวพรุ่งนี้ จะเชคอีกทีครับ
Update ข้อมูล 14/03/2563
วันที่ | เวลา | มิเตอร์การไฟฟ้า kWh | PZEM kWh |
---|---|---|---|
10/3/2563 | 9.19 | 41659 | 74.376 |
7/3/2563 | 8.46 | 41615 | 28.24 |
ค่าความต่าง | 44 | 46.136 |
วันที่ | เวลา | มิเตอร์การไฟฟ้า kWh | PZEM kWh |
---|---|---|---|
14/3/2563 | 8.3 | 41724 | 139.663 |
10/3/2563 | 9.19 | 41659 | 74.376 |
ค่าความต่าง | 65 | 65.287 |
จะเห็นว่า ระหว่างเครื่องวัดแบบ Digital กับ Analog มีความใกล้เคียงกันมาก
พี่ทำแบบตารางเป็นด้วยหรอครับ ผมว่าผมยังไม่ได้ลงวิธีทำไว้นะ เยี่ยมไปเลยครับ
ตอนแรกกะพิมพ์ลงไป ระยะห่างมันไม่ได้ ก็เลยไปทำในExcelกะว่าจะcapture.ไม่เอาดีกว่า ก็อปตารางไปวางเลย ผลลัพธ์ ก็เป็นอย่างที่เห็นครับ
หากผมใช้ pzem 2 ตัวต่อกับ esp8266 ตัวเดียวได้ไหมครับ เพื่อรับข้อมูลมาแสดงที่ blynk
ขอบคุณครับ
ยังไม่เคยลองครับ ถ้ามีข้อมูลอะไรก็เอามาลงไว้ก่อนก็ได้ครับ
สนใจทำโปรเจคนี้มากครับแต่ไม่รุ้จะเริ่มยังไง พอจะมีข้อมูลการทำแรกๆไม่ครับ