Problems with Blynk

At some time I have developed routines using Spark Photon and Blynk and I’ve been having some problems. Sometimes that access the device running Blynk, the same lock and then reconnecting. I put the same program running on a ESP8266 with Arduino interface and have no problems. Now the Photon have this intermittent problem. As I have been updating the firmware Photon the problem is improving, because before crashed and only returned to work if pressed the reset button. Already in the new firmwares, he goes off the air and returns normally. However it happens too often.
Somebody would have any suggestions? In fact I have 3 devices interconnected in the same Blynk interface, two photon and ESP8266.

I appreciate suggestions to make a good interface between Photon and Blynk.

Thank you very much.

Hey @mdma are you able to help with this?

@enghugo, can you post your Photon code? It is difficult to make recommendations without seeing what your code is doing. :grinning:

1 Like

Sorry for the delay in posting the code, I’ve been traveling these days.
The following are the codes:
First, The Master Controller (Spark Photon):

// This #include statement was automatically added by the Particle IDE.
#define BLYNK_PRINT Serial
#include "blynk/BlynkSimpleParticle.h"
#include "blynk/blynk.h"

SYSTEM_MODE(SEMI_AUTOMATIC);
SYSTEM_THREAD(ENABLED);
STARTUP(WiFi.selectAntenna(ANT_AUTO));
STARTUP(System.enableFeature(FEATURE_RETAINED_MEMORY));


// Variáveis utilizadas no equipamento
  retained char alarmeStatus = '1';
  retained char cercaStatus = '7';
  char auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

  const char ALARME_DESCONECTADO = '0';
  const char ALARME_DESATIVADO = '1';
  const char ALARME_ATIVADO = '2';
  const char ALARME_DISPARADO = '3';
  const char CERCA_DESCONECTADA = '6';
  const char CERCA_DESLIGADA = '7';
  const char CERCA_LIGADA = '8';

  // Define nome para entradas e saídas:
  //Saidas:
  int S_Alarme =  D6;                 // Saída Controle Alarme
  int S_Cerca =  D5;                  // Saída Controle Cerca
  int St_Alarme =  D4;                // Saída Controle Led Alarme
  int St_Cerca =  D3;                 // Saída Controle Led Cerca
  int LStatus =  D7;                  // Saída Led Status do Equipamento
  int LPortao =  D2;                  // Saída Led do Portão
  int LLuz =  A5;                     // Saída Led Luz Externa

  //Entradas:
  int E_Sirene = D0;                  // Sinal de Entrada Sirene
  int Bot = D1;                       // Sinal de Entrada Botão

  int StatusE_Sirene;                       // Estado da Entrada 1
  int UltimoStatusE_Sirene = LOW;           // Estado anterior da Entrada 1
  int ContadorE_Sirene = 0;                 // Verificador de quantas vezes a Entrada 1 foi acionada
  int EnvioStatus = LOW;                    // Estado dos comandos
  int StatusEnvio;                          // Estado da Entrada 1
  int UltimoStatusEnvio = LOW;              // Estado anterior da Entrada 1
  int LeStatus;                             // Estado atual da ntrada 1
  int SaidaStatus1 = LOW;
  int SaidaStatus2 = LOW;
  int SaidaStatus3 = LOW;
  int SaidaStatus4 = LOW;
  int BloqSaida = 0;
  int SinalStatus = LOW;

  // Definições do Status do Alarme:
  unsigned int ControleAlarme = 0;
  unsigned int ControleCerca = 0;

  unsigned long TempoE_Sirene = 0;          // Tempo da Entrada 1
  unsigned long UltimoTempoE_Sirene = 0;    // Último momento em que o Entrada 1 foi atualizado
  unsigned long DebounceE_Sirene = 150;     // Tempo do filtro Entrada 1, aumentar se ocorrer irregularidades
  unsigned long TempoEnvio = 0;             // Tempo da Entrada 1
  unsigned long UltimoTempoEnvio = 0;       // Último momento em que o Entrada 1 foi atualizado
  unsigned long DebounceEnvio = 5000;       // Tempo do filtro Entrada 1, aumentar se ocorrer irregularidades
  unsigned long IntervaloNormal = 1000;
  unsigned long IntervaloDisparado = 1500;
  unsigned long PrevioMillis = 0;
  unsigned long TempoSinalAtual = 0;
  unsigned long MillisAtual = millis();
  unsigned long ContDisparo = 0;
  unsigned long ContSinal = 0;
  unsigned long ContIni = 0;

  double temp = 0.0;
  double humd = 0.0;
  double tempFundo = 0.0;
  double humdSolo = 0.0;
  double tempC = 0.0;

  bool inicio = true;
  bool BtTrava = false;
  bool PLed = false;
  bool Primeira = false;
  bool PrimeiraBlynk = false;

  Timer timer1(2000, Atualiza);             // Tempo e Rotina do Temporizador
  Timer timer2(60000, Alerta);              // Tempo e Rotina do Temporizador
  Timer timer3(100, AlertaLed);             // Tempo e Rotina do Temporizador

  ApplicationWatchdog wd(60000, System.reset);

