[SOLVED] Problem with bridge widget

Hi to all!
I have 3 device: main on arduino mega,2-uno,3-esp 8266.When i press the button on my arduino mega,on uno should trigger a relay.I use bridge widget.But when i turn on mega(bridge widget run on mega)?another one device(UNO) permanently loses connection and relay and the relay constantly works,even if the button is not pressed.I use the locall server/
Добрый день!У меня есть три устройства.Главное ардуино мега,второе уно и третье есп 8266.Мне надо при нажатии кнопки,подключенной к ардуино мега, срабатывало реле на ардуино уно.Я использую для этого виджет bridge,запущенный на меге.Но когда я включаю мегу,уно начинает переодически отваливаться и опять подключаться и реле на ней периодически срабатывает независимо от того,нажималась кнопка или нет.Сервер локальный.Помогите разобраться))

// пин А6 датчик газа
// пин 4  SD карта на шилде
// пин 5  свет в спальне
// пин 7  DS термометр
// пин 10 ETHERNET SHILD
// пин 17 DHT11 ванная
// пин 18 DHT11 спальня
// пин 19 DHT11 кухня
// пин 20 SDA I2C
// пин 21 SCL I2C
// пин 22 LCD
// пин 23 LCD
// пин 24 LCD
// пин 25 LCD
// пин 26 LCD
// пин 27 LCD
// пин 28 калитка
// пин 38 пищалка
// пин 44 вентилятор в ванной
// пин 42 кнопка
// пин 48 дежурный свет
// пин 49 свет на доме
// пин 53 ETHERNET SHILD
//#define BLYNK_PRINT Serial
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal.h>
#include "RTClib.h"//ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ
#include <OneWire.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
#include "DHT.h"
#include <SimpleTimer.h>
#define DHTPIN 19 //кухня
#define DHTPIN3 18 // спальня
#define DHTPIN2 17  //ванная
#define W5100_CS  10 //ethernet модуль
#define SDCARD_CS 4 // сд карта
#define DHTTYPE DHT11 
//   RS 22, E23, DB4 24, DB5 25, DB6 26, DB7 27
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
RTC_DS3231 rtc; //Создаем переменную для использования RTC 
const int analogInPin = A6; // датчик газа
Adafruit_BMP085 bmp; // барометр
int sensorValue = 0; // переменная для хранения значения датчика газа
int p = 38; //переменная пищалки
int lcdstate=0;//переменная для вывода инфы на экран
int pr ; //давление
int tmp ;//температура на улице
int alt ;
int t ;//температура кухня
int h ;//влажность кухня
int Temp ;//температура трубы
int t3;//температура в спальне
int h3;//влажность в спальне
int t2;//температура в ванной
int h2;//влажность в ванной
bool button_state = false;
uint32_t ms_button = 0;
WidgetLED led2(V0);
WidgetLED led3(V13);
WidgetLED led4(V20);
WidgetBridge bridge1(V21);
OneWire ds(7); // на пине 7 термометр (нужен резистор 4.7 КОм) 
DHT dhta(DHTPIN, DHTTYPE); // Создаем объект dhta датчик 1
DHT dhtb(DHTPIN2, DHTTYPE); // Создаем объект dhtb датчик 2
DHT dhtc(DHTPIN3, DHTTYPE); // Создаем объект dhtb датчик 3
SimpleTimer timer;
char auth[] = ***************;// для локального сервера
IPAddress server_ip (**********); // для локального сервера
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress arduino_ip ( **********);
IPAddress dns_ip     (  8,   8,   8,   8);
IPAddress gateway_ip ( ****************);
IPAddress subnet_mask(255, 255, 255,   0);
BLYNK_CONNECTED()
{
   bridge1.setAuthToken("*************");
}

   void sendSensor2()
   {
      t2 = dhtb.readTemperature(); // температура и влажность в ванной
      h2 = dhtb.readHumidity();
      Blynk.virtualWrite(V6, t2);
      Blynk.virtualWrite(V4, h2);
       if (h2>75)
       {
        digitalWrite(44, LOW);
       }
       else  if (h2<65)
       {
        digitalWrite(44, HIGH);
       }
        if (digitalRead(44)==LOW)
        {
         led3.on();
        }
        if (digitalRead(44)==HIGH)
        {
         led3.off();
        }
   }
   void sendSensor()
   {
      sensorValue = analogRead(analogInPin);
      pr = bmp.readPressure()/133.3;
      tmp = bmp.readTemperature()-2;
      alt = bmp.readAltitude(98925);
      t = dhta.readTemperature();
      h = dhta.readHumidity();
      t3 = dhtc.readTemperature(); // температура и влажность в спальне
      h3 = dhtc.readHumidity();
      //чтение температуры с датчика даллас
      byte data[2];
      ds.reset(); 
      ds.write(0xCC);
      ds.write(0x44);
      ds.reset();
      ds.write(0xCC);
      ds.write(0xBE);
      data[0] = ds.read(); 
      data[1] = ds.read();
      Temp = (data[1]<< 8)+data[0];
      Temp = Temp>>4;
      //зажигаем диод на виджете 
        if (digitalRead(49)==LOW)
        {
         led2.on();
         led4.off();
        }
        if (digitalRead(49)==HIGH)
        {
         led2.off();
         led4.on();
        }
       

      Blynk.virtualWrite(V2, tmp);
      Blynk.virtualWrite(V7, t);
      Blynk.virtualWrite(V8, pr);
      Blynk.virtualWrite(V10, alt);
      Blynk.virtualWrite(V5, h);
      Blynk.virtualWrite(V3, sensorValue);
      Blynk.virtualWrite(V12, Temp);
      Blynk.virtualWrite(V9, t3);
      Blynk.virtualWrite(V11, h3);
      
       if (Temp < 30 && tmp < 0)
       {
        Blynk.email("*******@****", "Subject: котел", "Внимание!Котел не горит!");
        tone (p, 1000); //включаем на 1000 Гц
        lcdstate=1;
       }
       else
       {
       lcdstate=0;
       }
              if (sensorValue>500)
       {
        lcdstate=3;
        Blynk.email(*******@*******", "Subject: датчик газа", "Внимание!Превышен порог газа!");
        tone (p, 1000); //включаем на 1000 Гц

       }
       else
       {
         lcdstate=0;
       }
    
       
   
}
void knopka()
{
 if (digitalRead(42) == HIGH)
       {
        lcdstate=2;
        }
       else 
       {
        lcdstate=0;
       } 
        Blynk.virtualWrite(V14, lcdstate);
         noTone(p); 
}
void LCD()
{
  if (lcdstate==0)// обычный экран
  {
       lcd.clear();
       lcd.print("Pr:");
       lcd.print(pr);
       lcd.print("mm ");
       lcd.print( "H:");
       lcd.print(h);
       lcd.print( "%");
       lcd.setCursor(0, 1);
       lcd.print("To:");
       lcd.print(tmp);
       lcd.print(" Tin: ");
       lcd.print(t);
  }
  if (lcdstate==1)// выключение отопления
  {
        lcd.clear();
        lcd.print("OTOPLENIE OFF");
  }
  if (lcdstate==2)// нажатие кнопки
  {
        lcd.clear();
        lcd.print("Teplo:");
        lcd.print(Temp);
        lcd.setCursor(0, 1);
        lcd.print("Metan: ");
        lcd.print(sensorValue);
  }
   if (lcdstate==3)// датчик газа
   {
        lcd.clear();
        lcd.print("CH4: ");
        lcd.print(sensorValue);
   }
}
     void RELE() //включение ночной подсветки
       {
      DateTime now = rtc.now();
      int hours=now.hour();
      if   (hours == 22||hours == 23||hours == 24||hours == 0||hours == 1||hours == 2||hours == 3||hours == 4||hours == 5)
       {
        digitalWrite(48, LOW);
       }
      else
       {
        digitalWrite(48, HIGH);
       }
}
void kalitka()//открытие калитки с домофона
{
  uint32_t ms = millis();
  bool pin_state = digitalRead(28);
   // Фиксируем нажатие кнопки 
  if ( pin_state  == LOW && ( ms - ms_button ) > 100 )
  {
      ms_button  = ms;   
      bridge1.digitalWrite(8, LOW);//открываем калитку
      tone (p, 1000); //включаем на 1000 Гц
      timer.setTimeout(1000, door_close);
   }
   
}
void door_close()
{
  bridge1.digitalWrite(8, HIGH);//закрываем калитку
  noTone(p);
}

// Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях) 
      void setup()
{
//   Serial.begin(9600);
     bmp.begin();
     Wire.begin(); 
     //инициализируем часы  
     rtc.begin(); 
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));  //для настройки часов раскоментировать эту строку
     /* Инициализируем дисплей: 2 строки по 16 символов */
     lcd.begin(16, 2);
     // Инициализируем датчик 1
     dhta.begin(); 
     // Инициализируем датчик 2
     dhtb.begin(); 
     // Инициализируем датчик 3
     dhtc.begin(); 
     Blynk.begin(auth, server_ip, 8442, arduino_ip, dns_ip, gateway_ip, subnet_mask, arduino_mac);
     pinMode(53, OUTPUT); //обьявляем режим работы пина на выход для ethernet шилда
     pinMode(SDCARD_CS, OUTPUT);
     pinMode(48, OUTPUT);
     pinMode(44, OUTPUT);
     pinMode(p, OUTPUT);
     pinMode(42, INPUT);
     pinMode(28, INPUT);// кнопка калитки
     digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card
     digitalWrite(48, HIGH);
     digitalWrite(49, HIGH);
     //Таймеры для войдов
     timer.setInterval(2000L, sendSensor);
     timer.setInterval(4000L, sendSensor2); //для датчика в ванной
     timer.setInterval(60000L, RELE);
     timer.setInterval(1000L, LCD);
     timer.setInterval(200L, kalitka);
     timer.setInterval(200L, knopka);
}
      void loop()
{
      Blynk.run();
      timer.run(); 
}

Use same auth code for all devices and different virtual pins, instead of bridge widget. This is more easy than bridge widget.

thanks, I’ll try

The problem was not in the widget, it’s all right. The problem is that in one function there is too much data from the sensors. I spread the data for different functions and it all worked.
проблема была не в виджете, с ним все в порядке.Проблема в том что в одной функции слишком много данных с датчиков.Я разнес данные по разным функциям и все заработало.Видимо сервер не успевал обрабатывать поток.