/*************************************************************
Передача температуры и влажности в сервис Blynk.io
*************************************************************/
// Основные параметры. Выданы сервисом Blynk.Cloud
// Код всегда должен начинаться с этих строк
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLef2oMkx2" //Уникальный идентификатор шаблона
#define BLYNK_DEVICE_NAME "Quickstart Device" //Название устройства IoT
#define BLYNK_AUTH_TOKEN "sdrp3X9EbhmViNsqfdZnkGoizQAG328x" //Уникальный токен
//Разрешение вывода в монитор порта для отладки.
//В этом скетче не используется. Понадобится при использовании Blynk.Edgent
//Подключение библиотек
#include <ESP8266WiFi.h>//Библиотека для работы модуля Wi-Fi
#include <BlynkSimpleEsp8266.h>//Библиотека для ESP8266 с сервисом Blynk
#include "DHT.h"
#define DHTTYPE DHT22 //Используем датчик DHT22
#define DHTPIN D8 // Датчик DHT22 подключаем к порту D8
//Создаем объект dht с параметрами пина подключения и типа датчика
//Объект dht(DHTPIN,DHTTYPE) класса DHT
DHT dht(DHTPIN, DHTTYPE);
char auth[] = BLYNK_AUTH_TOKEN;//Переменная для токена платы
// Настройки Wi-Fi
char ssid[] = "";// Имя сети
char pass[] = "";//Пароль сети. Нет пароля - ""
//Создаем объект timer класса BlynkTimer
BlynkTimer timer;
// Функция реагирует на событие (изменение) на виртуальном пине
//Изменения происходит в веб-интерфейсе (на сервере) или в мобильном приложении
BLYNK_WRITE(V0)
{
// К V0 подключен переключатель. Состояние переключателя (1 или 0) считывается
int value = param.asInt();//в переменную value
int pinValue = param.asInt();
//Обновление состояния виджета на указанном пине
Blynk.virtualWrite(V1, value);//Метка на пине V1 отражает состояние Переключателя
}
// Эта функция вызывается каждый раз, когда плата подключается к облаку Blynk.Cloud
BLYNK_CONNECTED()
{
//На пин V3 подключена WebPage Image Button в мобильном приложении
Blynk.setProperty(V3, "offImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations.png");
Blynk.setProperty(V3, "onImageUrl", "https://static-image.nyc3.cdn.digitaloceanspaces.com/general/fte/congratulations_pressed.png");
Blynk.setProperty(V3, "url", "https://docs.blynk.io/en/getting-started/what-do-i-need-to-blynk/how-quickstart-device-was-made");
}
//Функция отправляет прошедшее время в пин V2
void myTimerEvent()
{
// Функция отправляет время на пин V2
//Нельзя отправлять более 10 значений в секунду
Blynk.virtualWrite(V2, millis() / 1000);
}
//Функция отправляет температуру, измеряемую датчиком в пин V4
void myTemperatureEvent()
{
//Нельзя отправлять более 10 значений в секунду.
//Переменная для температуры в градусах Цельсия
float t = dht.readTemperature();
Blynk.virtualWrite(V4, t);
}
// Функция отправляет влажность, измеряемую датчиком, на пин V5
void myHumidityEvent()
{
float h = dht.readHumidity();
Blynk.virtualWrite(V5, h);
}
int pinValue = 0;
void setup()
{
//Старт передачи данных в монитор порта.
//Используется при отладке кода
Serial.begin(115200);
pinMode(D5, OUTPUT); // LED
pinMode(D2, INPUT); // PIR SENSOR OUTPUT PIN D2
//Авторизация на сервере Blynk.Cloud с указанными параметрами
Blynk.begin(auth, ssid, pass);
dht.begin();//Инициализация работы датчика
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
//Настройка таймера timer. Интервал вызова таймера - 1000 мс.
//Вызываемая функция - myTimerEvent
timer.setInterval(1000L, myTimerEvent);
//Вызов функции отправки температуры
timer.setInterval(2000L, myTemperatureEvent);
//Вызов функции отправки показателя влажности
timer.setInterval(2000L, myHumidityEvent);
timer.setInterval(1000L, notifiaction);
}
void notifiaction()
{
bool sensor = digitalRead(D2); // PIR SENSOR OUTPUT PIN D2
Serial.println(sensor);
if (pinValue == 1)
{
Serial.println("System is ON");
if (sensor == 1)
{
Blynk.notify("WARNING! Please check your security system");
digitalWrite(D5, HIGH); // LED ON
}
else if (sensor == 0)
{
digitalWrite(D5, LOW); // LED OFF
}
}
else if (pinValue == 0)
{
Serial.println("System is OFF");
digitalWrite(D5, LOW); // LED OFF
}
{
Blynk.virtualWrite(V6,sensor);
}
}
void loop()
{
Blynk.run();//Запуск сервиса Blynk на плате (запуск функций библиотеки)
timer.run();//Запуск таймера timer класса BlynkTimer
//Любой пользовательский код. Не использовать функцию delay()!
}