//Canais Virtuais do Blynk
  WidgetBridge bridge1(V3);                 // Canal Virtual da Ponte
  WidgetBridge bridge2(V14);                 // Canal Virtual da Ponte

  WidgetLCD lcd(V0);                        // Canal Virtual do LCD Virtual

  WidgetLED LedAlarme(V5);                  //LED Virtual no APP
  WidgetLED LedCerca(V6);                   //LED Virtual no APP
  WidgetLED LedDisparo1(V7);                //LED Virtual no APP
  WidgetLED LedDisparo2(V8);                //LED Virtual no APP
  



void setup() {

   Serial.begin(115200);                      // Inicia a Serial
   delay(50);
   WiFi.on();                               // Liga a Módulo WiFi com as credenciais pré definidas
   delay(50);
   WiFi.connect();                          // Conecta à Rede WiFi

   pinMode(E_Sirene, INPUT_PULLUP);                // Indica que é entrada
   pinMode(Bot, INPUT_PULLUP);                     // Indica que é entrada
   pinMode(S_Alarme, OUTPUT);               // Indica que é saída
   pinMode(S_Cerca, OUTPUT);                // Indica que é saída
   pinMode(St_Alarme, OUTPUT);              // Indica que é saída
   pinMode(St_Cerca, OUTPUT);               // Indica que é saída
   pinMode(LStatus, OUTPUT);                // Indica que é saída
   pinMode(LPortao, OUTPUT);                // Indica que é saída
   pinMode(LPortao, OUTPUT);                // Indica que é saída
   pinMode(LLuz, OUTPUT);                   // Indica que é saída
   digitalWrite(S_Alarme, LOW);             // Desliga Saída ao Iniciar
   digitalWrite(S_Cerca, LOW);              // Desliga Saída ao Iniciar
   digitalWrite(St_Alarme, LOW);            // Desliga Saída ao Iniciar
   digitalWrite(St_Cerca, LOW);             // Desliga Saída ao Iniciar
   digitalWrite(LPortao, LOW);              // Desliga Saída ao Iniciar
   digitalWrite(LLuz, LOW);                 // Desliga Saída ao Iniciar


    pinMode(A1, OUTPUT);                // Indica que é saída
    pinMode(A2, OUTPUT);                // Indica que é saída
    pinMode(A3, OUTPUT);                // Indica que é saída
    pinMode(A4, OUTPUT);                // Indica que é saída
    pinMode(DAC, OUTPUT);                // Indica que é saída
    pinMode(WKP, OUTPUT);                // Indica que é saída

    digitalWrite(A1, LOW);             // Desliga Saída
    digitalWrite(A2, LOW);             // Desliga Saída
    digitalWrite(A3, LOW);             // Desliga Saída
    digitalWrite(A4, LOW);             // Desliga Saída
    digitalWrite(DAC, LOW);             // Desliga Saída
    digitalWrite(WKP, LOW);             // Desliga Saída


   digitalWrite(LStatus, HIGH);             // Liga Saída

   waitUntil(WiFi.ready);                   // Agaurda conectar a WiFi

   Blynk.begin(auth);                       // Faz Autenticação no Servidor Blynk

   digitalWrite(LStatus, LOW);              // Desliga Saída

   waitUntil(Blynk.connect);                // Agaurda Conectar no Servidor Blink

   timer1.start();                          // Inicia Rotina Temporizador
   timer2.start();                          // Inicia Rotina Temporizador
   timer3.start();                          // Inicia Rotina Temporizador
   PrimeiraBlynk = true;

   delay(250);                              // Tempo
}

// Rotinas do Blynk
BLYNK_CONNECTED()
{
    bridge1.setAuthToken("YYYYYYYYYYYYYYYYYYYYYYY");
    bridge2.setAuthToken("ZZZZZZZZZZZZZZZZZZZZZZZZZZ");
    if (PrimeiraBlynk)
    {
        Blynk.syncAll();
        digitalWrite(LStatus, HIGH);              // Desliga Saída
        PrimeiraBlynk = false;
    }
}

//Verifica  Botão Virtual do Alarme
BLYNK_WRITE(V1)
{
    if(param.asInt() != 0)
    {
        if( LeStatus == LOW )
        {
            ContadorE_Sirene = 0;
            ControleAlarme = 1;
            SinalStatus = LOW;
            UltimoTempoEnvio = millis();
            LeStatus = HIGH;
        }
    }
}

