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

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

zip1961

Member
Добрый день уважаемые форумчане! Пожалуйста помогите. Я начинающий в этом деле. Сделал проект 4 сенсора два -DHT22 и два DHT11. Один на улице (естественно DHT22, один в гараже DHT22 и два в погребе и смотровой яме DHT11. Цель такая- при более 60 % влажности включаются вентиляторы. при 55% выключаются. Но если на улице влажность меньше , чем в гараже, яме, погребе ( в скетче пока последнего нет). Если включается вентилятор. на телефоне (приложение Blink) загорается LED индикатор. Все это получилось но с одним датчиком. Реле срабатывает, светодиод на телефоне загорается. Теперь не могу остальные светодиоды подключить. выдаются ошибки. Ошибка компиляции для платы LOLIN(WEMOS) D1 mini Pro.? В последней версии IDE ошибка другая - expected unqualified-id before ')' token. Подскажите люди добрые, где я сделал ошибки?
Вот скетч


/**************************************************************
www.EK21 - произвосдство и поставка ЭНЕРГЕТИЧЕСКОГО ОБОРУДОВАНИЯ.
**************************************************************
* This example runs directly on ESP8266 chip.
*
* You need to install this for ESP8266 development:
* esp8266/Arduino
*
* Please be sure to select the right ESP8266 module
* in the Tools -> Board menu!
*
* Change WiFi ssid, pass, and Blynk auth token to run :)
*
**************************************************************/
#include "DHT.h"
#define fan1 D1 //вентилятор D1 Гараж
#define fan2 D5 //вентилятор D5 Подвал
#define fan3 D6 //вентилятор D1 Смотровая яма

#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 PIN D1 //контролируемый пин
WidgetLED fan1(V8); // Светодиод на смарте
#define PIN D5 //контролируемый пин
WidgetLED fan2(V9); // Светодиод на смарте
#define PIN D6 //контролируемый пин
WidgetLED fan3(V10); // Светодиод на смарте

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

int stat = 0;
int maxHum = 60;

#include <SimpleTimer.h> //таймер
SimpleTimer timer;

char auth[] = "abcc955ef726453a89b97232338d0a57";

void sendOnOff()
{
int x = digitalRead (fan1);//читаем пин модуля
if (x == 1) {//проверим состояние
led fan1.on(); //вкл вирт.светодиод
}
else { //иначе выключим
led fan1.off();
}
int x = digitalRead (fan2);
if (x == 1) {//проверим состояние
led fan2.on(); //вкл вирт.светодиод
}
else { //иначе выключим
led fan2.off();
}
int x = digitalRead (fan3);
if (x == 1) {//проверим состояние
led fan3.on(); //вкл вирт.светодиод
}
else { //иначе выключим
led fan3.off();
}
}

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, sendOnOff);//устанавливаем перезапуск sendOnOff с интервалом 1с.
}

BLYNK_WRITE(V1) // запрос данных с датчика
{
stat = param.asInt();
}

void loop()
{
// ждем пару секунд перед началом измерений
delay(2000);

Blynk.run();
timer.run();
Send();
}

void Send(){
float h2 = dht2.readHumidity();
// Read temperature as Celsius (the default)
float t2 = dht2.readTemperature();
if (stat == 1)
{
Blynk.virtualWrite(V2, h);
Blynk.virtualWrite(V3, t);
}
float h3= dht3.readHumidity();
// Read temperature as Celsius (the default)
float t3= dht3.readTemperature();
if (stat == 1)
{
Blynk.virtualWrite(V4, h);
Blynk.virtualWrite(V5, t);
}
float h4 = dht4.readHumidity();
// Read temperature as Celsius (the default)
float t4 = dht4.readTemperature();
if (stat == 1)
{
Blynk.virtualWrite(V6, h);
Blynk.virtualWrite(V7, t);
}

if(h2 > maxHum)
{
digitalWrite(fan2, HIGH);
}
else if (h2 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
{
digitalWrite(fan2, LOW);
}
if(h3> maxHum)
{
digitalWrite(fan3, HIGH);
}
else if (h3< (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
{
digitalWrite(fan3, LOW);
}
if(h4 > maxHum)
{
digitalWrite(fan4, HIGH);
}
else if (h4 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
{
digitalWrite(fan4, LOW);
}

// проверяем, были ли ошибки при считывании и, если были, начинаем заново
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 ");
}
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 ");
}
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 ");
}
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();
}
 

nikolz

Well-known member
исправьте эти строки:
else if (h2 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
...
else if (h3< (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
..
else if (h4 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
надо так:
else if (h2 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию.
{ digitalWrite(fan, LOW);
...
else if (h3< (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию.
{ digitalWrite(fan, LOW);
..
else if (h4 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию.
{ digitalWrite(fan, LOW);
 

zip1961

Member
Изменил эти строки. Скомпилировал снова, получил другую ошибку. 'DHT' does not name a type. Ссылка на ошибку в строке 33. DHT dht4(DHT4PIN, DHT4TYPE);
Код:
/**************************************************************
www.EK21 - произвосдство и поставка ЭНЕРГЕТИЧЕСКОГО ОБОРУДОВАНИЯ.
**************************************************************
* This example runs directly on ESP8266 chip.
*
* You need to install this for ESP8266 development:
*   https://github.com/esp8266/Arduino
*
* Please be sure to select the right ESP8266 module
* in the Tools -> Board menu!
*
* Change WiFi ssid, pass, and Blynk auth token to run :)
*
**************************************************************/
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#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 PIN D1 //контролируемый пин
WidgetLED fan1(V8); // Светодиод на смарте
#define PIN D5 //контролируемый пин
WidgetLED fan2(V9); // Светодиод на смарте
#define PIN D6 //контролируемый пин
WidgetLED fan3(V10); // Светодиод на смарте



int stat = 0;
int maxHum = 60;

#include <SimpleTimer.h> //таймер
SimpleTimer timer;

char auth[] = "12345678901234567890";

void sendOnOff()
{
  int x = digitalRead (fan1);//читаем пин модуля
  if (x == 1) {//проверим состояние
    led fan1.on(); //вкл вирт.светодиод
  }
  else { //иначе выключим
    led fan1.off();
  }
  int x = digitalRead (fan2);
     if (x == 1) {//проверим состояние
    led fan2.on(); //вкл вирт.светодиод
  }
  else { //иначе выключим
    led fan2.off();
  }
    int x = digitalRead (fan3);
    if (x == 1) {//проверим состояние
    led fan3.on(); //вкл вирт.светодиод
  }
  else { //иначе выключим
    led fan3.off();
  }
}

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, sendOnOff);//устанавливаем перезапуск sendOnOff с интервалом 1с.
}

BLYNK_WRITE(V1) // запрос данных с датчика
  {
  stat = param.asInt();
  }

void loop()
{
  Blynk.run();
  timer.run();
  Send();
}

void Send(){
   float h2 = dht2.readHumidity();
  // Read temperature as Celsius (the default)
  float t2 = dht2.readTemperature();
  if (stat == 1)
  {
    Blynk.virtualWrite(V2, h);
    Blynk.virtualWrite(V3, t);
  }
  float h3= dht3.readHumidity();
  // Read temperature as Celsius (the default)
  float t3= dht3.readTemperature();
  if (stat == 1)
  {
    Blynk.virtualWrite(V4, h);
    Blynk.virtualWrite(V5, t);
  }
  float h4 = dht4.readHumidity();
  // Read temperature as Celsius (the default)
  float t4 = dht4.readTemperature();
  if (stat == 1)
  {
    Blynk.virtualWrite(V6, h);
    Blynk.virtualWrite(V7, t);
  }
 
if(h2 > maxHum)
{
  digitalWrite(fan2, HIGH);
}
   else if (h2 < (maxHum - 5) )  // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
  {
    digitalWrite(fan, LOW);
  }
if(h3> maxHum)
{
  digitalWrite(fan3, HIGH);
}
   else if (h3< (maxHum - 5) )  // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
  {
    digitalWrite(fan, LOW);
  }
if(h4 > maxHum)
{
  digitalWrite(fan4, HIGH);
}
  else if (h4 < (maxHum - 5) )  // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
  {
    digitalWrite(fan, LOW);
  }
 
// проверяем, были ли ошибки при считывании и, если были, начинаем заново
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 ");
}
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 ");
}
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 ");
}
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();
}
 

nikolz

Well-known member
попробуйте записать вместо
DHT dht1(DHT1PIN, DHT1TYPE);
DHT_dht1(DHT1PIN, DHT1TYPE);
или так
DHT.dht1(DHT1PIN, DHT1TYPE);
дайте ссылку откуда копируете.
 

svs2007m

Active member
Несколько неточностей по скетчу и Blynk ... )
Возможно этот исправленный вариант подойдет )
Demo_1
 

svs2007m

Active member
Да и с переменными наведите порядок. Ну как пример типа led_garage, rele_garage, h_garage, а то от цифр аж глаза рябит да и косяки в скетче в основном из-за этого. И для реле "низкого" -"высокого" уровня можно добавить пару строк ))
 

zip1961

Member
Да и с переменными наведите порядок. Ну как пример типа led_garage, rele_garage, h_garage, а то от цифр аж глаза рябит да и косяки в скетче в основном из-за этого. И для реле "низкого" -"высокого" уровня можно добавить пару строк ))
Для себя делал Led_G, fan_G . для вас, что бы не путались Led_1, fan_1, но все такая же ошибка
 

svs2007m

Active member
И не поможет. У тебя ошибок в коде море. Я же тебе показал рабочий скетч !!! Demo_1 Это твой исправленный
 

zip1961

Member
Несколько неточностей по скетчу и Blynk ... )
Возможно этот исправленный вариант подойдет )
Demo_1
Ура! получилось. Спасибо добрый человек, как же я Вам благодарен. Хорошо, что есть такие добрые люди. Кампиляция прошла успешно. Попробую как работает.
 

svs2007m

Active member
Просто переменные в С++ вроде пишутся с маленькой буквы, а с большой функции даже "горбатые"типа МyLedFanRelePro ... (так проще "читать" код ). Удачи в делах !
 

zip1961

Member
Просто переменные в С++ вроде пишутся с маленькой буквы, а с большой функции даже "горбатые"типа МyLedFanRelePro ... (так проще "читать" код ). Удачи в делах !
Спасибо, буду знать, я только учусь, хотя уже поздно учиться. Где мои 17 лет.. Мне уж 58.. Загрузка тоже прошла удачной.
 

zip1961

Member
svs2007m
Добрый день svs2007m! Не сочтите за наглость, но у меня к Вам вопросик. Если мы на светодиод на смарте WidgetLED в скетче прописали виртуальный PIN , светодиод включается и выключается. А как же датчики температуры их ведь тоже нужно в скетче прописывать т.е. на каждый датчик виджет (h) и виджет (t) свой виртуальный PIN. Или они определяются автоматически. Не могу понять, объясните пожалуйста.
 

svs2007m

Active 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); // ВКЛ вент

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

2. Или Выводить через виджет терминал
 

svs2007m

Active member
И еще как помню из курса "Вентиляция и кондиционирование производственных помещений" одной вентиляции приточной или вытяжной не обойтись. Нужны осушители или увлажнители воздуха (типа климат контроль). Если на "улице сыро", то и в помещении влажность сильно не уменьшится ))
 
Сверху Снизу