Moseich
Member
Собрал девайс для контроля и управления котлом. Несколько дней проверял дома ( котел в 100км) - все работает.
Но мне не нравится то, что уведомления о предельном значении параметра не заканчиваются, идут каждую секунду . Можно ли программно квитировать их? Т.е. нажав кнопку остановить этот поток?
Но мне не нравится то, что уведомления о предельном значении параметра не заканчиваются, идут каждую секунду . Можно ли программно квитировать их? Т.е. нажав кнопку остановить этот поток?
Код:
//KOTEL пины V2, V3 и V4 для датчиков.E_MAIL
/* WEMOS. 3 датчика DS18В20 + RELE _ 19 апреля 2019
RELE1_GPIO=D5 и RELE2_GPIO=D6 используются в регуляторе температуры.
реле активируются сигналом "0". Замыкающие контакты RELE1 включены
вместо перемычки котла через дополнительные контакты. RELE1 требует дополнительного
разрешения на включение. Для этого будет использовано RELE2 и стороннее реле,
управляемое пo SMS внешним GSM девайсом, поскольку в надежности BLYNK пока нет уверенности*/
#define BLYNK_PRINT Serial
//не надеюсь на значения задействованных GPIO при старте, поэтому
//присваиваю такие , какие хочу получить при старте для блока из 2 реле
const uint8_t RELE1_GPIO=D5; //GPIO 14
const uint8_t RELE1_ON=1;
const uint8_t RELE1_OFF=0;
const uint8_t RELE2_GPIO=D6; //GPIO 12
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SimpleTimer.h>
#define ONE_WIRE_BUS D4 //WEMOS пины D3 и D2 нельзя использ!!!!
int alarmPin = 7; //******************
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//определяю пороги для регулятора температуры в градусах(в двух режимах):
int tmin=15; // 7 - 9градусов - это поддерживаемый минимум температуры котловой воды
int tmax=17; //15-17гр - это заблаговременный (за 4 часа до выезда на дачу) нагрев
char auth[] =
char ssid[] = "";
char pass[] = " ";
BlynkTimer timer; // контроль непрерывности работы девайса.
void myTimerEvent(){
Blynk.virtualWrite(V8, millis() / 2000);}
void setup()
{
Serial.begin(9600);
Serial.println(ESP.getFreeHeap());
Blynk.begin(auth, ssid, pass);
sensors.begin();
//Настройка функции, которая будет вызываться каждую секунду(timer)
timer.setInterval(1000L, myTimerEvent);
timer.setInterval(2500L, sendTemps);
pinMode (RELE1_GPIO, OUTPUT);
pinMode (RELE2_GPIO, OUTPUT);
}
void sendTemps()
{
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
float temp1 = sensors.getTempCByIndex(1);
float temp2 = sensors.getTempCByIndex(2);
delay(2000);
Serial.println(temp );
Blynk.virtualWrite(V3, temp ); delay(100);
Blynk.virtualWrite(V4, temp1 );
Blynk.virtualWrite(V2, temp2 );
//регулятор температуры
if ( temp < tmin)
digitalWrite(RELE1_GPIO,RELE1_ON);
if ( temp > tmax)
digitalWrite(RELE1_GPIO,RELE1_OFF);
}
void mail()
{
// УВЕДОМЛЕНИЯ на смартфон *************************
float temp = sensors.getTempCByIndex(0);
if(temp <= 9)
{
Blynk.email(«……@mail.ru","Температура обратки менее 9C!"); // вызов API Blynk для отправки EMAIL
Blynk.notify(" обратка < 9C!!!»); // вызов API Blynk для отправки уведомлений
}
}
void loop()
{
Blynk.run();
sendTemps();
mail();
timer.run();
}