// Verifica Botão Virtual da Cerca
BLYNK_WRITE(V2)
{
//Enviado pelo Cliente Liga Cerca
    if(param.asInt() != 0)
    {
        if( LeStatus == LOW )
        {
            ContadorE_Sirene = 0;
            ControleCerca = 1;
            SinalStatus = LOW;
            UltimoTempoEnvio = millis();
            LeStatus = HIGH;
        }
    }
}

// Verifica Cera
BLYNK_WRITE(V4)
{
  if(param.asInt() > 0)
  {
      BtTrava = true;
      bridge1.digitalWrite(14, HIGH);
      digitalWrite(LPortao, HIGH);

  }
  else
  {
      bridge1.digitalWrite(14, LOW);
      digitalWrite(LPortao, LOW);
      BtTrava = false;
  }
}

BLYNK_READ(V9)
{
  Blynk.virtualWrite(V9, temp);
  bridge1.virtualWrite(V8, 1);
}

BLYNK_READ(V10)
{
  Blynk.virtualWrite(V10, humd);
  bridge1.virtualWrite(V9, 1);
}

//Luz Externa
BLYNK_WRITE(V11)
{
  if(param.asInt() > 0)
  {
      bridge1.digitalWrite(12, HIGH);
      digitalWrite(LLuz, HIGH);

  }
  else
  {
      bridge1.digitalWrite(12, LOW);
      digitalWrite(LLuz, LOW);
  }

}

BLYNK_WRITE(V12)
{
    if(param.asDouble() != 0)
    {
        temp = param.asDouble();
    }
}

BLYNK_WRITE(V13)
{
    if(param.asDouble() != 0)
    {
        humd = param.asDouble();
    }
}

BLYNK_READ(V15)
{
  Blynk.virtualWrite(V15, tempFundo);
  bridge2.virtualWrite(V1, 1);
}

BLYNK_READ(V16)
{
  Blynk.virtualWrite(V16, humdSolo);
  bridge2.virtualWrite(V2, 1);
}

BLYNK_WRITE(V17)
{
    if(param.asInt() != 0)
    {
        Particle.connect();
    }
}

BLYNK_WRITE(V18)
{
    if(param.asInt() != 0)
    {
        Particle.disconnect();
    }
}

BLYNK_WRITE(V19)
{
    if(param.asDouble() != 0)
    {
        tempFundo = param.asDouble();
    }
}

BLYNK_WRITE(V20)
{
    if(param.asDouble() != 0)
    {
        humdSolo = param.asDouble();
    }
}

BLYNK_READ(V21)
{
    tempC = ((analogRead(A0) * 2.5)/4095.0) * 100.0;
    Blynk.virtualWrite(V21, tempC);
}

