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

BLYNK и OTA

Тема в разделе "Общие вопросы по esp8266", создана пользователем iG2019, 23 май 2019.

  1. iG2019

    iG2019 Новичок

    Сообщения:
    10
    Симпатии:
    0
    Есть ESP8266 NODEMCU
    заливаю такой скетч
    Код (Text):
    1. #define BLYNK_PRINT Serial
    2. #include <ESP8266WiFi.h>
    3. #include <BlynkSimpleEsp8266.h>
    4. #include <OneWire.h>
    5. #include <DallasTemperature.h>
    6.  
    7. #define ONE_WIRE_BUS D3
    8.  
    9. OneWire oneWire(ONE_WIRE_BUS);
    10. DallasTemperature sensors(&oneWire);
    11.  
    12. BlynkTimer timer;
    13.  
    14. char auth[] = "***************"; //ваш токен  при регистрации в BLYNK
    15. char ssid[] = "*****"; // ваш логин, название домашней сети wifi
    16. char pass[] = "******"; // ваш пароль домашней сети wifi
    17.  
    18. void setup()
    19. {
    20.   Serial.begin(115200);
    21.   Blynk.begin(auth, ssid, pass);
    22.   sensors.begin();
    23.   sensor.setResolution(12);
    24.   timer.setInterval(6000L, sendTemps); // установка времени в милисекундах
    25. }
    26.  
    27. void sendTemps()
    28. {
    29.   sensors.requestTemperatures();
    30.   float temp = sensors.getTempCByIndex(0);
    31.    Serial.println(temp);
    32.   Blynk.virtualWrite(V1, temp);
    33. }
    34.  
    35.   void loop()
    36.   {
    37.     Blynk.run();
    38.     timer.run();
    39.   }
    все нормально работает.
    Как только изменяю код для возможности прошивки по воздуху
    Код (Text):
    1.  
    2. #define BLYNK_PRINT Serial
    3. #include <ESP8266WiFi.h>
    4. #include <ESP8266mDNS.h>
    5. #include <WiFiUdp.h>
    6. #include <ArduinoOTA.h>
    7. #include <BlynkSimpleEsp8266.h>
    8. #include <OneWire.h>
    9. #include <DallasTemperature.h>
    10.  
    11. #define ONE_WIRE_BUS D3
    12.  
    13. OneWire oneWire(ONE_WIRE_BUS);
    14. DallasTemperature sensors(&oneWire);
    15.  
    16. BlynkTimer timer;
    17.  
    18.  
    19. const char* auth = "***"; //ваш токен  при регистрации в BLYNK
    20. const char* ssid = "***";
    21. const char* password = "***";
    22.  
    23. void setup() {
    24.  
    25.   pinMode(LED_BUILTIN, OUTPUT);
    26.   Serial.begin(115200);
    27.   Serial.println("Booting");
    28.   WiFi.mode(WIFI_STA);
    29.   WiFi.begin(ssid, password);
    30.   while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    31.     Serial.println("Connection Failed! Rebooting...");
    32.     delay(5000);
    33.     ESP.restart();
    34.   }
    35.  
    36.   // Hostname defaults to esp8266-[ChipID]
    37.   ArduinoOTA.setHostname("myesp8266");
    38.  
    39.    ArduinoOTA.onStart([]() {
    40.     Serial.println("Start updating ");
    41.   });
    42.   ArduinoOTA.onEnd([]() {
    43.     Serial.println("\nEnd");
    44.   });
    45.   ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    46.     Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
    47.   });
    48.   ArduinoOTA.onError([](ota_error_t error) {
    49.     Serial.printf("Error[%u]: ", error);
    50.     if (error == OTA_AUTH_ERROR) {
    51.       Serial.println("Auth Failed");
    52.     } else if (error == OTA_BEGIN_ERROR) {
    53.       Serial.println("Begin Failed");
    54.     } else if (error == OTA_CONNECT_ERROR) {
    55.       Serial.println("Connect Failed");
    56.     } else if (error == OTA_RECEIVE_ERROR) {
    57.       Serial.println("Receive Failed");
    58.     } else if (error == OTA_END_ERROR) {
    59.       Serial.println("End Failed");
    60.     }
    61.   });
    62.   ArduinoOTA.begin();
    63.   Serial.println("Ready");
    64.   Serial.print("IP address: ");
    65.   Serial.println(WiFi.localIP());
    66.  
    67.   Blynk.begin(auth, ssid, password);
    68.   sensors.begin();
    69.   sensors.setResolution(11);
    70.   timer.setInterval(6000, sendTemps); // установка времени в милисекундах
    71. }
    72.  
    73. void sendTemps()
    74. {
    75.   sensors.requestTemperatures();
    76.   float temp = sensors.getTempCByIndex(0);
    77.   Serial.println(temp);
    78.   Blynk.virtualWrite(V1, temp);
    79.   }
    80.  
    81. void loop() {
    82.   ArduinoOTA.handle();
    83.  
    84. Blynk.run();
    85. timer.run();
    86. }
    87.  
    возникают проблемы с подключением к BLYNK. В консоли постоянно сыпятся сообщения что нет подключения. При этом прошивать по воздуху можно. Что я делаю не так?
     
  2. iG2019

    iG2019 Новичок

    Сообщения:
    10
    Симпатии:
    0
    поменял WiFi.mode(WIFI_STA); на WiFi.mode(WIFI_AP_STA); стало соединяться, но через некоторое время идут дисконнекты
     
  3. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    Код (Text):
    1. #define BLYNK_PRINT Serial
    2. #include <ESP8266WiFi.h>
    3. #include <ESP8266mDNS.h>
    4. #include <WiFiUdp.h>
    5. #include <ArduinoOTA.h>
    6. #include <BlynkSimpleEsp8266.h>
    7. #include <OneWire.h>
    8. #include <DallasTemperature.h>
    9. #define ONE_WIRE_BUS D3
    10. OneWire oneWire(ONE_WIRE_BUS);
    11. DallasTemperature sensors(&oneWire);
    12. BlynkTimer timer;
    13. char auth[] = "*******";   //ваш токен  при регистрации в BLYNK
    14. char ssid[] = "*******";   // ваш логин, название домашней сети wifi
    15. char pass[] = "*******";   // ваш пароль домашней сети wifi
    16. void setup() {
    17.   Serial.begin(115200);
    18.   Blynk.begin(auth, ssid, pass);
    19.   sensors.begin();
    20.   sensors.setResolution(11);
    21.   timer.setInterval(6000, sendTemps);              // установка времени в милисекундах
    22.   timer.setInterval(30000L, reconnectBlynk);       // проверяем каждые 30 секунд, если подключение к серверу Bkynk
    23.   ArduinoOTA.setHostname("My-Project");            //OTA Задаем имя сетевого порта
    24.   ArduinoOTA.setPassword((const char *)"0001");    //OTA Задаем пароль доступа для удаленной прошивки
    25.   ArduinoOTA.begin();                              //OTA Запуск
    26.   Serial.println("Ready");
    27.   Serial.print("IP address: ");
    28.   Serial.println(WiFi.localIP());
    29. }
    30. //------------------
    31. void reconnectBlynk() {                    // функция проверяет соединение с сервером Блинк
    32.   if (!Blynk.connected()) {                // если соединения нет то
    33.     if (Blynk.connect())                   // конектимся
    34.       BLYNK_LOG("Reconnected");            // выводим в лог
    35.     else
    36.       BLYNK_LOG("Not reconnected");        // выводим в лог
    37.   }
    38. } // end
    39. //----------------
    40. void sendTemps() {
    41.   sensors.requestTemperatures();
    42.   float temp = sensors.getTempCByIndex(0);
    43.   Serial.println(temp);
    44.   Blynk.virtualWrite(V1, temp);
    45. }
    46. void loop() {
    47.   ArduinoOTA.handle();
    48.   if (Blynk.connected()) Blynk.run();    // Запуск Blynk
    49.   timer.run();
    50. }
    51.  
     
    Последнее редактирование модератором: 24 май 2019
  4. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    Попробуй так !!!
    И Python настроен по уму ?
     
  5. iG2019

    iG2019 Новичок

    Сообщения:
    10
    Симпатии:
    0
    И что это даст? Если я правильно понял просто идет проверка на соединение с Blynk? В случае его отсутствия идет переподключение? Но меня интересует вопрос почему с ОТА идут разрывы или вообще полное отсутствие соединения, а без него нет?
    При старте ESP в случае отсутствия связи с blynk в порт сыпется :
    Connecting to blynk-cloud.com:80
    Login timeout

    какие должны быть настройки? Я делал так как описано здесь и никаких настроек питона там не производится.
     
  6. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    1. WiFi.mode(WIFI_STA);
    2. WiFi.begin(ssid, password);
    3. while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    4. Serial.println("Connection Failed! Rebooting...");
    5. delay(5000);
    6. ESP.restart();
    7. }
    Если подключаешься к Blynk, то строки выше зачем ?????????????? Blynk cам все сделает. Он настроит сеть, а подключится к серверу или нет дело второе. Просто настройки сети проходят у тебя дважды !

    для прошивки через ОТА кабель от порта нужно отключить, ESP через внешнее питание. И не кабы какое.
     
  7. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.455
    Симпатии:
    173
    Нет такой необходимости, во время прошивки на него будет выводиться информация о ходе прошивки, через ОТА.
     
  8. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    Если не секрет КАКАЯ инфа во время прошивки через ОТА идет на СОМ порт ?
     
  9. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    Да и порт для прошивки выбирается по имени сетевого порта определенного ОТА через Python
     
  10. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
  11. iG2019

    iG2019 Новичок

    Сообщения:
    10
    Симпатии:
    0
    ну все это я делал на основе найденных в сети примеров. Ссылку на один их них привел выше. И сейчас с такими строчками ESP висит на улице и работает как часы, но без OTA !!! А с ОТА либо вообще не коннектится к Blynk либо через пару минут на смартфоне постоянно выскакивает "Сonnected" - " Disconnected", а в мониторе порта ESP или
    Connecting to blynk-cloud.com:80
    Login timeout
    или
    blynk heartbeat timeout.

    Вот и интересует как ОТА влияет на стабильность соединения с сервером Blynk.

    с прошивкой по OTA как раз никаких проблем!!! После заливки через шнур вижу ip-шник, и сетевой порт. Дальше спокойно могу заливать прошивки через ОТА.

    так все-таки что имеется ввиду под настройками Python???
     
  12. nikolz

    nikolz Гуру

    Сообщения:
    4.002
    Симпатии:
    427
    это есть очень плохо.
    может дырка во флешке появиться
    и зачем это цикл с рестартом
    отслеживать подключение надо в колбеке Wifi
    а режимы изменять по условию
    например так:
    if (wifi_get_opmode()!=STATION_MODE) wifi_set_opmode(STATION_MODE);
    тоже самое:
    if (wifi_get_opmode()!=1) wifi_set_opmode(1);
     
  13. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    1. Дружище я уже ИСПРАВИЛ твой скетч (см. выше ) который на 99% работает. Проверил у себя на своем железе !!! Все шьется через ОТА и прекрасно работает. Второй раз и медленно .......... убери настройки WIFI !!!!!!!!! Они входят в конфликт с библиотеками Blynk.
     
  14. iG2019

    iG2019 Новичок

    Сообщения:
    10
    Симпатии:
    0
    Залил ... та же ситуация. Gериодический дисконнект. В мониторе порта:
    Heartbeat timeot
    Connecting to blynk-cloud.com:80
    Ready
    и через пару секунд опять
    Heartbeat timeot
    Connecting to blynk-cloud.com:80
    Ready

    так и у меня шьется с моим кодом. меня волнуют проблема нестабильного соединения с Blynk !!!! Есля и правильно понял сообщение "Heartbeat timeot" почему-то с ОТА резко возрастает пинг и сервер Blynk отваливается
     
  15. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    То есть если подсоединиться через COM порт и закомментировать строки
    в setup()
    // ArduinoOTA.begin();
    и в loop()
    //ArduinoOTA.handle();
    железо работает как надо ?
     
  16. iG2019

    iG2019 Новичок

    Сообщения:
    10
    Симпатии:
    0
    да
     
  17. svs2007m

    svs2007m Читатель

    Сообщения:
    76
    Симпатии:
    9
    У Вас датчик температуры подключен на D3 это кажется GPIO0. Это мягко говоря не самое лучшее решение ! Может здесь засада.
     
  18. iG2019

    iG2019 Новичок

    Сообщения:
    10
    Симпатии:
    0
    Вряд ли. На этом пине резисторная подтяжка к "+". Если бы датчик мешал была бы проблема с прошивкой по шнуру, но никак не стабильность связи с сервером
     
  19. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.455
    Симпатии:
    173
    Выводит сообщения из этого
    Код (Text):
    1.     ArduinoOTA.onStart([]()
    2.     {
    3.         Serial.println("Start");
    4.     });
    5.     ArduinoOTA.onEnd([]()
    6.     {
    7.         Serial.println("End");
    8.     });
    9.     ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
    10.     {
    11.         Serial.printf("Progress: %u%%\n", (progress / (total / 100)));
    12.     });
    13.     ArduinoOTA.onError([](ota_error_t error)
    14.     {
    15.         Serial.printf("Error[%u]: ", error);
    16.         if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    17.         else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    18.         else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    19.         else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    20.         else if (error == OTA_END_ERROR) Serial.println("End Failed");
    21.     });
    Для того, что бы не долбила каждым процентом, немного изменил код
    Код (Text):
    1.     ArduinoOTA.onStart([]()
    2.     {
    3.         Serial.println("OTA Update Start.");
    4.     });
    5.     ArduinoOTA.onEnd([]()
    6.     {
    7.         Serial.println("OTA Update End.");
    8.     });
    9.     ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
    10.     {
    11.         static unsigned int old_progress;
    12.         unsigned int now_progress;
    13.  
    14.         now_progress = (progress / (total / 100));
    15.         if (now_progress == 0) old_progress = 0;
    16.  
    17.         if (now_progress >= (old_progress + 10))
    18.         {
    19.             Serial.printf("Progress: %3u%%\r\n", now_progress);
    20.             old_progress = now_progress;
    21.         }
    22.     });
    23.     ArduinoOTA.onError([](ota_error_t error)
    24.     {
    25.         Serial.printf("Error[%u]: ", error);
    26.         if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed.");
    27.         else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed.");
    28.         else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed.");
    29.         else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed.");
    30.         else if (error == OTA_END_ERROR) Serial.println("End Failed.");
    31.     });
     
  20. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.455
    Симпатии:
    173
    iG2019, включите в ардуиноиде вывод отладочной информации, помогает поймать моменты, когда теряется связь.
     

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