• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
И еще как помню из курса "Вентиляция и кондиционирование производственных помещений" одной вентиляции приточной или вытяжной не обойтись. Нужны осушители или увлажнители воздуха (типа климат контроль). Если на "улице сыро", то и в помещении влажность сильно не уменьшится ))
 
Сверху Снизу