void Inicial()
{
    if(ContIni <= 50)
    {
        if(ContIni <= 1)lcd.clear(); //Use it to clear the LCD Widget
        lcd.print(0, 0, "Home Automotion "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        lcd.print(0, 1, "Particle Photon "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
    }
    if(ContIni > 50 && ContIni <= 100)
    {
        if(ContIni <= 51)lcd.clear(); //Use it to clear the LCD Widget
        lcd.print(0, 0, "   By Haltech   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        lcd.print(0, 1, "   Blynk-V2.0   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
    }
    if(ContIni > 100)
    {
        lcd.clear(); //Use it to clear the LCD Widget
        ContIni = 0;
        inicio = false;
        Atualiza();
    }  
}

// Temporizadores de algumas funções
void Atualiza()
{
    Particle.publish("Principal -> Ciclos/ms:", String (System.ticksPerMicrosecond()));
    if(inicio == false)
    {
        if(alarmeStatus != ALARME_DISPARADO)
        {
            if(alarmeStatus == ALARME_ATIVADO)
            {
                lcd.print(0, 0, "Alarme    Ligado");
                LedAlarme.on();
            }
            if(alarmeStatus != ALARME_ATIVADO)
            {
                lcd.print(0, 0, "Alarme Desligado");
                LedAlarme.off();
            }
            if(cercaStatus == CERCA_LIGADA)
            {
                lcd.print(0, 1, "Cerca     Ligada");
                LedCerca.on();
            }
            if(cercaStatus != CERCA_LIGADA)
            {
                lcd.print(0, 1, "Cerca  Desligada");
                LedCerca.off();
            }
        }
        else
        {
            lcd.print(0, 0, "ALARME DISPARADO");
            lcd.print(0, 1, "Verificar Camera");
            LedDisparo1.on();
            LedDisparo2.on();
        }
    }
}

void Alerta()
{
    if(alarmeStatus == ALARME_DISPARADO)
    {
        Blynk.notify("Alarme Disparado!");
    }
}

void AlertaLed()
{
    if(alarmeStatus == ALARME_DISPARADO)
    {
        PLed = !PLed;
        digitalWrite(LStatus, PLed);
    }
    if(inicio == true)
    {
        ContIni ++;
        PLed = !PLed;
        digitalWrite(LStatus, PLed);
    }
}

// Loop Principal do Programa
void loop()
{
    //if(Particle.connected)Particle.publish("Ciclos/ms:", String (System.ticksPerMicrosecond()), 30);
    Blynk.run();
    if(inicio == true)Inicial();
    Geral();
    wd.checkin();
    if(!WiFi.ready())
    {
        digitalWrite(LStatus, LOW);             // Desliga Saída
        delay(250);
        WiFi.connect();
    }
    if(WiFi.ready() && !Blynk.connected())
    {
        PrimeiraBlynk = true;
        digitalWrite(LStatus, LOW);             // Desliga Saída
        delay(250);
        Blynk.connect();
    }
}

//Rotina Geral do Equipamento
void Geral()
{
  if(alarmeStatus != ALARME_DISPARADO && inicio == false)  digitalWrite(LStatus, HIGH);
    // Tempo de Retorno da Sirene antes de limpar o status
  if (LeStatus == HIGH)
  {
   if ((millis() - UltimoTempoEnvio) > DebounceEnvio)
   {
      ContadorE_Sirene = 0;
      lcd.clear(); //Use it to clear the LCD Widget
      lcd.print(0, 0, "Sirene nao resp."); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
      lcd.print(0, 1, "Comando. Verific"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
      Serial.println("Sirene nao respondeu ao comando.");
      Serial.println("Limpando Contador e Status");
      SinalStatus = LOW;
      ControleAlarme = 0;
      ControleCerca = 0;
      UltimoTempoEnvio = 0;
      BloqSaida = 0;
      LeStatus = LOW;
   }
  }

  // Leitura da Porta de Entrada da Sirene
  //Verifica se veio o Pulso do Navegador para pulsar o controle do alarme
  if (digitalRead(E_Sirene)!= UltimoStatusE_Sirene)
  {
    UltimoTempoE_Sirene = millis();
  }
  if ((millis() - UltimoTempoE_Sirene) > DebounceE_Sirene)
  {
    if (digitalRead(E_Sirene) != StatusE_Sirene)
    {
      StatusE_Sirene = digitalRead(E_Sirene);
      if(StatusE_Sirene == LOW)
      {
        ContadorE_Sirene++;
        Serial.print("Pulso da Sirene:");
        lcd.clear(); //Use it to clear the LCD Widget
        lcd.print(0, 0, "Pulso da Sirene:"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        lcd.print(0, 1, ContadorE_Sirene); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        Serial.println(ContadorE_Sirene, DEC);
        SinalStatus = HIGH;
        TempoSinalAtual = millis();
      }
    }
  }

// Trata Sinal de Entrada, para saber o Status do Alarme
 if(SinalStatus == HIGH)
 {
   if(((millis() - TempoSinalAtual)>= 1000) && ((millis() - TempoSinalAtual)<= 1500)&& (StatusE_Sirene == HIGH))
   {
     if(ContadorE_Sirene == 1)
     {
       if(ControleAlarme >= 1)
       {
        alarmeStatus = ALARME_ATIVADO;
        lcd.clear(); //Use it to clear the LCD Widget
        lcd.print(0, 0, "Alarme    Ligado"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        if(cercaStatus == CERCA_LIGADA) lcd.print(0, 1, "Cerca     Ligada");
        if(cercaStatus != CERCA_LIGADA) lcd.print(0, 1, "Cerca  Desligada");
        Serial.println("Alarme Ativado!");
        LedAlarme.on();
        ControleAlarme = 0;
        BloqSaida = 0;
        LeStatus = LOW;
       }
       if(ControleCerca >= 1)
       {
        cercaStatus = CERCA_LIGADA;
        lcd.clear(); //Use it to clear the LCD Widget
        lcd.print(0, 1, "Cerca     Ligada"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        if(alarmeStatus == ALARME_ATIVADO) lcd.print(0, 0, "Alarme    Ligado");
        if(alarmeStatus != ALARME_ATIVADO) lcd.print(0, 0, "Alarme Desligado");
        Serial.println("Cerca Ligada ");
        LedCerca.on();
        ControleCerca = 0;
        BloqSaida = 0;
        LeStatus = LOW;
       }
     }
     if(ContadorE_Sirene == 2)
     {
       if(ControleAlarme >= 1)
       {
        alarmeStatus = ALARME_DESATIVADO;
        Serial.println("Alarme Desativado!");
        lcd.clear(); //Use it to clear the LCD Widget
        lcd.print(0, 0, "Alarme Desligado"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        if(cercaStatus == CERCA_LIGADA) lcd.print(0, 1, "Cerca     Ligada");
        if(cercaStatus != CERCA_LIGADA) lcd.print(0, 1, "Cerca  Desligada");
        LedDisparo1.off();
        LedDisparo2.off();
        LedAlarme.off();
        ControleAlarme = 0;
        BloqSaida = 0;
        LeStatus = LOW;
       }

       if(ControleCerca >= 1)
       {
        cercaStatus = CERCA_DESLIGADA;
        Serial.println("Cerca Desligada!");
        lcd.clear(); //Use it to clear the LCD Widget
        lcd.print(0, 1, "Cerca  Desligada"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
        if(alarmeStatus == ALARME_ATIVADO) lcd.print(0, 0, "Alarme    Ligado");
        if(alarmeStatus != ALARME_ATIVADO) lcd.print(0, 0, "Alarme Desligado");
        LedCerca.off(); //LED Virtual no APP
        ControleCerca = 0;
        BloqSaida = 0;
        LeStatus = LOW;
       }
     }
     ContadorE_Sirene = 0;
     SinalStatus = LOW;
   }
   if(((millis() - TempoSinalAtual)> 1500) && ((millis() - TempoSinalAtual)< 5000)&& (StatusE_Sirene == HIGH))
   {
     ContadorE_Sirene = 0;
     BloqSaida = 0;
     LeStatus = LOW;
     SinalStatus = LOW;
   }

   if(((millis() - TempoSinalAtual)>= 5000) && (StatusE_Sirene == LOW))
   {
       Serial.println("Disparado o Alarme");
       lcd.clear(); //Use it to clear the LCD Widget
       lcd.print(0, 0, "ALARME DISPARADO"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
       lcd.print(0, 1, "Verificar Camera"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
       Blynk.notify("Alarme Disparado!");
       LedAlarme.off();
       LedCerca.off();
       LedDisparo1.on();
       LedDisparo2.on();
       alarmeStatus = ALARME_DISPARADO;
       cercaStatus = CERCA_DESLIGADA;
       ContadorE_Sirene = 0;
       SinalStatus = LOW;
       BloqSaida = 0;
       LeStatus = LOW;
    }
  }
  // Verifica e Trata Controles do Alarme:
  if(ControleAlarme == 1 && BloqSaida == 0)
  {
    MillisAtual = millis();
    if(alarmeStatus != ALARME_ATIVADO && alarmeStatus != ALARME_DISPARADO)
    {
      if(MillisAtual - PrevioMillis > IntervaloNormal)
      {
        PrevioMillis = MillisAtual;
        if (SaidaStatus1 == LOW)
        {
          Serial.println("Comando Enviado para Ativar Alarme.");
          lcd.clear(); //Use it to clear the LCD Widget
          lcd.print(0, 0, "COMANDO PARA:   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          lcd.print(0, 1, "ATIVAR ALARME   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          digitalWrite(S_Alarme, HIGH);
          SaidaStatus1 = HIGH;
        }
        else
        {
          digitalWrite(S_Alarme, LOW);
          SaidaStatus1 = LOW;
          BloqSaida = 1;
        }
      }
    }
    if(alarmeStatus != ALARME_DESATIVADO && alarmeStatus != ALARME_DISPARADO)
    {
      if(MillisAtual - PrevioMillis > IntervaloNormal)
      {
        PrevioMillis = MillisAtual;
        if (SaidaStatus2 == LOW)
        {
          Serial.println("Comando Enviado para Desativar Alarme.");
          lcd.clear(); //Use it to clear the LCD Widget
          lcd.print(0, 0, "COMANDO PARA:   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          lcd.print(0, 1, "DESATIVAR ALARME"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          digitalWrite(S_Alarme, HIGH);
          SaidaStatus2 = HIGH;
        }
        else
        {
          digitalWrite(S_Alarme, LOW);
          SaidaStatus2 = LOW;
          BloqSaida = 1;
        }
      }
    }
    if(alarmeStatus != ALARME_DESATIVADO && alarmeStatus == ALARME_DISPARADO)
    {
      if(MillisAtual - PrevioMillis > IntervaloDisparado)
      {
        PrevioMillis = MillisAtual;
        if (SaidaStatus2 == LOW)
        {
          Serial.println("Comando Enviado para Desativar Alarme.");
          lcd.clear(); //Use it to clear the LCD Widget
          lcd.print(0, 0, "COMANDO PARA:   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          lcd.print(0, 1, "DESATIVAR GERAL "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          digitalWrite(S_Alarme, HIGH);
          SaidaStatus2 = HIGH;
        }
        else
        {
          digitalWrite(S_Alarme, LOW);
          SaidaStatus2 = LOW;
          BloqSaida = 1;
        }
      }
    }
  }
  if(ControleCerca == 1 && BloqSaida == 0)
  {
    MillisAtual = millis();
    if(cercaStatus != CERCA_LIGADA)
    {
      if(MillisAtual - PrevioMillis > IntervaloNormal)
      {
        PrevioMillis = MillisAtual;
        if (SaidaStatus3 == LOW)
        {
          lcd.clear(); //Use it to clear the LCD Widget
          lcd.print(0, 0, "COMANDO PARA:   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          lcd.print(0, 1, "ATIVAR CERCA ELE"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          Serial.println("Comando Enviado para Ativar Cerca.");
          digitalWrite(S_Cerca, HIGH);
          SaidaStatus3 = HIGH;
        }
        else
        {
          digitalWrite(S_Cerca, LOW);
          SaidaStatus3 = LOW;
          BloqSaida = 1;
        }
      }
    }
    if(cercaStatus != CERCA_DESLIGADA)
    {
      if(MillisAtual - PrevioMillis > IntervaloNormal)
      {
        PrevioMillis = MillisAtual;
        if (SaidaStatus4 == LOW)
        {
          lcd.clear(); //Use it to clear the LCD Widget
          lcd.print(0, 0, "COMANDO PARA:   "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          lcd.print(0, 1, "DESATIVAR CERCA "); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
          Serial.println("Comando Enviado para Desativar Cerca.");
          digitalWrite(S_Cerca, HIGH);
          SaidaStatus4 = HIGH;
        }
        else
        {
          digitalWrite(S_Cerca, LOW);
          SaidaStatus4 = LOW;
          BloqSaida = 1;
        }
      }
    }
  }

  //Verifica Status da Entrada da Sirene
  UltimoStatusE_Sirene = digitalRead(E_Sirene);
  //Indica o Estado nos Leds
   if (alarmeStatus == ALARME_ATIVADO)
  {
    digitalWrite(St_Alarme, HIGH);
  }
  else
  {
    digitalWrite(St_Alarme, LOW);
  }
 
  if (cercaStatus == CERCA_LIGADA)
  {
    digitalWrite(St_Cerca, HIGH);
  }
  else
  {
    digitalWrite(St_Cerca, LOW);
  }
// Verfica Botão que abre portão  
  if(BtTrava == false)
  {
       if(digitalRead(Bot) == LOW)
        {
            if(digitalRead(LPortao) == LOW)
            {
                bridge1.virtualWrite(V10, 1);
                digitalWrite(LPortao, HIGH);
            }
        }
        else
        {
            if(digitalRead(LPortao) == HIGH)
            {
                //bridge1.virtualWrite(V10, 0);
                digitalWrite(LPortao, LOW);
            }
        }
   }

}

Second, First Slave Controller(SparkPhoton):

// This #include statement was automatically added by the Particle IDE.
#define BLYNK_PRINT Serial
#include "blynk/BlynkSimpleParticle.h"
#include "blynk/blynk.h"
#include "PietteTech_DHT/PietteTech_DHT.h"
SYSTEM_MODE(SEMI_AUTOMATIC);
SYSTEM_THREAD(ENABLED);
STARTUP(WiFi.selectAntenna(ANT_AUTO));
// system defines
#define DHTTYPE  DHT22              // Sensor type DHT11/21/22/AM2301/AM2302
#define DHTPIN   1       	    // Digital pin for communications
char auth[] = "YYYYYYYYYYYYYYYYYYYYYYY"; 
int UmidadePin = A0;
long int UmidadeValor = 0; 
long int h1 = 0;
float h2 = 0.00;

int LStatus =  D7;                  // Saída Led Status do Equipamento
int result = 0;
bool PrimeiraBlynk = true;
//declaration
void dht_wrapper(); // must be declared before the lib initialization
// Lib instantiate
PietteTech_DHT DHT(DHTPIN, DHTTYPE, dht_wrapper);
Timer timer1(2000, Atualiza);             // Tempo e Rotina do Temporizador
ApplicationWatchdog wd(60000, System.reset);
//Canais Virtuais do Blynk
WidgetBridge bridge1(V0);                 // Canal Virtual da Ponte
void setup()
{
    Serial.begin(115200);                      // Inicia a Serial
    delay(50);
    WiFi.on();                               // Liga a Módulo WiFi com as credenciais pré definidas
    delay(50);
    WiFi.connect();                          // Conecta à Rede WiFi
    pinMode(LStatus, OUTPUT);                // Indica que é saída
    pinMode(D0, OUTPUT);                // Indica que é saída
    pinMode(D2, OUTPUT);                // Indica que é saída
    pinMode(D3, OUTPUT);                // Indica que é saída
    pinMode(D4, OUTPUT);                // Indica que é saída
    pinMode(D5, OUTPUT);                // Indica que é saída
    pinMode(D6, OUTPUT);                // Indica que é saída
    pinMode(A1, OUTPUT);                // Indica que é saída
    pinMode(A2, OUTPUT);                // Indica que é saída
    pinMode(A3, OUTPUT);                // Indica que é saída
    pinMode(A4, OUTPUT);                // Indica que é saída
    pinMode(A5, OUTPUT);                // Indica que é saída
    pinMode(DAC, OUTPUT);                // Indica que é saída
    pinMode(WKP, OUTPUT);                // Indica que é saída
    digitalWrite(D0, LOW);             // Desliga Saída 
    digitalWrite(D2, LOW);             // Desliga Saída 
    digitalWrite(D3, LOW);             // Desliga Saída 
    digitalWrite(D4, LOW);             // Desliga Saída 
    digitalWrite(D5, LOW);             // Desliga Saída 
    digitalWrite(D6, LOW);             // Desliga Saída 
    digitalWrite(A1, LOW);             // Desliga Saída 
    digitalWrite(A2, LOW);             // Desliga Saída 
    digitalWrite(A3, LOW);             // Desliga Saída 
    digitalWrite(A4, LOW);             // Desliga Saída 
    digitalWrite(A5, LOW);             // Desliga Saída 
    digitalWrite(DAC, LOW);             // Desliga Saída 
    digitalWrite(WKP, LOW);             // Desliga Saída 
    digitalWrite(LStatus, HIGH);             // Liga Saída
    waitUntil(WiFi.ready);                   // Agaurda conectar a WiFi
    digitalWrite(LStatus, LOW);             // Liga Saída 
    Blynk.begin(auth);                       // Faz Autenticação no Servidor Blynk
    digitalWrite(LStatus, LOW);              // Desliga Saída
    waitUntil(Blynk.connect);                // Agaurda Conectar no Servidor Blink
    timer1.start();                          // Inicia Rotina Temporizador
    delay(50);
}
// This wrapper is in charge of calling
// must be defined like this for the lib work
void dht_wrapper() 
{
    DHT.isrCallback();
}
// Rotinas do Blynk
BLYNK_CONNECTED() 
{
    bridge1.setAuthToken("XXXXXXXXXXXXXXXXXXXXXXXXX");
    if (PrimeiraBlynk) 
    {
        Blynk.syncAll();
        digitalWrite(LStatus, HIGH);             // Liga Saída
        PrimeiraBlynk = false;
    }
}
BLYNK_WRITE(V1)
{  
  if(param.asInt() > 0)
  {
    result = DHT.acquireAndWait(); 
    bridge1.virtualWrite(V19, DHT.getCelsius());
    Blynk.virtualWrite(V1, 0);
  }
}
BLYNK_WRITE(V2)
{  
  if(param.asInt() > 0)
  {
    h1 = (map(analogRead(UmidadePin), 4095, 1900, 0, 10000));
    h2 = h1;
    h2 = h2 / 100;
    bridge1.virtualWrite(V20, h2);
    Blynk.virtualWrite(V2, 0);
  }
}
BLYNK_READ(V3) 
{
  result = DHT.acquireAndWait();
  Blynk.virtualWrite(V3, DHT.getCelsius());
}
BLYNK_READ(V4) 
{
  h1 = (map(analogRead(UmidadePin), 4095, 1900, 0, 10000));
  h2 = h1;
  h2 = h2 / 100;
  Blynk.virtualWrite(V4, h2);
}
BLYNK_READ(V5) 
{
  Blynk.virtualWrite(V5, analogRead(UmidadePin));
}
BLYNK_WRITE(V6)
{  
    if(param.asInt() != 0)
    {
        Particle.connect();
    }  
}
BLYNK_WRITE(V7)
{  
    if(param.asInt() != 0)
    {
        Particle.disconnect();
        digitalWrite(LStatus, LOW);             // Desliga Saída
        //System.reset();
        Blynk.disconnect();
        WiFi.disconnect();
    }  
}
// Temporizadores de algumas funções
void Atualiza()
{
    Particle.publish("Edicula -> Ciclos/ms:", String (System.ticksPerMicrosecond()));
}
void loop()
{
//    if(Particle.connected)Particle.publish("Ciclos/ms:", String (System.ticksPerMicrosecond()), 30);
    Blynk.run();
    wd.checkin();
    if(!WiFi.ready())
    {
        digitalWrite(LStatus, LOW);             // Desliga Saída
        delay(250);
        WiFi.connect();
        delay(500);
    }
    if(WiFi.ready() && !Blynk.connected())
    {
        PrimeiraBlynk = true;
        digitalWrite(LStatus, LOW);             // Desliga Saída
        delay(250);
        Blynk.connect();
        delay(1000);
    }
}

Below is the last code…

Third Second Slave Controller (ESP8266 if Arduino):

   #define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
    #include <ESP8266WiFi.h>
    #include <BlynkSimpleEsp8266.h>
    #include "DHT.h"
    
    const char* ssid     = "tttttttttt";
    const char* password = "ffffffffff";
    
    int Wifi = LOW;
    bool Primeira = true;
    
    // You should get Auth Token in the Blynk App.
    // Go to the Project Settings (nut icon).
    char auth[] = "ZZZZZZZZZZZZZZZZZZZZZZZZZZ";
    WidgetBridge bridge1(V1);
    
    #define DHTPIN D4     // what digital pin we're connected to
    
    #define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
    DHT dht(DHTPIN, DHTTYPE);
    
    
    void setup()
    {
      Serial.begin(115200);
      delay(10);
    
      Serial.println();
      Serial.println();
      Serial.print("Conectado à ");
      Serial.println(ssid);
      
      WiFi.begin(ssid, password);
      
      while (WiFi.status() != WL_CONNECTED) 
      {
        delay(500);
        Serial.print(".");
      }
    
      Serial.println("");
      Serial.println("WiFi conectado.");  
      Serial.println("Endereço IP: ");
      Serial.println(WiFi.localIP());
      
      WiFi.printDiag(Serial);
    
      Blynk.config(auth);
      delay(250);
     
      pinMode(D0, OUTPUT);
      pinMode(D5, OUTPUT);
      pinMode(D6, OUTPUT);
      pinMode(D7, INPUT);
      digitalWrite(D0, LOW);
      digitalWrite(D5, LOW);
      digitalWrite(D6, LOW);
      // Inicializa o DHT22
      dht.begin();
    }
    
    BLYNK_CONNECTED() 
    {
        bridge1.setAuthToken("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
        if(Primeira && WiFi.status() == WL_CONNECTED)
        {
          Blynk.syncAll();
          Primeira = false;
        }
    }
      
    BLYNK_READ(V6) 
    {
      Blynk.virtualWrite(V6, dht.readHumidity());
    }
    
    BLYNK_READ(V7) 
    {
      Blynk.virtualWrite(V7, dht.readTemperature());
    }
    
    BLYNK_WRITE(V8)
    {  
      if(param.asInt() > 0)
      {
        bridge1.virtualWrite(V12, dht.readTemperature());
        Blynk.virtualWrite(V8, 0);
      }
    }
    BLYNK_WRITE(V9)
    {  
      if(param.asInt() > 0)
      {
        bridge1.virtualWrite(V13, dht.readHumidity());
        Blynk.virtualWrite(V9, 0);
      }
    }
    BLYNK_WRITE(V10)
    {  
      if(param.asInt() > 0)
      {
        digitalWrite(D5, HIGH);
        delay(500);
        digitalWrite(D5, LOW);
        Blynk.virtualWrite(V10, 0);
      }
    }
    
    void loop()
    {
         while (WiFi.status() != WL_CONNECTED) 
         {
            Wifi = HIGH;
            digitalWrite(D0, LOW);
            WiFi.begin(ssid, password);
            delay(2500);
            Serial.print(".");
            digitalWrite(D0, HIGH);   
            delay(1000);  
         }
         if(WiFi.status() == WL_CONNECTED && Wifi == HIGH)
         {
            Primeira = false;
            digitalWrite(D0, LOW);
            delay(500);
            digitalWrite(D0, HIGH);      
            delay(500); 
            digitalWrite(D0, LOW);
            delay(500);
            digitalWrite(D0, HIGH);      
            delay(500); 
            digitalWrite(D0, LOW);
            delay(500);
            digitalWrite(D0, HIGH);      
            delay(500); 
            digitalWrite(D0, LOW);
            delay(500);
            digitalWrite(D0, HIGH);      
            delay(500); 
            digitalWrite(D0, LOW);
            delay(500);
            digitalWrite(D0, HIGH);      
            delay(500);
            digitalWrite(D0, LOW);
            Serial.println("");
            Serial.print("Connectando a ");
            Serial.println(ssid);
            Serial.print("IP: ");
            Serial.println(WiFi.localIP());   
            delay(250);
            digitalWrite(D0, HIGH);
            Wifi = LOW;
        }
        if(WiFi.status() == WL_CONNECTED && !Blynk.connected())
        {
            Primeira = true;
            digitalWrite(D0, LOW);             // Desliga Saída
            delay(250);
            Blynk.connect();
        }
      Blynk.run();
    }

I know they’re big codes, however if you can help I would be very grateful.

Thank you so much, Hugo.

I did take a look, but I’m afraid this is too much code to try to analyse by sight alone. I recommend you remove code to produce the simplest set of programs that still have the problem. We have a much better chance of then tracking down the problem (which could be in the app, in the blynk library or in system firmware.)

@enghugo, you may be better served by posting this in the Blynk community since your code is very Blynk specific.