• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLYNK и OTA

iG2019

New member
Есть ESP8266 NODEMCU
заливаю такой скетч
Код:
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS D3

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

BlynkTimer timer;

char auth[] = "***************"; //ваш токен  при регистрации в BLYNK
char ssid[] = "*****"; // ваш логин, название домашней сети wifi
char pass[] = "******"; // ваш пароль домашней сети wifi

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
  sensors.begin();
  sensor.setResolution(12);
  timer.setInterval(6000L, sendTemps); // установка времени в милисекундах
}

void sendTemps()
{
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0);
   Serial.println(temp);
  Blynk.virtualWrite(V1, temp);
}

  void loop()
  {
    Blynk.run();
    timer.run();
  }
все нормально работает.
Как только изменяю код для возможности прошивки по воздуху
Код:
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS D3

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

BlynkTimer timer;


const char* auth = "***"; //ваш токен  при регистрации в BLYNK
const char* ssid = "***";
const char* password = "***";

void setup() {
 
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Hostname defaults to esp8266-[ChipID]
  ArduinoOTA.setHostname("myesp8266");

   ArduinoOTA.onStart([]() {
    Serial.println("Start updating ");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) {
      Serial.println("Auth Failed");
    } else if (error == OTA_BEGIN_ERROR) {
      Serial.println("Begin Failed");
    } else if (error == OTA_CONNECT_ERROR) {
      Serial.println("Connect Failed");
    } else if (error == OTA_RECEIVE_ERROR) {
      Serial.println("Receive Failed");
    } else if (error == OTA_END_ERROR) {
      Serial.println("End Failed");
    }
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  Blynk.begin(auth, ssid, password);
  sensors.begin();
  sensors.setResolution(11);
  timer.setInterval(6000, sendTemps); // установка времени в милисекундах
}

void sendTemps()
{
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0);
  Serial.println(temp);
  Blynk.virtualWrite(V1, temp);
  }

void loop() {
  ArduinoOTA.handle();
 
Blynk.run();
timer.run();
}
возникают проблемы с подключением к BLYNK. В консоли постоянно сыпятся сообщения что нет подключения. При этом прошивать по воздуху можно. Что я делаю не так?
 

iG2019

New member
поменял WiFi.mode(WIFI_STA); на WiFi.mode(WIFI_AP_STA); стало соединяться, но через некоторое время идут дисконнекты
 

svs2007m

Active member
Код:
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS D3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
BlynkTimer timer;
char auth[] = "*******";   //ваш токен  при регистрации в BLYNK
char ssid[] = "*******";   // ваш логин, название домашней сети wifi
char pass[] = "*******";   // ваш пароль домашней сети wifi
void setup() {
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
  sensors.begin();
  sensors.setResolution(11);
  timer.setInterval(6000, sendTemps);              // установка времени в милисекундах
  timer.setInterval(30000L, reconnectBlynk);       // проверяем каждые 30 секунд, если подключение к серверу Bkynk
  ArduinoOTA.setHostname("My-Project");            //OTA Задаем имя сетевого порта
  ArduinoOTA.setPassword((const char *)"0001");    //OTA Задаем пароль доступа для удаленной прошивки
  ArduinoOTA.begin();                              //OTA Запуск
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}
//------------------
void reconnectBlynk() {                    // функция проверяет соединение с сервером Блинк
  if (!Blynk.connected()) {                // если соединения нет то
    if (Blynk.connect())                   // конектимся
      BLYNK_LOG("Reconnected");            // выводим в лог
    else
      BLYNK_LOG("Not reconnected");        // выводим в лог
  }
} // end
//----------------
void sendTemps() {
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0);
  Serial.println(temp);
  Blynk.virtualWrite(V1, temp);
}
void loop() {
  ArduinoOTA.handle();
  if (Blynk.connected()) Blynk.run();    // Запуск Blynk
  timer.run();
}
 
Последнее редактирование модератором:

iG2019

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

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

svs2007m

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


какие должны быть настройки? Я делал так как описано здесь и никаких настроек питона там не производится.
  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 через внешнее питание. И не кабы какое.
 

iG2019

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

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

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

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

nikolz

Well-known member
  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 через внешнее питание. И не кабы какое.
это есть очень плохо.
может дырка во флешке появиться
и зачем это цикл с рестартом
отслеживать подключение надо в колбеке Wifi
а режимы изменять по условию
например так:
if (wifi_get_opmode()!=STATION_MODE) wifi_set_opmode(STATION_MODE);
тоже самое:
if (wifi_get_opmode()!=1) wifi_set_opmode(1);
 

svs2007m

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

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


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


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

iG2019

New member
Попробуй так !!!
Дружище я уже ИСПРАВИЛ твой скетч (см. выше ) который на 99% работает.
Залил ... та же ситуация. Gериодический дисконнект. В мониторе порта:
Heartbeat timeot
Connecting to blynk-cloud.com:80
Ready
и через пару секунд опять
Heartbeat timeot
Connecting to blynk-cloud.com:80
Ready

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

svs2007m

Active member
То есть если подсоединиться через COM порт и закомментировать строки
в setup()
// ArduinoOTA.begin();
и в loop()
//ArduinoOTA.handle();
железо работает как надо ?
 

svs2007m

Active member
У Вас датчик температуры подключен на D3 это кажется GPIO0. Это мягко говоря не самое лучшее решение ! Может здесь засада.
 

iG2019

New member
Вряд ли. На этом пине резисторная подтяжка к "+". Если бы датчик мешал была бы проблема с прошивкой по шнуру, но никак не стабильность связи с сервером
 

CodeNameHawk

Moderator
Команда форума
Если не секрет КАКАЯ инфа во время прошивки через ОТА идет на СОМ порт ?
Выводит сообщения из этого
Код:
    ArduinoOTA.onStart([]()
    {
        Serial.println("Start");
    });
    ArduinoOTA.onEnd([]()
    {
        Serial.println("End");
    });
    ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
    {
        Serial.printf("Progress: %u%%\n", (progress / (total / 100)));
    });
    ArduinoOTA.onError([](ota_error_t error)
    {
        Serial.printf("Error[%u]: ", error);
        if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
        else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
        else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
        else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
        else if (error == OTA_END_ERROR) Serial.println("End Failed");
    });
Для того, что бы не долбила каждым процентом, немного изменил код
Код:
    ArduinoOTA.onStart([]()
    {
        Serial.println("OTA Update Start.");
    });
    ArduinoOTA.onEnd([]()
    {
        Serial.println("OTA Update End.");
    });
    ArduinoOTA.onProgress([](unsigned int progress, unsigned int total)
    {
        static unsigned int old_progress;
        unsigned int now_progress;

        now_progress = (progress / (total / 100));
        if (now_progress == 0) old_progress = 0;

        if (now_progress >= (old_progress + 10))
        {
            Serial.printf("Progress: %3u%%\r\n", now_progress);
            old_progress = now_progress;
        }
    });
    ArduinoOTA.onError([](ota_error_t error)
    {
        Serial.printf("Error[%u]: ", error);
        if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed.");
        else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed.");
        else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed.");
        else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed.");
        else if (error == OTA_END_ERROR) Serial.println("End Failed.");
    });
 

CodeNameHawk

Moderator
Команда форума
iG2019, включите в ардуиноиде вывод отладочной информации, помогает поймать моменты, когда теряется связь.
 
Сверху Снизу