• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Прошивка Wemos D1 mini Pro по воздуху. Проблема.

zip1961

Member
Добрый день уважаемые форумчане. В инструкции по прошивке ESP 8266 прочитал такое:

Примечание: Чтобы загружать скетч при помощи OTA снова и снова, внутри него нужно прописать соответствующие функции. Для примера используйте скетч «BasicOTA.ino».

Что за соответствующие функции? Дело в том, что я прошиваю по ОТА без проблем, проверяю. Все работает, но когда перезагружаю IDE ( у меня последняя прошивка), порт сетевой исчезает. Мне приходится снова по проводу загрузить ОТА, и потом прошивать прошивку по воздуху и т.д. Питон-версия 1.7.10. В ОТА рас комментировал эти строчки:

ArduinoOTA.setPort(8266);
ArduinoOTA.setHostname("myesp8266");
ArduinoOTA.setPassword("admin");

И вторая проблема.

Загружаю скетч в вемос , на смартфоне все показывает, через несколько часов отваливается Blynk. Перезагружаю Вемос . Все появляется и опять со временем отваливается. По проводу, когда прошивал такого не было.

Может поможете, что нужно в скетче дописать?



И еще. Интересная особенность. Когда заливаю ОТА в мониторе порта ничего нет, IP соответственно тоже (скорость установлена правильно) , но в меню инструменты OTA-порт появляется.

Вот скетч:

Код:
#include "DHT.h"
#define fan1 D1 //вентилятор D1 Гараж
#define fan2 D5 //вентилятор D5 Подвал
#define fan3 D6 //вентилятор D6 Смотровая яма

#define DHT1PIN D7//датчик на улице
#define DHT2PIN D4//датчик в гараже
#define DHT3PIN D3//датчик в подвале
#define DHT4PIN D2//датчик в смотровой яме

#define DHT1TYPE DHT22
#define DHT2TYPE DHT22
#define DHT3TYPE DHT11
#define DHT4TYPE DHT11

DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
DHT dht3(DHT3PIN, DHT3TYPE);
DHT dht4(DHT4PIN, DHT4TYPE);

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>

  const char *ssid = "ASUS"; // задаем имя создаваемой сети
  const char *password = "*******"; // задаем пароль создаваемой сети
 
ESP8266WebServer server(80); // Сервер не 80 порту

BlynkTimer timer;

WidgetLED fan_1(V8);  // Светодиод на смарте
WidgetLED fan_2(V9);  // Светодиод на смарте
WidgetLED fan_3(V10); // Светодиод на смарте

