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

NODEMCU + LCD+BLYNK

Sergey0001

New member
Добрый день, подскажите новичку, задачи такие:
1) На NODEMCU (3шт) независимых друг от друга хочу подключить по 1 реле и ds18b20,чтобы реле вкл/выкл по заданной температуре. Заданную уставку температуры хочу отображать в BLYNK на LCD.
2) Возможность смены уставки температуры через приложение BLYNK.
3) Так же необходимо сделать переключатель в blynk авт.реж(по уставке) и ручной режим просто вкл/выкл реле.
Подскажите пожалуйста, как это возможно реализовать, либо ссылку на подобные темы. Выводить температуру и вкл/откл реле через blynk я умею, а вот по уставке нет.
 

IgorM

New member
Как раз над таким же примерно проектом работаю. Только кнопку не делал, потому как без надобности.
Плюсом у меня еще установлен датчик тока. Еще сообщения отправляются в телеграмм через бота. И обновление сделал по воздуху.
Я сам новичок, только учусь. может все это можно было как то лучше сделать, но у меня работает.


Код:
#include <ArduinoOTA.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define Relay2 14 //пин реле
boolean tr = true; //назначаем логическую переменную для однократной отправки сообщения о температуре

// персональные данные
char auth[] = "********"; //токен
char ssid[] = "*****";  //Имя точки доступа WIFI
char pass[] = "*******"; //пароль точки доступа WIFI

#define ONE_WIRE_BUS D3 // пин датчика d18b20

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

float temp2; //переменная температуры
int tempConst2 = 10; //температура по умолчанию
int gistT = 1; //задаем дельту
float i; //показания датчика тока
float I; //сила тока

void sendTemps(){   //проверка температуры
  sensors.requestTemperatures();
  temp2 = sensors.getTempCByIndex(0);
  Serial.println(temp2);
  Blynk.virtualWrite(V1, temp2);
}
BLYNK_WRITE(V4){    //считываем данные со слайдера
  tempConst2 = param.asInt();
}
void checktemp(){   //сравниваем заданную и текущую температуру
  if (temp2 >= tempConst2 + gistT) //если температура в норме
  {
    digitalWrite(Relay2, HIGH); //выключаем реле
    Serial.println(tempConst2);
    if (tr == true)
    {
      Blynk.email("*****@etlgr.com", "Температура в норме", " ");
      Serial.println("_HIGH_");
      tr = false; //присваиваем переменной обратное значение чтобы сообщение больше не отправлялось
    }
  }
  else if (temp2 <= tempConst2 - gistT) // если температура нниже
  {
    digitalWrite(Relay2, LOW); //включаем реле
    Serial.println(tempConst2);
    if (tr == false) // проверяем логическую переменную
    {
      Blynk.email("*****@etlgr.com", "Низкая температура", " ");
      Serial.println("_LOW_");
      tr = true; //меняем значение переменной чтобы больше не отправлялось сообщение
    }
  }
}
void amper(){       //датчик силы тока
  i = analogRead(A0);
  I = (i - 491) / 12,178;
  if (I < 0){
    I = I * - 1;
  }
  Serial.println(I);
  Blynk.virtualWrite(V2, I);
}
void setup(){       //настройки
  pinMode(Relay2, OUTPUT);        // пин реле выход
  Serial.begin(9600);             // скорость сериал порта
  Blynk.begin(auth, ssid, pass);  //старт блинка
  Blynk.syncAll();                // синхронизация блинка
  sensors.begin();                // старт датчика температуры
  ArduinoOTA.begin();             // старт обновления по воздуху

  // Таймеры на запуск функций
  timer1.setInterval(3000L, sendTemps); //опрос d18b20
  timer1.setInterval(3000L, checktemp); //сравнение текущей температуры с заданой
  timer1.setInterval(1000L, amper);     //амперметр
}

void loop(){
  ArduinoOTA.handle();
  Blynk.run();
  timer1.run();
}
 

Sr.FatCat

Member
@IgorM, у меня тоже похожий проект, только управление 2-мя реле (обогрев и вентиляция) и датчики беспроводные.
Понравилось, как у вас сделано лаконично и прозрачно. Единственное, посоветую вместо syncAll сделать
BLYNK_CONNECTED(){....}
Тогда при каждом переподключении будут обновляться данные блинка и программа. Не знаю, как у Вас, а у меня переподключений более 7000 за 2-е суток работы.
Не знаю, кто виноват - провайдер, сервер блинк, или мой код - но факт остается фактом: связь предельно не стабильная и зависит от времени суток.
 

IgorM

New member
@IgorM, у меня тоже похожий проект, только управление 2-мя реле (обогрев и вентиляция) и датчики беспроводные.
Понравилось, как у вас сделано лаконично и прозрачно. Единственное, посоветую вместо syncAll сделать
BLYNK_CONNECTED(){....}
Тогда при каждом переподключении будут обновляться данные блинка и программа. Не знаю, как у Вас, а у меня переподключений более 7000 за 2-е суток работы.
Не знаю, кто виноват - провайдер, сервер блинк, или мой код - но факт остается фактом: связь предельно не стабильная и зависит от времени суток.
Спасибо, поизучаю.
У меня тоже было время когда отваливался часто, но опытным путем установил, что в этом был виноват частый опрос датчика температуры. Поставил раз в 3 секунды и все стало лучше.
 

AndrF

Active member
А давайте интерфейсики покажем...

Screenshot_20171031-143741.png

У меня тоже было время когда отваливался часто, но опытным путем установил, что в этом был виноват частый опрос датчика температуры. Поставил раз в 3 секунды и все стало лучше.
Зачем так часто? Раз в минуту - более чем достаточно.
 

Sr.FatCat

Member
А давайте интерфейсики покажем...
Интерфейсики у нас как из одной песочницы :)
Screenshot_20171031-152720.png Screenshot_20171031-152740.png Screenshot_20171031-152808.png

Как вам удалось добиться, чтобы установленную температуру на графике тоже показывал?
Просто прописать туда пин виджета недостачно? Делаете на него еще digitalWrite в коде?
Зачем так часто? Раз в минуту - более чем достаточно.
Так, то понятно. В OneWire и библиотеке d18b20 все изобилует делаями, вот Blynk.run() и не достаточно часто крутился.
У меня дело хуже - у меня то, не то что делаев и библиотек никаких нет - все в ручную, по прерыванию. У меня одни if. Единственный цикл
максимум на 250 значений, которые обрабатываются +-, да >> << тормозить больше чем на 2-3мкс ничего не может
 

AndrF

Active member
Просто прописать туда пин виджета недостачно? Делаете на него еще digitalWrite в коде?
Если точнее, то Blynk.virtualWrite().

У меня управление только газовым котлом - большего в однушке и не нужно. Все живет в часах.

IMG_20171011_085446.jpg

Так, то понятно. В OneWire и библиотеке d18b20 все изобилует делаями
Зачем? Запустил преобразование, через секунду считал результат - никакие delay мне для этого не нужны - я и так знаю что прошла секунда. Точнее полсекунды, так как на один из PIN-ов я подаю сигнал меандра от DS3132 и его просто проверяю. Как итог - dalay-ев нет вообще.
 

Sr.FatCat

Member
Если точнее, то Blynk.virtualWrite().
Т.е. я правильно понимаю, что это должно выглядеть вот так безумно:

Код:
BLYNK_WRITE(V6) {
    temperature =  param.asInt();
       Blynk.virtualWrite(V6, temperature);
}
Зачем? Запустил преобразование, через секунду считал результат - никакие delay мне для этого не нужны - я и так знаю что прошла секунда. Точнее полсекунды, так как на один из PIN-ов я подаю сигнал меандра от DS3132 и его просто проверяю. Как итог - dalay-ев нет вообще.
Вы не используете библиотек OneWire.h и DallasTemperature.h совсем? Если используете - посмотрите коды их .cpp - шников и поймете, что я имел ввиду про delay
 

AndrF

Active member
Т.е. я правильно понимаю, что это должно выглядеть вот так безумно:
Нет. Blynk.virtualWrite() выполняется в loop() раз в минуту.

Вы не используете библиотек OneWire.h и DallasTemperature.h совсем? Если используете - посмотрите коды их .cpp - шников и поймете, что я имел ввиду про delay
Основная задержка там - это задержка преобразования - до 750 ms. Но вас ведь никто не заставляет ей пользоваться. Пишите:

В setup():

sensors.setWaitForConversion(false);

В loop() раз в минуту:

sensors.requestTemperatures();

И еще через секунду читаете:

CurrTemp = sensors.getTempCByIndex(0);

Все остальное - мелочь и выполняется быстро.
 

IgorM

New member
Как вам удалось добиться, чтобы установленную температуру на графике тоже показывал?
Просто прописать туда пин виджета недостачно? Делаете на него еще digitalWrite в коде?
По моему это просто в интерфейсе блинка делается. Добавляете еще одну переменную, присваиваете ей пин и все.
 

IgorM

New member
У меня управление только газовым котлом
Я пока опасаюсь такие серьезные и опасные устройства на такой микроконтроллер вешать, а если что-то пойдет не так? Лучше уж пусть автоматика котла всем заведует - это ее прямая обязанность, а ЕСП пускай наблюдает и мне сообщает.
Все живет в часах.
Отлично получилось, это специальный корпус или сами делал?
 

AndrF

Active member
Я пока опасаюсь такие серьезные и опасные устройства на такой микроконтроллер вешать, а если что-то пойдет не так? Лучше уж пусть автоматика котла всем заведует - это ее прямая обязанность, а ЕСП пускай наблюдает и мне сообщает.
Автоматика не сможет так поддерживать температуру в комнате. С котлом значительно лучше. Да и ничего там сложного нет - у котлов предусмотрен релейный вход для этого дела.

Отлично получилось, это специальный корпус или сами делал?
Обычный, покупной. Инструменты - дрель и напильник...
 

leha889

New member
Здравствуйте ,помогите пожалуйста есть блок sonoff th16 я его прошил на blynk ,все подключается показывает темпр. и влажность.Но я ни как не могу настроить виджеты чтоб при превышение темпр. например 26 выключалось реле .Если темпр.V5 ,влажность V6 а кнопка V20 .Подскажите пожалуйста если можно поподробней как сделать
 
Сверху Снизу