[SOLVED] Constant Disconnects: Arduino Mega + ESP2866 + Relays Board

Greetings,
I’ve been reading a lot here but I can«t manage to find a solution to my problem…

I’m new to Blynk and Arduino and my project was going fine but suddenly it just keeps disconnecting every 5 seconds.
I’ve been trying lots of things to fix it for the past 2 weeks but it doesn’t seem to work.

Would any of you guys lend me a hand fixing this?


#include <ESP8266_Lib.h> //INCLUSÃO DE BIBLIOTECA
#include <BlynkSimpleShieldEsp8266.h> //INCLUSÃO DE BIBLIOTECA
//#include <SoftwareSerial.h>

//SoftwareSerial EspSerial(15, 14); //PINOS QUE EMULAM A SERIAL (PINO 10 É O RX E PINO 11 É O TX)
#define EspSerial Serial3

char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxx";
char ssid[] = "ZAP-ABC0"; //VARIÁVEL QUE ARMAZENA O NOME DA REDE SEM FIO EM QUE VAI CONECTAR
char pass[] = "437fad4f1857"; //VARIÁVEL QUE ARMAZENA A SENHA DA REDE SEM FIO EM QUE VAI CONECTAR

const int pinoRele1 = 2;  //APARTAMENTO AP, 2 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 1
const int pinoRele2 = 3;  //APARTAMENTO AQ, 2 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 2
const int pinoRele3 = 4;  //APARTAMENTO AR, 2 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 3
const int pinoRele4 = 5;  //APARTAMENTO AS, 2 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 4
const int pinoRele5 = 6;  //APARTAMENTO AT, 3 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 5
const int pinoRele6 = 7;  //APARTAMENTO AU, 3 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 6
const int pinoRele7 = 8;  //APARTAMENTO AV, 3 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 7
const int pinoRele8 = 9;  //APARTAMENTO AW, 3 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 8
const int pinoRele9 = 10; //APARTAMENTO AX, 4 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 9
const int pinoRele10 = 11; //APARTAMENTO AY, 4 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 10
const int pinoRele11 = 12; //APARTAMENTO AZ, 4 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 11
const int pinoRele12 = 13; //APARTAMENTO BA, 4 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 12
const int pinoRele13 = 22; //APARTAMENTO BB, 5 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 13
const int pinoRele14 = 23; //APARTAMENTO BC, 5 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 14
const int pinoRele15 = 24; //APARTAMENTO BD, 5 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 15
const int pinoRele16 = 25; //APARTAMENTO BE, 5 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 16
const int pinoRele17 = 26; //APARTAMENTO BF, 6 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 17
const int pinoRele18 = 27; //APARTAMENTO BG, 6 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 18
const int pinoRele19 = 28; //APARTAMENTO BH, 6 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 19
const int pinoRele20 = 29; //APARTAMENTO BI, 6 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 20
const int pinoRele21 = 30; //APARTAMENTO BJ, 7 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 21
const int pinoRele22 = 31; //APARTAMENTO BK, 7 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 22
const int pinoRele23 = 32; //APARTAMENTO BL, 7 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 23
const int pinoRele24 = 33; //APARTAMENTO BM, 7 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 24
const int pinoRele25 = 34; //APARTAMENTO BN, 8 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 25
const int pinoRele26 = 35; //APARTAMENTO BO, 8 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 26
const int pinoRele27 = 36; //APARTAMENTO BP, 8 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 27
const int pinoRele28 = 37; //APARTAMENTO BQ, 8 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 28
const int pinoRele29 = 38; //APARTAMENTO BR, 9 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 29
const int pinoRele30 = 39; //APARTAMENTO BS, 9 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 30
const int pinoRele31 = 40; //APARTAMENTO BT, 9 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 31
const int pinoRele32 = 41; //APARTAMENTO BU, 9 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 32
const int pinoRele33 = 42; //APARTAMENTO BV, 10 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 33
const int pinoRele34 = 43; //APARTAMENTO BW, 10 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 34
const int pinoRele35 = 44; //APARTAMENTO BX, 10 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 35
const int pinoRele36 = 45; //APARTAMENTO BY, 10 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 36
const int pinoRele37 = 46; //APARTAMENTO BZ, 11 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 37
const int pinoRele38 = 47; //APARTAMENTO CA, 11 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 38
const int pinoRele39 = 48; //APARTAMENTO CB, 11 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 39
const int pinoRele40 = 49; //APARTAMENTO CC, 11 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 40
const int pinoRele41 = 50; //APARTAMENTO FE, 12 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 41
const int pinoRele42 = 51; //APARTAMENTO FF, 12 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 42
const int pinoRele43 = 52; //APARTAMENTO FG, 12 PISO. DIGITAL UTILIZADO PELO MÓDULO RELÉ 43

