Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь Зависание ESP8266 с Blynk при старте и отсутствующем WiFI

Тема в разделе "IoT облачные сервисы", создана пользователем stigmat1996, 17 июл 2019.

Метки:
  1. stigmat1996

    stigmat1996 Новичок

    Сообщения:
    2
    Симпатии:
    0
    Помогите решить проблему или дайте ссылку, если уже есть решение.

    У меня ESP8266 nodemcu. Подключил к Blynk все прекрасно работает, данные приходят. Но если при старте нету WiFi, то МК виснет наглухо.

    Копался в теме здесь (Code isn't working without connected Blynk) но решение так и не нашел. Помогите кто может.
     
  2. svs2007m

    svs2007m Читатель

    Сообщения:
    145
    Симпатии:
    11
    Ну для начала Код в студию.
    Или :)
    – Слухай сюда! Положь колдобину со стороны загогулины и два раза дергани за пимпочки. Опосля чего долбани плюхалкой по кувыкалке и, кады чвокнет, – отскочь дальшее, прикинься ветошью и не отсвечивай. Потому как она в энто время шмяк тудыть, сюдыть, ёксель-моксель, ёрш твою медь... Пш-ш-ш! – И ждешь пока остынет. Остыло – подымаесся, вздыхаешь. Осторожненько вздыхаешь, про себя, шобы эта быдла не рванула! И бегишь за угол за пол-литрой. Потому как пронесло!
     
  3. stigmat1996

    stigmat1996 Новичок

    Сообщения:
    2
    Симпатии:
    0
    Код (C):
    1. #include <ESP8266WiFi.h>
    2. #include <ESP8266WiFi.h>
    3.  
    4. #include <BlynkSimpleEsp8266.h>
    5.  
    6. extern "C" {
    7. #include "user_interface.h";
    8. }
    9. #define BLYNK_PRINT_227476896_2 Serial
    10.  
    11. char auth_227476896_2[] = "D75TasbYkeegmH7CVXME66G1c06ceECQ";
    12. unsigned long virt_203190254_1;
    13. float input_OldValue_203190254_1= 0;
    14. bool ESP8266ControllerWifiClient_HRD = 0;
    15. bool ESP8266ControllerWifiClient_status = 1;
    16. bool ESP8266ControllerWifiClient_isDHCP = 1;
    17. bool ESP8266ControllerWifiClient_IsNeedReconect = 0;
    18. bool ESP8266ControllerWifiClient_workStatus = 1;
    19. char ESP8266ControllerWifiClient_SSID[40] = "Xiaomi";
    20. char ESP8266ControllerWifiClient_password[40] = "84veros86wifi";
    21. IPAddress ESP8266ControllerWifiClient_ip(0, 0, 0, 0);
    22. IPAddress  ESP8266ControllerWifiClient_dns (0, 0, 0, 1);
    23. IPAddress  ESP8266ControllerWifiClient_gateway (0, 0, 0, 1);
    24. IPAddress ESP8266ControllerWifiClient_subnet (255, 255, 255, 0);
    25. uint8_t ESP8266ControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
    26. bool _gtv1;
    27. bool _gen1I = 0;
    28. bool _gen1O = 0;
    29. unsigned long _gen1P = 0UL;
    30. bool _gen2I = 0;
    31. bool _gen2O = 0;
    32. unsigned long _gen2P = 0UL;
    33. bool _count1I = 0;
    34. unsigned long _count1_Value = 0UL;
    35. void setup()
    36. {
    37. WiFi.mode(WIFI_STA);
    38. _esp8266WifiModuleClientReconnect();
    39. pinMode(2, OUTPUT);
    40.  
    41.   Serial.begin(115200);
    42.    Blynk.begin(auth_227476896_2, ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
    43. Blynk.connect();
    44. int mytimeout = millis() / 1000;
    45. while (Blynk.connect() == false) {
    46.   if((millis() / 1000) > mytimeout + 8){  // try for less than 9 seconds
    47.     break;
    48.   }
    49. }
    50.  
    51.  
    52.  
    53.  
    54.  
    55. }
    56. void loop()
    57. {if(ESP8266ControllerWifiClient_IsNeedReconect) {_esp8266WifiModuleClientReconnect(); ESP8266ControllerWifiClient_IsNeedReconect = 0; }
    58. ESP8266ControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
    59. if (ESP8266ControllerWifiClient_status) { if ( ! ESP8266ControllerWifiClient_HRD) { ESP8266ControllerWifiClient_ip =  WiFi.localIP();
    60. ESP8266ControllerWifiClient_subnet =  WiFi.subnetMask();
    61. ESP8266ControllerWifiClient_gateway =  WiFi.gatewayIP();
    62. ESP8266ControllerWifiClient_dns =  WiFi.dnsIP();
    63. WiFi.macAddress(ESP8266ControllerWifiClient_mac);
    64. ESP8266ControllerWifiClient_HRD = 1;
    65. }} else {ESP8266ControllerWifiClient_HRD = 0;}
    66.  
    67.  
    68.  
    69.  
    70.  
    71. //Плата:1
    72. _gtv1 = ESP8266ControllerWifiClient_status;
    73. if (1) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
    74. if (_gen2I) {  if ( _isTimer ( _gen2P , 500 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
    75. digitalWrite(2, !(_gen2O));
    76.  
    77. //Плата:2
    78. if (_gtv1 == 1) {
    79. {
    80.   if(Blynk.connect() == true){
    81.     Blynk.run();
    82.   }
    83. }
    84. }
    85.  
    86. //Плата:3
    87. if (_gtv1 == 1) {
    88. if (1) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
    89. if (_gen1I) {  if ( _isTimer ( _gen1P , 500 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
    90. if (_gen1O){
    91. if ( ! _count1I) {
    92. _count1I = 1;
    93. _count1_Value = _count1_Value + 1;
    94. }} else {
    95. _count1I = 0;}
    96. virt_203190254_1 = _count1_Value;
    97.  
    98.   Send_203190254_1();
    99. }
    100.  
    101.  
    102.  
    103.  
    104. }
    105. bool _isTimer(unsigned long startTime, unsigned long period )
    106.   {
    107.   unsigned long currentTime;
    108. currentTime = millis();
    109. if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
    110.   }
    111. void Send_203190254_1()
    112. {
    113.  
    114.     if(virt_203190254_1 != input_OldValue_203190254_1)
    115.     {
    116.         Blynk.virtualWrite(V0, virt_203190254_1);
    117.         input_OldValue_203190254_1 = virt_203190254_1;
    118.     }
    119.  
    120. }
    121. int hexStrToInt(String instring)
    122. {
    123.   byte len = instring.length();
    124.   if  (len == 0) return 0;
    125.   int result = 0;
    126.   for (byte i = 0; i < 8; i++)   // только первые 8 цыфар влезуть в uint32
    127.   {
    128.     char ch = instring[i];
    129.     if (ch == 0) break;
    130.     result <<= 4;
    131.     if (isdigit(ch))
    132.       result = result | (ch - '0');
    133.     else result = result | (ch - 'A' + 10);
    134.   }
    135.   return result;
    136. }
    137. void _esp8266WifiModuleClientReconnect()
    138. {
    139. if( _checkMacAddres(ESP8266ControllerWifiClient_mac)) {  wifi_set_macaddr(0, const_cast<uint8*>(ESP8266ControllerWifiClient_mac));}
    140. if( ESP8266ControllerWifiClient_isDHCP) { WiFi.config(0U, 0U, 0U, 0U, 0U); } else {
    141. WiFi.config(ESP8266ControllerWifiClient_ip, ESP8266ControllerWifiClient_gateway, ESP8266ControllerWifiClient_subnet, ESP8266ControllerWifiClient_dns , ESP8266ControllerWifiClient_dns );
    142. }
    143. WiFi.begin(ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
    144. }
    145. bool _checkMacAddres(byte array[])
    146. {
    147.   bool result = 0;
    148.   for (byte i = 0; i < 6; i++)
    149.   {
    150.     if (array[i] == 255) {
    151.       return 0;
    152.     }
    153.     if (array[i] > 0 ) {
    154.       result = 1;
    155.     }
    156.   }
    157.   return result;
    158. }
     
  4. svs2007m

    svs2007m Читатель

    Сообщения:
    145
    Симпатии:
    11
    Несколько "'экзотическое" подключение к облачному серверу Blynk.
    1. В базовых примерах да и по жизни с первого раза к нему конектится --- while зачем ? Может лучше по таймерам
    типа
    Код (Text):
    1.  
    2. void setup()  {
    3. timer.setInterval(30000L, reconnectBlynk);   // проверяем каждые ... секунд, если подключение к серверу Blynk
    4. //....
    5. }
    6. //----------
    7. void loop() {
    8.   if (Blynk.connected()) Blynk.run();        // Запуск Blynk
    9. //.....
    10. }
    11. //----------
    12. void reconnectBlynk() {                    // функция проверяет соединение с сервером Blynk
    13.   if (!Blynk.connected()) {            
    14.     if (Blynk.connect())                
    15.       BLYNK_LOG("Reconnected");            // выводим в лог
    16.     else
    17.       BLYNK_LOG("Not reconnected");    
    18.   }
    19. }
    2. А ошибки после удачной компиляции НО зависанию МК можно глянуть через утилиту


    3. Работа МК без подключения WiFi здесь осуждалась и не раз. Поиск в пощь )
     

Поделиться этой страницей