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

Контроль влажности в гараже и погребе. WEMOS MINI PRO

zip1961

Member
Если на "улице сыро", то и в помещении влажность сильно не уменьшится ))[/QUOTE]
Да, я в самом начале писал, что все эти действия в скетче (в котором Вы мне очень помогли) будут исполняться при условии, если влажность на улице меньше, чем в гараже включается вентилятор в гараже, если влажность в гараже меньше, чем в погребе, включается вентилятор в погребе. Над этим теперь предстоит моя задача. Пока не считаю точку росы, ее формулу перевода в абсолютную, пока попробую без этого, потом, если додумаюсь, сделаю.
 

zip1961

Member
Если на "улице сыро", то и в помещении влажность сильно не уменьшится ))
Да, я в самом начале писал, что все эти действия в скетче (в котором Вы мне очень помогли) будут исполняться при условии, если влажность на улице меньше, чем в гараже включается вентилятор в гараже, если влажность в гараже меньше, чем в погребе, включается вентилятор в погребе. Над этим теперь предстоит моя задача. Пока не считаю точку росы, ее формулу перевода в абсолютную, пока попробую без этого, потом, если додумаюсь, сделаю.[/QUOTE]
Да и подумываю поставить над вытяжкой из погреба не большой нагреватель в будущем, чтоб поток был быстрее.
 

zip1961

Member
1. Можно объединить через виджет Кнопки 3 штуки (улица не в счет) и в скетче добавить функцией
Blynk.setProperty (V2, "label", "Вентиляция гараж"); // Заголовок
Blynk.setProperty (V2, "color", "#23C48E"); // Цвет при ВКЛ (зеленый)
Blynk.setProperty (V2, "offLabel", "t=", t2, "h=",h2); // Значение при ВЫКЛ
Blynk.setProperty (V2, "onfLabel", "t=", t2, "h=",h2); // Значение при ВКЛ
Blynk.virtualWrite(V2, HIGH); // ВКЛ вент

то есть Значения в центре кнопки

Это вписать в void Send?
Или Выводить через виджет терминал
Можно поподробнее?
 

svs2007m

Active member
Ну поскольку код будет многократно модернизирован для быстрой прошивки без "дерганья" железа дополните его обновлением по "воздуху" через ОТА например.
 

svs2007m

Active member
А подробнее что ? У Blynk на "бесплатно" только 1000 ед. Если есть локальный сервер тогда полная свобода действий.
В рамках лимиты можно так
Demo_Blynk.jpg
Просто текст заголовка виджета и текст надписей на кнопке можно менять с интервалом не менее 1 сек(лучше 5 сек сервер у них бывает отваливается) см.документацию на виджет в зависимости от тек.состояния. (Таймеры времени интересно получаются...)На Blynke прописать виртуальный PIN, а все остальное через скетч
 

svs2007m

Active member
Ну тогда стилистические кнопки вставляйте там настроек на "любой фломастер". А если подключить Яндекс. клавиатуру на телефоне то там и заначки к тексту добавить можно типа Demo_3.jpg
 

zip1961

Member
совет по сенсору - у DHT22 и DHT11 точность по влажности никакая. лучше HTU21D и заменить i2c драйвер для стабильности чтения.

вот вам тест DHT22, HTU21D и BME280
Да. со временем поменяю обязательно. мне сейчас доделать скетч. точку доступа все вместе. Отдельно пробовал точку доступа и веб сервер, получилось с первого раза, теперь нужно связать это все в одном скетче. Займусь в выходные.
У меня такой вопросик к Вам. Можно ли виртуальную кнопку V11 (в вашем примере Demo-1 использована по ошибке 2 раза кнопкой V1
BLYNK_WRITE(V1) // запрос данных с датчика и Blynk.virtualWrite(V1, t1);
BLYNK_WRITE(V1) я заменил на BLYNK_WRITE(V11) ) использовать, как отмену всех действий вентиляторов. Т.Е. отключить или включить этой кнопкой все вентиляторы, но не показание датчиков.( пока не определился с точкой росы).
 

svs2007m

Active member
У меня не остался тот скетч. Исправлял Ваш на вскидку. Когда вопрос решился стер.
А по общей кнопке может так:
Demo_5.txt
 

zip1961

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

#define DHT1PIN D0//датчик на улице
#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>

BlynkTimer timer;

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

int stat = 0;
int maxHum = 60;
char auth[] = "abcc955ef726453a89b97232338d0a57";

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, "ASUS", "ZipandSergey");

  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 секунд, если подключение к серверу
}

BLYNK_WRITE(V11){ // запрос данных с датчика
if (param.asInt()) { // кнопка в режиме SWITCH

digitalWrite(fan1, HIGH);

digitalWrite(fan2, HIGH);

digitalWrite(fan3, HIGH);
}
else {

digitalWrite(fan1, LOW);

digitalWrite(fan2, LOW);

digitalWrite(fan3, LOW);
}
{
  stat = param.asInt();
}
}
void loop() {
  if (Blynk.connected()) Blynk.run();    // Запуск Blynk
  timer.run();
}
//---------------------------------------------------

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 ");
  }
  //--------- dht3
  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();
 
  // логистика работы вентиляторов
  //-------- h2
  if(h2>h1) // если влажность в гараже больше, чем на улице, включается вентилятор fan1
  {
  digitalWrite(fan1, HIGH);
  fan_1.on();//вкл вирт.светодиод
  }
  else if (h2<h1)// если влажность в гараже меньше, чем на улице, выключается вентилятор fan1
  {
    digitalWrite(fan1, LOW);
    fan_1.off(); //выкл вирт.светодиод
  }
  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 (h2 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
  {
    digitalWrite(fan2, LOW);
    fan_2.off(); //выкл вирт.светодиод
  }
  //--------- h4
  if (h4 > maxHum)
  {
    digitalWrite(fan3, HIGH);
    fan_3.on(); //вкл вирт.светодиод
  }
  else if (h3 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
  {
    digitalWrite(fan3, LOW);
    fan_3.off(); //выкл вирт.светодиод
  }

  //------------ на Blynk
  if (stat == 1) {
    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);
  }
}
//---------------------------------
void reconnectBlynk() {                    // функция проверяет соединение с сервером Блинк
  if (!Blynk.connected()) {                // если соединения нет то
    if (Blynk.connect())                   // конектимся
      BLYNK_LOG("Reconnected");            // выводим в лог
    else
      BLYNK_LOG("Not reconnected");        // выводим в лог
  }
}
У меня не остался тот скетч. Исправлял Ваш на вскидку. Когда вопрос решился стер.
А по общей кнопке может так:
Demo_5.txt
Кнопки управления вентиляцией на Blynke у меня нет, есть кнопка опроса датчиков или включения в режиме SWITCH.
Добавил я Ваш скетч Demo_5.txt ,виртуальная кнопка V11 работает как кнопка, а не как переключатель, даже в режиме SWITCH. Кроме того когда выключена виртуальная кнопка V11 показания датчика не передается, т.е. выключено. Может поможете. я добавил, если влажность в гараже меньше, чем на улице. то включается вентиоятор и наоборот. Вот скетч
 

zip1961

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

#define DHT1PIN D0//датчик на улице
#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>

BlynkTimer timer;

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

int stat = 0;
int maxHum = 60;
char auth[] = "abcc955ef726453a89b97232338d0a57";

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, "ASUS", "ZipandSergey");

  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 секунд, если подключение к серверу
}

BLYNK_WRITE(V11){ // запрос данных с датчика
if (param.asInt()) { // кнопка в режиме SWITCH

digitalWrite(fan1, HIGH);

digitalWrite(fan2, HIGH);

digitalWrite(fan3, HIGH);
}
else {

digitalWrite(fan1, LOW);

digitalWrite(fan2, LOW);

digitalWrite(fan3, LOW);
}
{
  stat = param.asInt();
}
}
void loop() {
  if (Blynk.connected()) Blynk.run();    // Запуск Blynk
  timer.run();
}
//---------------------------------------------------

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 ");
  }
  //--------- dht3
  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();
 
  // логистика работы вентиляторов
  //-------- h2
  if(h2>h1) // если влажность в гараже больше, чем на улице, включается вентилятор fan1
  {
  digitalWrite(fan1, HIGH);
  fan_1.on();//вкл вирт.светодиод
  }
  else if (h2<h1)// если влажность в гараже меньше, чем на улице, выключается вентилятор fan1
  {
    digitalWrite(fan1, LOW);
    fan_1.off(); //выкл вирт.светодиод
  }
  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 (h2 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
  {
    digitalWrite(fan2, LOW);
    fan_2.off(); //выкл вирт.светодиод
  }
  //--------- h4
  if (h4 > maxHum)
  {
    digitalWrite(fan3, HIGH);
    fan_3.on(); //вкл вирт.светодиод
  }
  else if (h3 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
  {
    digitalWrite(fan3, LOW);
    fan_3.off(); //выкл вирт.светодиод
  }

  //------------ на Blynk
  if (stat == 1) {
    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);
  }
}
//---------------------------------
void reconnectBlynk() {                    // функция проверяет соединение с сервером Блинк
  if (!Blynk.connected()) {                // если соединения нет то
    if (Blynk.connect())                   // конектимся
      BLYNK_LOG("Reconnected");            // выводим в лог
    else
      BLYNK_LOG("Not reconnected");        // выводим в лог
  }
}
Кнопки управления вентиляцией на Blynke у меня нет, есть кнопка опроса датчиков или включения в режиме SWITCH.
Добавил я Ваш скетч Demo_5.txt ,виртуальная кнопка V11 работает как кнопка, а не как переключатель, даже в режиме SWITCH. Кроме того когда выключена виртуальная кнопка V11 показания датчика не передается, т.е. выключено. Может поможете. я добавил, если влажность в гараже меньше, чем на улице. то включается вентиоятор и наоборот. Вот скетч
 

zip1961

Member
если влажность в гараже больше, чем на улице. то включается вентиоятор и наоборот.
 
Сверху Снизу