#define ESP8266_BAUD 115200

ESP8266 wifi(&EspSerial); //PASSO OS PARÂMETROS PARA A FUNÇÃO

void setup(){
  pinMode(pinoRele1, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele2, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele3, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele4, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele5, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele6, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele7, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele8, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele9, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele10, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele11, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele12, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele13, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele14, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele15, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele16, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele17, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele18, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele19, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele20, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele21, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele22, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele23, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele24, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele25, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele26, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele27, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele28, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele29, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele30, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele31, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele32, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele33, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele34, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele35, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele36, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele37, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele38, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele39, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele40, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele41, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele42, OUTPUT); //DECLARA O PINO COMO SAÍDA
  pinMode(pinoRele43, OUTPUT); //DECLARA O PINO COMO SAÍDA
  
  EspSerial.begin(ESP8266_BAUD); //INICIA A COMUNICAÇÃO COM A TAXA INFORMADA NO ESP8266_BAUD
  delay(10); //INTERVALO DE 10 MILISSEGUNDOS
  
  Blynk.begin(auth, wifi, ssid, pass); //INICIALIZA A COMUNICAÇÃO BLYNK INFORMANDO OS PARÂMETROS

  digitalWrite(pinoRele1, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele2, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele3, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele4, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele5, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele6, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele7, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele8, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele9, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele10, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele11, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele12, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele13, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele14, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele15, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele16, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele17, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele18, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele19, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele20, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele21, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele22, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele23, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele24, HIGH); //RELÉ INICIA DESLIGADO  
  digitalWrite(pinoRele25, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele26, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele27, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele28, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele29, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele30, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele31, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele32, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele33, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele34, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele35, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele36, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele37, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele38, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele39, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele40, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele41, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele42, HIGH); //RELÉ INICIA DESLIGADO
  digitalWrite(pinoRele43, HIGH); //RELÉ INICIA DESLIGADO
}

void loop(){
  Blynk.run(); //INICIALIZA O BLYNK

}

I’d start by looking at your power supply.
You need a decent supply for your Arduino/ESP combination, and a separate supply (with shared ground) for your relay board.

Pete.

I highly recommend a separate PSU for the ESP itself as well…

And the Arduino Mega can only supply a finite total current. who knows what flipping all those relays at the same time might do if they are not using opto isolation… even then… read this and compare to the total current needs to activate a relay digital input (not to be confused with the coil current draw… that MUST be on a separate PSU.

https://playground.arduino.cc/Main/ArduinoPinCurrentLimitations

1 Like

Thanks for your feedback, I’ve though of this too but I’m powering the relays from another PSU.
Also, with the relays powered off I’m getting the disconnects.

I just noticed that the serial console is stuck on “Redirecting to 45.55.96.146:80” so I’ve tried setting router port forwards to my ESP and it worked for a full 5minutes without disconnecting. I unplugged the Mega from the PC, restarted it and it is now disconnecting every 5seconds again.

I’m getting so frustrated…

In the debug console, it keeps sending the auth token and everytime it does that, in the Blynk App my project goes online for a tenth of a second and then goes back to offline.

Here is the debug console output:

[6778] Connected to WiFi
[16926] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[17041] >)[00|01|00|0F]
[17041] >45.55.96.146[00]80
[17042] Redirecting to 45.55.96.146:80
[22264] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[32726] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[43187] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[53545] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[63906] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[74369] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[84830] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX
[95291] <[02|00|01|00] XXXXXXXXXXXXXXXXXXXXXXXXXX

Where XXXXXXXXXXXXXXXXXXXXXXXXXX is my auth token.

Any ideas?

I sorted it out!!

I’m just leaving this here so that anyone else having this problem (I’ve seen quite a few people complaining about this and no real answers were given) can solve their problem.

As I found out, the problem wasn’t the code, nor was it the PSU for the components of my project (even though I had spent two weeks going insane convinced that was the case).

The problem was that Blynk Servers weren’t accepting my connection. No idea why…

I instaled a local server on a spare Raspberry Pi Zero W and EUREKA! everything started flawlessy.
In fact, I find that pressing buttons is so much quicker (on mobile data).

So that’s the end of it. I did not go insane.

Soooo many reasons… ISP port blocking, bad networking, incorrect IP used for region, incorrect port, error in AUTH… etc… etc… ad nauseum… that is why there seems to be no “real answers” … there is in fact many valid answers :slight_smile:

Glad you got Local Server working… it has many challenges (getting it to work seamlessly when you are transitioning from home and out and about for one), but great benefits including full account control and much reduced latency :slight_smile: