Disconnects(packet too big)

1 Robodyn Mega2560 WIFI(Mega+ESP8266)
2.Android 9 + Blynk 2.27.5
3.Local Server 0.41.2-java8 on windows 10
4.Blynk Library 0.6.1
5. ESP SDK 1.5.4

I have a problem with a smart home project.
Many sensors are connected to Arduino, which successfully work with the blink, but reconnections to the server occur and the relay control button does not work. The relay is dual, controls light and ventilation, ventilation switches on when a high gas content is detected, or if a flame is present, the light turns on through a button in the application and works depending on the lighting. If the light through the button is turned on, it works as expected: it turns off during the day, turns on at night, but if it is turned on at night and I turn it off with the button, then nothing happens (except disconnect). Without the server side, everything is stable.

  • На русском:

У меня есть проблема с проектом умного дома.
Подключено много датчиков к ардуино, которые успешно работают с блинк, но происходят переподключения к серверу и не работает кнопка упрвления реле. Реле двойное, управляет светом и вентиляцией, вентиляция включается при обнаружении высокого содержания газа, либо при наличии пламени, свет включается через кнопку в приложении и работает в зависимости от освещения. Если свет через кнопку включен, то он работает как положено: днем выключается, ночью включается, но если он включен ночью и я его выключаю с помощью кнопки, то ничего не происходит( кроме дисконнекта). Без серверной части все работает стабильно.

>  [44]
> 
> ___  __          __
>     / _ )/ /_ _____  / /__
>    / _  / / // / _ \/  '_/
>   /____/_/\_, /_//_/_/\_\
>          /___/ v0.6.1 on Arduino Mega
> 
>  [550] Connecting to dlink
>  [3600] AT version:1.1.0.0(May 11 2016 18:09:56)
>  SDK version:1.5.4(baaeaebb)
>  Ai-Thinker Technology Co. Ltd.
>  Jun 13 2016 11:29:20
>  OK
>  [6665] +CIFSR:STAIP,"192.168.0.101"
>  +CIFSR:STAMAC,"2c:3a:e8:26:02:06"
>  [6665] Connected to WiFi
>  [16839] Ready (ping: 13ms).
>  [21576] Packet too big: 17452
>  [33374] Ready (ping: 3681ms).
>  [33414] Packet too big: 30322
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <DHT.h>
char auth[] = "";
char ssid[] = "";
char pass[] = "";
char IP[] = "";
int Relay = 12;
int Relay2 = 11;
int stat = 0;
int lghtPin = 50;
int buzzPin = 13;
int flamePin = 9;
int movePin = 8;
const int analogSignal = A0; //подключение аналогового сигнального пина
int t;
int h;
int Co2Value = 0; //переменная для хранения количества газа
const int analogSignal2 = A1; //подключение аналогового сигнального пина
int CH4Value = 0; //переменная для хранения количества газа
WidgetLED led1(V10); //![FiNtrYv-A3Q|205x500](upload://tesXKP4QpnlfVAXa91SAwx4oa0e.jpeg)  виртуальные пины для индикации датчика пламени и движения
WidgetLED led2(V9);
#define EspSerial Serial1
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
#define DHTPIN 22          // пин DHT
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  { Blynk.virtualWrite(V5, h); //отправка данных с dht22 в приложение
    Blynk.virtualWrite(V6, t);
    delay(1000);
  }
  Co2Value = analogRead(analogSignal); // опрос датчиков газа
  CH4Value = analogRead(analogSignal2);
}

void setup()
[details="Summary"]
This text will be hidden
[/details]

