Вылетает подключение

Проблема следующего характера есть плата с кристалом 2560. ESP работает как шилд. По таймерах отправляются данные в приложение два таймера 10сек и 30 сек. И включен дебаг блинка. так самое интересное отваливается типа устроиство на ровном месте всегда по разному. может проработать 30 мин может 5. В дебаге ничего. вот последнее что он пишет:

77440] <[06|00|1B|00|00]
[77544] >[00|00|1B|00|C8]
[81615] <[14|00|1C|00|0B]vw[00]7[00]28.600
[81895] <[14|00|1D|00|0B]vw[00]8[00]28.900
[82062] <[14|00|1E|00|0B]vw[00]9[00]28.400
[82226] <[14|00|1F|00|0C]vw[00]10[00]28.700
[82390] <[14|00] [00|0B]vw[00]15[00]0.000
[82553] <[14|00]![00|0C]vw[00]11[00]43.000
[82716] <[14|00]"[00|0C]vw[00]12[00]36.000
[82877] <[14|00]#[00|0C]vw[00]13[00]38.000
[83041] <[14|00]$[00|0C]vw[00]14[00]38.000
[83204] <[14|00]%[00|0B]vw[00]16[00]0.000
[87547] <[06|00]&[00|00]
[87652] >[00|00]&[00|C8]

Ничего понять не могу( контакты обвязка вся отличная ибо другие проекты работали на ура. да и плата заказная с китая т.е. все запаяно отлично. Крч наведите на мысль плиз. Вот весь скетч на всякий случай:

    #define BLYNK_DEBUG
    #define BLYNK_PRINT Serial3
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    #include <ESP8266_Lib.h>
    #include <BlynkSimpleShieldEsp8266.h>
    #include <SimpleModbusMaster.h>
    #include <DS3231.h>
    char auth[] = "74e5a58e5c744d0fa0407a647f022bc9";
    char ssid[] = "ihome";
    char pass[] = "2006vmk2";
    #define EspSerial Serial2
    #define ESP8266_BAUD 115200
    ESP8266 wifi(&EspSerial);

    DS3231  rtc(SDA, SCL);
    Time  t;

    #define baud        9600
    #define timeout     1000
    #define polling     200
    #define retry_count 10
    #define TxEnablePin 4  
    #define TOTAL_NO_OF_REGISTERS 100
    enum {
    PACKET1,
    PACKET2,
    PACKET3,
    PACKET4,
    TOTAL_NO_OF_PACKETS};
    Packet packets[TOTAL_NO_OF_PACKETS];
    unsigned int regs[TOTAL_NO_OF_REGISTERS];
    const uint64_t pipe = 0xF0F1F2F3F4LL;
    RF24 radio(8, 9); // CE, CSN
    //----------------------------------------------ПЕРЕМЕННЫЕ СИСТЕМЫ (НЕ ИЗМЕНЯТЬ!!!!!!!!!!)-------------------------------
    int Protocol[5];  
    int OUTPORT_1=A0;
    int OUTPORT_2=A1;
    int OUTPORT_3=A2;
    int OUTPORT_4=A3;
    int OUTPORT_5=A4;
    int OUTPORT_6=A5;
    int OUTPORT_7=A6;
    int OUTPORT_8=A7;
    int OUTPORT_9=A8;
    int INTPORT_1=41;
    int INTPORT_2=40;
    int INTPORT_3=37;
    int INTPORT_4=36;
    int INTPORT_5=35;
    int INTPORT_6=34;
    int INTPORT_7=33;
    int INTPORT_8=32;
    int INTPORT_9=31;
    int AINTPORT_1=A9;
    int AINTPORT_2=A10;
    int AINTPORT_3=A11;
    int AINTPORT_4=A12;
    int AINTPORT_5=A13;
    int RELAY_1=A14;
    int RELAY_2=26;
    int IND_ST_CP=45;
    int IND_SH_CP=46;
    int IND_DS=44;
    byte IND1=B00000000;
    byte IND2=B00000000;
    byte IND3=B00000000;
    int BUZ=2;
    int LOAD=29;
    //----------------------------------------------ПЕРЕМЕННЫЕ ПОЛЬЗОВАТЕЛЯ----------------------------------------------------
    int PIR_1=0;
    int PIR_2=0;
    int PIR_3=0;
    int PIR_4=0;
    int PIR_5=0;
    int PIR_6=0;
    int PIR_7=0;
    int OUT_1=0;
    int OUT_2=0;
    int OUT_3=0;
    int OUT_4=0;
    int OUT_5=0;
    int OUT_6=0;
    int OUT_7=0;
    int OUT_8=0;
    int OUT_9=0;
    int IN_1=0;
    int IN_2=0;
    int IN_3=0;
    int IN_4=0;
    int IN_5=0;
    int IN_6=0;
    int IN_7=0;
    int IN_8=0;
    int IN_9=0;
    int Rel_1=0;
    int Rel_2=0;
    float TEMP_1=0;
    float TEMP_2=0;
    float TEMP_3=0;
    float TEMP_4=0;
    float TEMP_5=0;
    float TEMP_S=0;
    float HUM_1=0;
    float HUM_2=0;
    float HUM_3=0;
    float HUM_4=0;
    float BAR_1=0;
    int MODE_1=0;
    int MODE_2=0;
    int MODE_3=0;
    int MODE_4=0;
    float WATER_COLD=0;
    float WATER_HOT=0;
    float POWER=0;
    int Flag1=0;
    int Hour=0;
    int Min=0;
    float KWT=0;
    float WaterH=0;
    float WaterC=0;
    int Alarm=0;
    WidgetLED led1(V29);
    WidgetLED led2(V30);
    WidgetLED led3(V31);
    WidgetLED led4(V32);
    BlynkTimer timer;

    BLYNK_WRITE(V0){OUT_1=param.asInt();}                   //Получение статуса света 1
    BLYNK_WRITE(V1){OUT_2=param.asInt();}                   //Получение статуса света 2
    BLYNK_WRITE(V2){OUT_3=param.asInt();}                   //Получение статуса света 3
    BLYNK_WRITE(V3){OUT_4=param.asInt();}                   //Получение статуса света 4
    BLYNK_WRITE(V4){OUT_5=param.asInt();}                   //Получение статуса света 5
    BLYNK_WRITE(V5){OUT_6=param.asInt();}                   //Получение статуса света 6

    BLYNK_WRITE(V18){Rel_1=param.asInt();}                  //Получение статуса Сирены
    BLYNK_WRITE(V24){Rel_2=param.asInt();}                  //Получение статуса Сирены

    void TimerTemp(){
    Blynk.virtualWrite(V7, TEMP_1);                         //Вывод температуры 1
    Blynk.virtualWrite(V8, TEMP_2);                         //Вывод температуры 2
    Blynk.virtualWrite(V9, TEMP_3);                         //Вывод температуры 3
    Blynk.virtualWrite(V10, TEMP_4);                        //Вывод температуры 4
    Blynk.virtualWrite(V15, TEMP_5);}                       //Вывод температуры 5
    void TimerHum(){
    Blynk.virtualWrite(V11, HUM_1);                         //Вывод влажности 1
    Blynk.virtualWrite(V12, HUM_2);                         //Вывод влажности 2
    Blynk.virtualWrite(V13, HUM_3);                         //Вывод влажности 3
    Blynk.virtualWrite(V14, HUM_4);                         //Вывод влажности 4
    Blynk.virtualWrite(V16, BAR_1);}                        //Вывод давления  1
    void blinkLedWidget(){
      if (regs[2]==1)  {led1.on();} else {led1.off();}      //Статус батарейки 1
      if (regs[5]==1)  {led2.on();} else {led2.off();}      //Статус батарейки 2
      if (regs[8]==1)  {led3.on();} else {led3.off();}      //Статус батарейки 3
      if (regs[11]==1) {led4.on();} else {led4.off();}}     //Статус батарейки 4
    void TimerWE(){
    Blynk.virtualWrite(V26, KWT);                           //Вывод килловатт
    Blynk.virtualWrite(V27, WaterH);                        //Вывод г.воды
    Blynk.virtualWrite(V28, WaterC);}                       //Вывод х.воды
    //void TempDS(){
    //Blynk.virtualWrite(V17, TEMP_S);                        //Вывод температуры контроллера
    //DSTEMP();}
    //void TimeDS(){
    //Blynk.virtualWrite(V35, Hour);                          //Вывод часа
    //Blynk.virtualWrite(V36, Min);                           //Вывод минут
    //DSTIME();}

    //----------------------------------------------НАСТРОЙКА ПРИ ЗАПУСКЕ----------------------------------------------------
    void setup() {
    rtc.begin();
    //rtc.setDOW(SUNDAY); 
    //rtc.setTime(16, 02, 0); 
    //rtc.setDate(24, 6, 2018);
    Serial3.begin(9600);
    EspSerial.begin(ESP8266_BAUD);
    Blynk.begin(auth, wifi, ssid, pass);
    pinMode(OUTPORT_1, OUTPUT); 
    pinMode(OUTPORT_2, OUTPUT); 
    pinMode(OUTPORT_3, OUTPUT); 
    pinMode(OUTPORT_4, OUTPUT); 
    pinMode(OUTPORT_5, OUTPUT); 
    pinMode(OUTPORT_6, OUTPUT); 
    pinMode(OUTPORT_7, OUTPUT); 
    pinMode(OUTPORT_8, OUTPUT); 
    pinMode(OUTPORT_9, OUTPUT); 
    pinMode(RELAY_2, OUTPUT); 
    pinMode(INTPORT_1, INPUT_PULLUP); 
    pinMode(INTPORT_2, INPUT_PULLUP); 
    pinMode(INTPORT_3, INPUT_PULLUP); 
    pinMode(INTPORT_4, INPUT_PULLUP); 
    pinMode(INTPORT_5, INPUT_PULLUP); 
    pinMode(INTPORT_6, INPUT_PULLUP); 
    pinMode(INTPORT_7, INPUT_PULLUP); 
    pinMode(INTPORT_8, INPUT_PULLUP); 
    pinMode(INTPORT_9, INPUT_PULLUP); 
    pinMode(IND_ST_CP, OUTPUT);
    pinMode(IND_SH_CP, OUTPUT);
    pinMode(IND_DS, OUTPUT);
    modbus_construct(&packets[PACKET1], 3, READ_HOLDING_REGISTERS, 0, 12, 0);
    modbus_construct(&packets[PACKET2], 2, READ_HOLDING_REGISTERS, 0, 7, 12);
    modbus_construct(&packets[PACKET3], 4, READ_HOLDING_REGISTERS, 0, 3, 19);//PRESET_MULTIPLE_REGISTERS
    modbus_configure(&Serial, baud, SERIAL_8N2, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
    timer.setInterval(15000L, TimerTemp);
    timer.setInterval(30000L, TimerHum);
    //timer.setInterval(5000L, TimeDS);
    //timer.setInterval(10000L, TempDS);
    radio.begin();  
    delay(200);
    radio.setChannel(100); // канал (0-127)
    radio.setDataRate(RF24_1MBPS);     
    radio.setPALevel(RF24_PA_HIGH);   
    radio.openReadingPipe(1,pipe);                                                              
    radio.startListening(); 
    }
    //---------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------
    //----------------------------------------------ОСНОВНОЙ ЦИКЛ----------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------
    void loop() {
    Blynk.run();
    timer.run();
    digitalWrite(LOAD,HIGH);
    modbus_update();

    if (radio.available()){ radio.read(&Protocol, sizeof(Protocol));
    if (Protocol[0]==556){TEMP_5=Protocol[1]; BAR_1=Protocol[2]; TEMP_5=TEMP_5/10; BAR_1=BAR_1/10;} //Данные с в.датчика температуры
    if (Protocol[0]==333){KWT=Protocol[1];}                                                         //Данные с в.датчика эл.энергии
    if (Protocol[0]==444){WaterH=Protocol[1]; WaterC=Protocol[2];}}                                 //Данные с в.датчика воды

    TEMP_1=regs[0];
    TEMP_2=regs[3];
    TEMP_3=regs[6];
    TEMP_4=regs[9];
    TEMP_1=TEMP_1/10;
    TEMP_2=TEMP_2/10;
    TEMP_3=TEMP_3/10;
    TEMP_4=TEMP_4/10;
    HUM_1=regs[1];
    HUM_2=regs[4];
    HUM_3=regs[7];
    HUM_4=regs[10];
    PIR_1=regs[12];
    PIR_2=regs[13];
    PIR_3=regs[14];
    PIR_4=regs[15];
    PIR_5=regs[16];
    PIR_6=regs[17];
    PIR_7=regs[18];

    if (digitalRead(INTPORT_1)==0) {IN_1=1;} else {IN_1=0;}
    if (digitalRead(INTPORT_2)==0) {IN_2=1;} else {IN_2=0;}
    if (digitalRead(INTPORT_3)==0) {IN_3=1;} else {IN_3=0;} 
    if (digitalRead(INTPORT_4)==0) {IN_4=1;} else {IN_4=0;}
    if (digitalRead(INTPORT_5)==0) {IN_5=1;} else {IN_5=0;}
    if (digitalRead(INTPORT_6)==0) {IN_6=1;} else {IN_6=0;}
    if (digitalRead(INTPORT_7)==0) {IN_7=1;} else {IN_7=0;}
    if (digitalRead(INTPORT_8)==0) {IN_8=1;} else {IN_8=0;}
    if (digitalRead(INTPORT_9)==0) {IN_9=1;} else {IN_9=0;}
    //if (OUT_1==1) {analogWrite(OUTPORT_1,255);} else {analogWrite(OUTPORT_1,0);}
    //if (OUT_2==1) {analogWrite(OUTPORT_2,255);} else {analogWrite(OUTPORT_2,0);}
    //if (OUT_3==1) {analogWrite(OUTPORT_3,255);} else {analogWrite(OUTPORT_3,0);}
    //if (OUT_4==1) {analogWrite(OUTPORT_4,255);} else {analogWrite(OUTPORT_4,0);}
    //if (OUT_5==1) {analogWrite(OUTPORT_5,255);} else {analogWrite(OUTPORT_5,0);}
    //if (OUT_6==1) {analogWrite(OUTPORT_6,255);} else {analogWrite(OUTPORT_6,0);}
    //if (OUT_7==1) {analogWrite(OUTPORT_7,255);} else {analogWrite(OUTPORT_7,0);}
    //if (OUT_8==1) {analogWrite(OUTPORT_8,255);} else {analogWrite(OUTPORT_8,0);}
    //if (OUT_9==1) {analogWrite(OUTPORT_9,255);} else {analogWrite(OUTPORT_9,0);}
    if (Rel_1==1) {analogWrite(RELAY_1,255);} else {analogWrite(RELAY_1,0);}
    if (Rel_2==1) {digitalWrite(RELAY_2,HIGH);} else {digitalWrite(RELAY_2,LOW);}

    //Вкл/откл света-------------------------------------------------------------------------------------------------------------------------------
    if (OUT_1==1) {OnOffLivolo(OUTPORT_1);}
    if (OUT_2==1) {OnOffLivolo(OUTPORT_2);}
    if (OUT_3==1) {OnOffLivolo(OUTPORT_3);}
    if (OUT_4==1) {OnOffLivolo(OUTPORT_4);}
    if (OUT_5==1) {OnOffLivolo(OUTPORT_5);}
    if (OUT_6==1) {OnOffLivolo(OUTPORT_6);}
    if (OUT_7==1) {OnOffLivolo(OUTPORT_7);}

    IND_UPDATE();
    digitalWrite(LOAD,LOW);
    }
    //---------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------
    //---------------------------------------------------------------------------------------------------------------

    //Функция включение/отключения света------------------------------------------------------------------------------------------------------------
    void OnOffLivolo (int Butt){
      analogWrite(Butt,255);
      delay(100);
      analogWrite(Butt,0);}
    //-----------------------------------------ВЫВОД ИНДИКАЦИИ-------------------------------------------------------
    void IND_UPDATE(){
    //Выходные порты
    if (OUT_1==1){IND3 |= (1 << 3);} else {IND3 &= ~(1 << 3);}
    if (OUT_2==1){IND3 |= (1 << 1);} else {IND3 &= ~(1 << 1);}
    if (OUT_3==1){IND2 |= (1 << 7);} else {IND2 &= ~(1 << 7);}
    if (OUT_4==1){IND2 |= (1 << 5);} else {IND2 &= ~(1 << 5);}
    if (OUT_5==1){IND2 |= (1 << 3);} else {IND2 &= ~(1 << 3);}
    if (OUT_6==1){IND2 |= (1 << 1);} else {IND2 &= ~(1 << 1);}
    if (OUT_7==1){IND1 |= (1 << 7);} else {IND1 &= ~(1 << 7);}
    if (OUT_8==1){IND1 |= (1 << 5);} else {IND1 &= ~(1 << 5);}
    if (OUT_9==1){IND1 |= (1 << 3);} else {IND1 &= ~(1 << 3);}
    //Входные порты
    if (IN_1==1) {IND3 |= (1 << 2);} else {IND3 &= ~(1 << 2);}
    if (IN_2==1) {IND3 |= (1 << 0);} else {IND3 &= ~(1 << 0);}
    if (IN_3==1) {IND2 |= (1 << 6);} else {IND2 &= ~(1 << 6);}
    if (IN_4==1) {IND2 |= (1 << 4);} else {IND2 &= ~(1 << 4);}
    if (IN_5==1) {IND2 |= (1 << 2);} else {IND2 &= ~(1 << 2);}
    if (IN_6==1) {IND2 |= (1 << 0);} else {IND2 &= ~(1 << 0);}
    if (IN_7==1) {IND1 |= (1 << 6);} else {IND1 &= ~(1 << 6);}
    if (IN_8==1) {IND1 |= (1 << 4);} else {IND1 &= ~(1 << 4);}
    if (IN_9==1) {IND1 |= (1 << 2);} else {IND1 &= ~(1 << 2);}
    //Статус реле
    if (Rel_1==1){IND1 |= (1 << 1);} else {IND1 &= ~(1 << 1);}
    if (Rel_2==1){IND1 |= (1 << 0);} else {IND1 &= ~(1 << 0);}
    digitalWrite(IND_ST_CP, LOW);
    shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND1);
    shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND2);
    shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND3);
    digitalWrite(IND_ST_CP, HIGH);  }
    //-----------------------------------------ОПРОС DS3231-------------------------------------------------------
    void DSTIME(){
    t = rtc.getTime();
    Hour=t.hour;
    Min=t.min;}
    void DSTEMP(){
    TEMP_S=rtc.getTemp();}