int stat = 0;
int maxHum = 90;
char auth[] = "*****************";
bool flag_avto_fan = 1; // ВКЛ Автоматический режим по занчениям датчиков
//----------------------------------------------------------
void handleRoot()
{
  server.send(200, "text/html", "<h1>You are connected<h1>");
}
//-----------------------------------------------------
void setup()
{
  Serial.begin(115200);
  ArduinoOTA.begin();
  Blynk.begin(auth, "ASUS", "*******");
Serial.println();
Serial.println("Configuring access point...");
WiFi.softAP(ssid, password); //создаем иочку доступа, с указанным ранее именем и паролем
IPAddress myIP = WiFi.softAPIP(); //ПОЛУЧАЕМ ip АДРЕСв терминал
Serial.print("AP IP address:"); // выводим полученный IP- адрес в терминал
Serial.println(myIP);
server.on("/", handleRoot);
server.begin(); //запускаем сервер
Serial.println("Server started");
  dht1.begin();
  dht2.begin();
  dht3.begin();
  dht4.begin();

  pinMode(fan1, OUTPUT);
  pinMode(fan2, OUTPUT);
  pinMode(fan3, OUTPUT);
  timer.setInterval(1000, Send);                 // опрос датчиков с интервалом 1с.
  timer.setInterval(30000L, reconnectBlynk);     // проверяем каждые 30 секунд, если подключение к серверу
}
//---------------------------------------------------
void loop() {
 
// Wait a few seconds between measurements.
  delay(2000);
  if (Blynk.connected()) Blynk.run();    // Запуск Blynk
  timer.run();
  server.handleClient();
}
//---------------------------------------------------
void Send() {

  // опрос датчиков
  //---------- dht1
  float h1 = dht1.readHumidity();
  float t1 = dht1.readTemperature();
  if (isnan(h1) || isnan(t1)) Serial.println("Failed to read from DHT1 sensor!");
  else {
    Serial.print("Humidity1: ");
    Serial.print(h1);
    Serial.print(" %\t ");
    Serial.print("Temperature1: ");
    Serial.print(t1);
    Serial.println(" *C ");
  }
  //---------- dht2
  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();
  if (isnan(h2) || isnan(t2)) Serial.println("Failed to read from DHT2 sensor!");
  else {
    Serial.print("Humidity2: ");
    Serial.print(h2);
    Serial.print(" %\t ");
    Serial.print("Temperature2: ");
    Serial.print(t2);
    Serial.println(" *C ");
  }
  //--------- dht3
  float h3 = dht3.readHumidity();
  float t3 = dht3.readTemperature();
  if (isnan(h3) || isnan(t3))Serial.println("Failed to read from DHT3 sensor!");
  else {
    Serial.print("Humidity3: ");
    Serial.print(h3);
    Serial.print(" %\t ");
    Serial.print("Temperature3: ");
    Serial.print(t3);
    Serial.println(" *C ");
  }
  //--------- dht4
  float h4 = dht4.readHumidity();
  float t4 = dht4.readTemperature();
  if (isnan(h4) || isnan(t4)) Serial.println("Failed to read from DHT4 sensor!");
  else {
    Serial.print("Humidity4: ");
    Serial.print(h4);
    Serial.print(" %\t ");
    Serial.print("Temperature4: ");
    Serial.print(t4);
    Serial.println(" *C ");
  }
  Serial.println();

  // *********************  Логистика работы вентиляторов **************
 
  if (flag_avto_fan) { // если ВКЛ автоматический режим !!!!!!!!
    //-------- (h1>h2)
    if (h1 > h2) // если влажность на улице больше, чем в гараже, выключается вентилятор fan1
    {
      digitalWrite(fan1, LOW);
      fan_1.off();//выкл вирт.светодиод
    }
    else if (h1 < h2) // если влажность на улице меньше, чем в гараже, включается вентилятор fan1
    {
      digitalWrite(fan1, HIGH);
      fan_1.on(); //вкл вирт.светодиод
    }
     //-------- (h1>h4)
     if (h1 > h4) // если влажность на улице больше, чем в смотровой яме, выключается вентилятор fan3
    {
      digitalWrite(fan3, LOW);
      fan_3.off();//выкл вирт.светодиод
    }
    else if (h1 < h4) // если влажность на улице меньше, чем в смотровой яме, включается вентилятор fan3
    {
      digitalWrite(fan3, HIGH);
      fan_3.on(); //вкл вирт.светодиод
    }
    //------------(t1<0) для гаража
    if (t1<0) // если температура на улице меньше 0 градусов, выключается вентилятор fan1
    {
      digitalWrite(fan1, LOW);
      fan_1.off();//выкл вирт.светодиод
    }
    else if (t1>0) // если температура на улице больше 0 градусов, включается вентилятор fan1
    {
      digitalWrite(fan1, HIGH);
      fan_1.on(); //вкл вирт.светодиод
    }
   //------------(t1<0) для cмотровой ямы
   if (t1<0) // если температура на улице меньше 0 градусов, выключается вентилятор fan3
    {
      digitalWrite(fan1, LOW);
      fan_3.off();//выкл вирт.светодиод
    }
    else if (t1>0) // если температура на улице больше 0 градусов, включается вентилятор fan3
    {
      digitalWrite(fan3, HIGH);
      fan_3.on(); //вкл вирт.светодиод
    }
    //-------- h2
    if (h2 > maxHum)
    {
      digitalWrite(fan1, HIGH);
      fan_1.on();             //вкл вирт.светодиод
    }
    else if (h2 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
    {
      digitalWrite(fan1, LOW);
      fan_1.off(); //выкл вирт.светодиод
    }
    //-------- h3
    if (h3 > maxHum)
    {
      digitalWrite(fan2, HIGH);
      fan_2.on();             //вкл вирт.светодиод
    }
    else if (h3 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
    {
      digitalWrite(fan2, LOW);
      fan_2.off(); //выкл вирт.светодиод
    }
    //--------- h4
    if (h4 > maxHum)
    {
      digitalWrite(fan3, HIGH);
      fan_3.on(); //вкл вирт.светодиод
    }
    else if (h4 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
    {
      digitalWrite(fan3, LOW);
      fan_3.off(); //выкл вирт.светодиод
    }
  }
  //---------------- отправка показания датчиков на Blynk
  static uint8_t t;
  if (++t > 5) { // каждые 5 сек или любой другой интервал выводит данные на Blynk !!!
    t = 0;
    Blynk.virtualWrite(V0, h1);
    Blynk.virtualWrite(V1, t1);
    Blynk.virtualWrite(V2, h2);
    Blynk.virtualWrite(V3, t2);
    Blynk.virtualWrite(V4, h3);
    Blynk.virtualWrite(V5, t3);
    Blynk.virtualWrite(V6, h4);
    Blynk.virtualWrite(V7, t4);
  }
}
//------------------------ Групповое ВЫКЛ вентиляции
BLYNK_WRITE(V11) {      
  if (param.asInt()) {
    flag_avto_fan = 0;   // ВЫКЛ Автоматику
    digitalWrite(fan1, LOW); fan_1.off();
    digitalWrite(fan2, LOW); fan_2.off();
    digitalWrite(fan3, LOW); fan_3.off(); 
  }
  else {
    flag_avto_fan = 1;  // ВКЛ Автоматику
  }
}
//--------------------------------------------------- 
void reconnectBlynk() {                    // функция проверяет соединение с сервером Блинк
  if (!Blynk.connected()) {                // если соединения нет то
    if (Blynk.connect())                   // конектимся
      BLYNK_LOG("Reconnected");            // выводим в лог
    else
      BLYNK_LOG("Not reconnected");        // выводим в лог
  }
}
 

Юрий Ботов

Moderator
Команда форума
Простите старика... Что такое "Питон-версия 1.7.10"? Насколько я помню сейчас 2.7х и 3.7х...
 

zip1961

Member
Вроде в loop() не хватает:
ArduinoOTA.handle();
Да, я совершенно про это забыл, а ведь смотрел видео и там было про это сказано
спасибо, дома вечером попробую.
И что там делает delay(2000); ?
Читал многие мнения, одни пишут. что надо паузу, другие нет. По началу делал без нее, но после загрузки скетча и перезагрузки платы у меня не выходили данные датчика на монитор порта, пока еще раз не перезагрузишь. Думал не успевает распознать DHT, поэтому включил паузу. Лучше убрать?
 

CodeNameHawk

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

zip1961

Member
Интересно, где вы такую нашли.
Download Python
Как раз на этом же родном сайте и нашел в старых версиях
Надо ставить ту версию, что рекомендуют ардуинщики.
Installing — ESP8266 Arduino Core documentation
Я так и делаю:
Использование git версии
Это рекомендуемый метод установки для участников и разработчиков библиотек.

Предпосылки
  • Arduino 1.6.8 (или новее, текущая рабочая версия 1.8.5)
  • мерзавец
  • Python 2.7 ( https://python.org )
  • терминал, консоль или командная строка (в зависимости от вашей ОС)
  • интернет-соединение
или так
Prerequisites
  • Arduino 1.6.8 (or newer, current working version is 1.8.5)
  • git
  • Python 2.7 (https://python.org)
  • terminal, console, or command prompt (depending on your OS)
  • Internet connection
 

CodeNameHawk

Moderator
Команда форума
То есть вы видели, что рекомендуют ставить 2,7 а вы ставите 1,7.
 
Сверху Снизу