Hola, estoy usando blynk para visualizar el voltaje de linea (220V), uso un modulo zmpt101b y un Wemos D1 Mini, las lecturas de voltaje funcionan correctamente pero a los 10 segundos de haberse conectado, blynk se desconecta. Alguien tiene alguna idea de porque?
Este es mi codigo
#include <Filters.h>
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <BlynkSimpleEsp8266.h>
#ifndef STASSID
#define STASSID "- - - - - -"
#define STAPSK "- - - - - -"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
char auth[] = "- - - - - -";
BlynkTimer timer;
#define ZMPT101B A0 //Analog input
float testFrequency = 50; // test signal frequency (Hz)
float windowLength = 100/testFrequency; // how long to average the signal, for statistist, changing this can have drastic effect
// Test as you need
int RawValue = 0;
float Volts_TRMS; // estimated actual voltage in Volts
float intercept = 2; // to be adjusted based on calibration testin
float slope = 218.5/97.15;
unsigned long previousMillis = 0;
RunningStatistics inputStats; //This class collects the value so we can apply some functions
void Restart(){
if(!Blynk.connected()){
ESP.restart();
}
}
void setup() {
Serial.begin(115200);
Serial.println("Booting");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH) {
type = "sketch";
} else { // U_FS
type = "filesystem";
}
// NOTE: if updating FS this would be the place to unmount FS using FS.end()
Serial.println("Start updating " + type);
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) {
Serial.println("Auth Failed");
} else if (error == OTA_BEGIN_ERROR) {
Serial.println("Begin Failed");
} else if (error == OTA_CONNECT_ERROR) {
Serial.println("Connect Failed");
} else if (error == OTA_RECEIVE_ERROR) {
Serial.println("Receive Failed");
} else if (error == OTA_END_ERROR) {
Serial.println("End Failed");
}
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Blynk.config(auth);
Blynk.connect();
pinMode(ZMPT101B, INPUT);
// timer.setInterval(1000, Print);
inputStats.setWindowSecs( windowLength );
}
void loop() {
ArduinoOTA.handle();
if(Blynk.connected()){
Blynk.run();
}
else
{
Blynk.config(auth);
Blynk.connect();
timer.setTimeout(30000L, Restart);
}
timer.run();
ReadVoltage();
}
float ReadVoltage(void){
RawValue = analogRead(ZMPT101B); // read the analog in value:
inputStats.input(RawValue); // log to Stats function
if((unsigned long)(millis() - previousMillis) >= 1000) { //We calculate and display every 1s
previousMillis = millis(); // update time
Volts_TRMS = inputStats.sigma()* slope + intercept;
// Volts_TRMS = Volts_TRMS*0.979; //Further calibration if needed
Serial.print("Non Calibrated: ");
Serial.print("\t");
Serial.print(inputStats.sigma());
Serial.print("\t");
Serial.print("Calibrated: ");
Serial.print("\t");
Serial.println(Volts_TRMS);
Blynk.virtualWrite(V15, Volts_TRMS);
}
}