Заметил такую особенность. Если я через приложение на смартфоне не подключаюсь к серверу блинк то все пашет без зависаний. Что это может быть? И еще вопрос какие задержки допускаются в блинке? И сколько таймеров можно использовать и по сколько значений читать можно одновременно? А то чет информации мало очень. Платформа классная, но из за этих нюансов хз как использовать блинк если переменных порядка 30. Заранее спасибо.

Проверил еще раз все так и есть виснет в рандоме по времени только если приложение подключено к серверу. т.е. если не запущено то все норм опрашивается и работает, ка ктолько запускаю приложение блинк то все через мин 10 где то виснет намертво скетч сам в МК. что за х…ня ппц((((

Проверьте все ли принимающие виджеты установлены в PUSH режим в параметре reading frequency

Да вроде перестало вылетать. Можете пояснить почему? Я просто по таймерам запихивал туда данные и думал что в виджетах надо скорость опроса ставить на то время которое в таймерах прописано у меня. Просто не совсем понимаю механику работы этого поля тогда. Для чего оно? Что подразумевается под словом PUSH.

Есть два способа передачи значения

  1. pull - сервак опрашивает железку в заданный интервал. Вызывается (при наличии) функция BLYNK_READ(). Интервал указывается в настройках виджета.
  2. push - железка самостоятельно (например с помощью таймера) периодически отправляет данные на сервак.

http://docs.blynk.cc/#blynk-main-operations-get-data-from-hardware

Еще тут:

А какой из этих вариантов меньше всего нагружает железку? Чисто по функционалу и по памяти?

Слабое место ESP8266 - networking нагрузка. По-этому я бы рекомендовал push.

Ок спасибо. буду пробовать организовать так через таймеры и push

1 Like