Blynk se desconecta continuamente

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);
  }
}

You have to call ReadVoltage out off the loop, using a blynk timer.

1 Like