{
  Serial.begin(115200);
  lcd.begin(16, 2);
  EspSerial.begin(ESP8266_BAUD);
  delay(30);
  pinMode(Relay, OUTPUT);
  pinMode(Relay2, OUTPUT);
  Blynk.begin(auth, wifi,  ssid, pass, IP, 8080);
  dht.begin();
  pinMode( analogSignal, INPUT );
  pinMode( flamePin, INPUT );
  pinMode (movePin, INPUT );
  pinMode( buzzPin, OUTPUT );
  pinMode( lghtPin, INPUT );
  timer.setInterval(2000L, sendSensor);
}
BLYNK_WRITE(V1) // задаем виртуальный пин для кнопки управления светом
{ stat = param.asInt();
}
void loop()
{ if (( !digitalRead( lghtPin  )) || (stat == 0)) //управление реле
  {
    digitalWrite( Relay, HIGH );
  }
  else if (stat == 1)
  {
    digitalWrite( Relay, LOW );
  }
  {
    float h = dht.readHumidity(); // код для работы дисплея
    float t = dht.readTemperature();
    {
      lcd.setCursor(0, 1);
      lcd.print("Hum:");
      lcd.println(h);
      lcd.print("%");
      lcd.setCursor(0, 0);
      lcd.print("Temp:");
      lcd.print(t);
      lcd.print("C");
      delay(1000); // задержка 1 сек между считываниями
    }
    { if ( !digitalRead( flamePin ) ) //индикация датчика пламени в приложении
        led2.on();
      else
        led2.off();
      if ( !digitalRead( lghtPin ) )
        Blynk.virtualWrite(V4, "Светло");
      else
        Blynk.virtualWrite(V4, "Темно" );
      CH4Value = analogRead(analogSignal2); /
      if ( !digitalRead( movePin ) ) //индикация датчика движения в приложении
        led1.off();
      else
        led1.on();
      { if ( !digitalRead( flamePin ) || ( ( CH4Value >= 150 ) ) )
          tone(13, 1000);
        else
          noTone(13);
        { if ( !digitalRead( flamePin ) || ( ( CH4Value >= 150 ) ) )
            digitalWrite( Relay2, LOW ); //включение вентиляции
          else
            digitalWrite( Relay2, HIGH );
          Blynk.run();
          timer.run();
        }
      }
    }
  }
}

(old, but working sketch without some functions)

#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <DHT.h>

char auth[] = "";


char ssid[] = "";
char pass[] = "";
char IP[] = "";
int Relay = 12 ;
int stat = 0;
int lghtPin = 8;
int buzzPin = 13;
int flamePin = 9;
int movePin = 51;
const int analogSignal = A0; //подключение аналогового сигналоьного пина


int Co2Value = 0; //переменная для хранения количества газа
const int analogSignal2 = A1; //подключение аналогового сигнального пина

int CH4Value = 0; //переменная для хранения количества газа





#define EspSerial Serial1




#define ESP8266_BAUD 115200

; ESP8266 wifi(&EspSerial);

#define DHTPIN 52          // What digital pin we're connected to


#define DHTTYPE DHT22


DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);

  Co2Value = analogRead(analogSignal);
  Blynk.virtualWrite(V7, Co2Value);
  CH4Value = analogRead(analogSignal2);
  Blynk.virtualWrite(V8, CH4Value);
  Serial.print(Co2Value);



}

void setup()
{

  // Debug console
  Serial.begin(9600);

  // Set ESP8266 baud rate
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
  pinMode(Relay, OUTPUT);
  Blynk.begin(auth, wifi, ssid, pass, IP, 8080);
  dht.begin();
  pinMode( flamePin, INPUT );
  pinMode (movePin, INPUT );
  pinMode( buzzPin, OUTPUT );

  timer.setInterval(1000L, sendSensor);
}
BLYNK_WRITE(V1) //виртуальный пин кнопки
{ stat = param.asInt();
}
void loop()
{ if (!analogRead (Co2Value >= 300))
    tone(buzzPin, 300);
  else
    noTone(buzzPin);
  { if ( !digitalRead( flamePin ) )
      tone(buzzPin, 300);
    else
      noTone(buzzPin);
  }


  {
    if ( !digitalRead( lghtPin ) )
      Blynk.virtualWrite(V4, "Светло"); // информация от датчика света
    else
      Blynk.virtualWrite(V4, "Темно" );


    {
      if (stat == 1)
        digitalWrite( Relay, LOW ); //управление реле
      else
        digitalWrite( Relay, HIGH );

      {
        Blynk.run();
        timer.run();
      }
    }
  }
}

I fixed your post with proper formatting…

Blynk%20-%20FTFC

Now I recommend you fix your void loop()

Your loop should only contain
Blynk.run();
timer.run();

Nothing else!

I have cleaned the void loop, but the compiler started to produce an error:

Arduino: 1.8.9 (Windows 10), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"


sketch_may12b:1:1: error: expected unqualified-id before 'if'

 if (( !digitalRead( lghtPin  )) || (stat == 0)) //управление реле

 ^

sketch_may12b:7:1: error: expected unqualified-id before 'else'

 else if (stat == 1)

 ^

exit status 1
expected unqualified-id before 'if'

New sketch:


#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <DHT.h>
char auth[] = "";
char ssid[] = "";
char pass[] = "";
char IP[] = "";
int Relay = 12;
int Relay2 = 11;
int stat = 0;
int lghtPin = 50;
int buzzPin = 13;
int flamePin = 9;
int movePin = 8;
const int analogSignal = A0; //подключение аналогового сигнального пина
int t;
int h;
int Co2Value = 0; //переменная для хранения количества газа
const int analogSignal2 = A1; //подключение аналогового сигнального пина
int CH4Value = 0; //переменная для хранения количества газа
WidgetLED led1(V10); //  виртуальные пины для индикации датчика пламени и движения
WidgetLED led2(V9);
#define EspSerial Serial1
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
#define DHTPIN 22          // пин DHT
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  { Blynk.virtualWrite(V5, h); //отправка данных с dht22 в приложение
    Blynk.virtualWrite(V6, t);
    delay(1000);
  }
  Co2Value = analogRead(analogSignal); // опрос датчиков газа
  CH4Value = analogRead(analogSignal2);
}

void setup()


{
  Serial.begin(115200);
  lcd.begin(16, 2);
  EspSerial.begin(ESP8266_BAUD);
  delay(30);
  pinMode(Relay, OUTPUT);
  pinMode(Relay2, OUTPUT);
  Blynk.begin(auth, wifi,  ssid, pass, IP, 8080);
  dht.begin();
  pinMode( analogSignal, INPUT );
  pinMode( flamePin, INPUT );
  pinMode (movePin, INPUT );
  pinMode( buzzPin, OUTPUT );
  pinMode( lghtPin, INPUT );
  timer.setInterval(2000L, sendSensor);



float h = dht.readHumidity(); // код для работы дисплея
float t = dht.readTemperature();

lcd.setCursor(0, 1);
lcd.print("Hum:");
lcd.println(h);
lcd.print("%");
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(t);
lcd.print("C");
delay(1000); // задержка 1 сек между считываниями
}
BLYNK_WRITE(V1) // задаем виртуальный пин для кнопки управления светом
{ stat = param.asInt();
}
if (( !digitalRead( lghtPin  )) || (stat == 0)) //управление реле

{
  digitalWrite( Relay, HIGH );
}

else if (stat == 1)

{
  digitalWrite( Relay, LOW );
}

if ( !digitalRead( flamePin ) ) //индикация датчика пламени в приложении
{
  led2.on();
}
else
{
  led2.off();
}
if ( !digitalRead( lghtPin ) )
{
  Blynk.virtualWrite(V4, "Светло");
}
else
{
  Blynk.virtualWrite(V4, "Темно" );
}
if ( !digitalRead( movePin ) ) //индикация датчика движения в приложении
{
  led1.off();
}
else
{
  led1.on();

if ( !digitalRead( flamePin ) || ( ( CH4Value >= 150 ) ) )
{
  tone(13, 1000);
}
else
{
  noTone(13);

}


if ( !digitalRead( flamePin ) || ( ( CH4Value >= 150 ) ) )
{
  digitalWrite( Relay2, LOW ); //включение вентиляции
}

else
{
  digitalWrite( Relay2, HIGH );
}


void loop()
{
  Blynk.run();
  timer.run();
}



Common syntax troubleshooting 101… You seem to have mismatched brackets in the first if() command. Count them and make sure there are matching pairs () where they should be.

Checked, tried to rearrange, the error remained

BLYNK_WRITE(V1) // задаем виртуальный пин для кнопки управления светом
{ stat = param.asInt();
} <------ this one should be a the end of your mutilple if .

else
{
digitalWrite( Relay2, HIGH );
}
} <------- here

The sketch was compiled, but now the ESP reconnects every 2 seconds:

[24019] Ready (ping: 13ms).
[27465] Packet too big: 11081
[37777] Ready (ping: 2069ms).
[37817] Packet too big: 30322
[54813] Ready (ping: 1814ms).
[54853] Packet too big: 30322
[71906] Ready (ping: 1906ms).
[71946] Packet too big: 30322
[88795] Ready (ping: 1714ms).
[88835] Packet too big: 30322
[106760] Ready (ping: 2676ms).
[106800] Packet too big: 30322
[123456] Ready (ping: 1534ms).

not same issue

I read the guide, but did not understand how to make working the code that I removed from the void loop . Without a void loop, the relay does not work, the information on the LСD 1602 is not updated and other functions associated with if else

what is the button for?
a timer must be used to read the sensor and activate the relay.