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

Не могу написать скетч для подключения к Blynk датчика движения HC-SR501

russiano

New member
Хочу написать скетч для вывода в Blynk датчиков влажности DHT-22 и движения HC-SR501(курсач). Если с DHT-22 я разобрался, то с выводом значений с датчика движения возникли трудности. Задумка состоит в том, чтобы при срабатывании датчика движения в Blynk выводилось его состояние и загорался светодиод.
Если есть какие-то идеи, просьба поделиться.
 

Вложения

Ildarmustafin86

Active member
Я конечно дико извиняюсь, что немного не по вашей теме, но было бы намного удобнее просматривать Ваш код не в картинках, а вот так вот например
C++:
Здесь Ваш код
 

russiano

New member
Код:
/*************************************************************

Передача температуры и влажности в сервис Blynk.io

*************************************************************/


// Основные параметры. Выданы сервисом Blynk.Cloud

// Код всегда должен начинаться с этих строк

#define BLYNK_TEMPLATE_ID "TMPLef2oMkx2" //Уникальный идентификатор шаблона

#define BLYNK_DEVICE_NAME "Quickstart Device" //Название устройства IoT

#define BLYNK_AUTH_TOKEN  "sdrp3X9EbhmViNsqfdZnkGoizQAG328x" //Уникальный токен


//Разрешение вывода в монитор порта для отладки.

//В этом скетче не используется. Понадобится при использовании Blynk.Edgent

#define BLYNK_PRINT Serial


//Подключение библиотек

#include <ESP8266WiFi.h>//Библиотека для работы модуля Wi-Fi

#include <BlynkSimpleEsp8266.h>//Библиотека для ESP8266 с сервисом Blynk

#include "DHT.h"

#define DHTTYPE DHT22 //Используем датчик DHT22

#define DHTPIN D8 // Датчик DHT22 подключаем к порту D8

#define PIR D3 // gpio 5 сюда подключаем инфрfкрасный датчик

#define LED D5

//Создаем объект dht с параметрами пина подключения и типа датчика

//Объект dht(DHTPIN,DHTTYPE) класса DHT

DHT dht(DHTPIN, DHTTYPE);

char auth[] = BLYNK_AUTH_TOKEN;//Переменная для токена платы


// Настройки Wi-Fi

char ssid[] = "";// Имя сети

char pass[] = "";//Пароль сети. Нет пароля - ""


//Создаем объект timer класса BlynkTimer

BlynkTimer timer;


bool isFirstConnect = true; // Переменная для хранения состояния первый раз ли установленна связь


bool pirState = false;    // инициализируем пременную для хранения состояния Срабатываия сигнализации датчика движения


// Функция реагирует на событие (изменение) на виртуальном пине

//Изменения происходит в веб-интерфейсе (на сервере) или в мобильном приложении

BLYNK_WRITE(V0)

{

  // К V0 подключен переключатель. Состояние переключателя (1 или 0) считывается

  int value = param.asInt();//в переменную value


  //Обновление состояния виджета на указанном пине

  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);

}

void readPIRSensor() // функция для считывания показаний датчика движения

{                     

  if (PIR == LOW) // Датчик движения не сработал

  {digitalWrite(LED, LOW);

  p == 0}  // читаем значение с цифрового входа

 

                            

  if (PIR == HIGH ) // Датчик Движения сработал

   {digitalWrite(LED, HIGH);

   p == 1} // включаем светодиод на плате

 

 

  Blynk.virtualWrite(V6, p);

  }                                                     



void setup()

{

  //Старт передачи данных в монитор порта.

  //Используется при отладке кода

  Serial.begin(115200);


  //Авторизация на сервере 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);

}


void loop()

{

  Blynk.run();//Запуск сервиса Blynk на плате (запуск функций библиотеки)

  timer.run();//Запуск таймера timer класса BlynkTimer

  //Любой пользовательский код. Не использовать функцию delay()!

}
 
Последнее редактирование модератором:

russiano

New member
Код:
/*************************************************************
Передача температуры и влажности в сервис Blynk.io
*************************************************************/

// Основные параметры. Выданы сервисом Blynk.Cloud
// Код всегда должен начинаться с этих строк
#define BLYNK_TEMPLATE_ID "TMPLef2oMkx2" //Уникальный идентификатор шаблона
#define BLYNK_DEVICE_NAME "Quickstart Device" //Название устройства IoT
#define BLYNK_AUTH_TOKEN  "sdrp3X9EbhmViNsqfdZnkGoizQAG328x" //Уникальный токен

//Разрешение вывода в монитор порта для отладки.
//В этом скетче не используется. Понадобится при использовании Blynk.Edgent
#define BLYNK_PRINT Serial

//Подключение библиотек
#include <ESP8266WiFi.h>//Библиотека для работы модуля Wi-Fi
#include <BlynkSimpleEsp8266.h>//Библиотека для ESP8266 с сервисом Blynk
#include "DHT.h"
#define DHTTYPE DHT22 //Используем датчик DHT22
#define DHTPIN D8 // Датчик DHT22 подключаем к порту D8
#define PIR D3 // gpio 5 сюда подключаем инфрfкрасный датчик
#define LED D5
//Создаем объект dht с параметрами пина подключения и типа датчика
//Объект dht(DHTPIN,DHTTYPE) класса DHT
DHT dht(DHTPIN, DHTTYPE);
char auth[] = BLYNK_AUTH_TOKEN;//Переменная для токена платы

// Настройки Wi-Fi
char ssid[] = "";// Имя сети
char pass[] = "";//Пароль сети. Нет пароля - ""

//Создаем объект timer класса BlynkTimer
BlynkTimer timer;

bool isFirstConnect = true; // Переменная для хранения состояния первый раз ли установленна связь

bool pirState = false;    // инициализируем пременную для хранения состояния Срабатываия сигнализации датчика движения

// Функция реагирует на событие (изменение) на виртуальном пине
//Изменения происходит в веб-интерфейсе (на сервере) или в мобильном приложении
BLYNK_WRITE(V0)
{
  // К V0 подключен переключатель. Состояние переключателя (1 или 0) считывается
  int value = param.asInt();//в переменную value

  //Обновление состояния виджета на указанном пине
  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);
}
void readPIRSensor() // функция для считывания показаний датчика движения
{                    
  if (PIR == LOW) // Датчик движения не сработал
  {digitalWrite(LED, LOW);
  p == 0}  // читаем значение с цифрового входа

                             
  if (PIR == HIGH ) // Датчик Движения сработал
   {digitalWrite(LED, HIGH);
   p == 1} // включаем светодиод на плате
 
 
  Blynk.virtualWrite(V6, p);
  }                                                      


void setup()
{
  //Старт передачи данных в монитор порта.
  //Используется при отладке кода
  Serial.begin(115200);

  //Авторизация на сервере 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);
}

void loop()
{
  Blynk.run();//Запуск сервиса Blynk на плате (запуск функций библиотеки)
  timer.run();//Запуск таймера timer класса BlynkTimer
  //Любой пользовательский код. Не использовать функцию delay()!
}
 

Ildarmustafin86

Active member
У вас есть функция readPIRSensor(). Где вы ее используете? myTemperatureEvent и myHumidityEvent вы используете в таймере, а readPIRSensor()?
 

russiano

New member
в принципе в этом и проблема. Я не знаю, как написать эту часть кода так, чтобы датчик сам работал и давал значение своего состояния в блинк( сработал или нет). Вообще без понятия как связать.
 

russiano

New member
В общем я поискал, как подключить конкретно датчик движения к Blynk, и у меня получилось
Код:
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPLef2oMkx2" //Уникальный идентификатор шаблона
#define BLYNK_DEVICE_NAME "Quickstart Device" //Название устройства IoT
#define BLYNK_AUTH_TOKEN  "sdrp3X9EbhmViNsqfdZnkGoizQAG328x" //Уникальный токен
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = BLYNK_AUTH_TOKEN; //Enter your Blynk application auth token
char ssid[] = ""; //Enter your WIFI name
char pass[] = ""; //Enter your WIFI passowrd
BlynkTimer timer;
int pinValue = 0;

void setup()
{
Serial.begin(115200);
pinMode(D5, OUTPUT); // LED
pinMode(D2, INPUT);  // PIR SENSOR OUTPUT PIN D2
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, notifiaction);
}
BLYNK_WRITE(V0)
{
pinValue = param.asInt();
}
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();
timer.run();
}
 

russiano

New member
Это код для Blynk и Датчика влажности и температуры
Код:
/*************************************************************
Передача температуры и влажности в сервис Blynk.io
 *************************************************************/

// Основные параметры. Выданы сервисом Blynk.Cloud
// Код всегда должен начинаться с этих строк
#define BLYNK_TEMPLATE_ID "TMPLef2oMkx2" //Уникальный идентификатор шаблона
#define BLYNK_DEVICE_NAME "Quickstart Device" //Название устройства IoT
#define BLYNK_AUTH_TOKEN  "sdrp3X9EbhmViNsqfdZnkGoizQAG328x" //Уникальный токен

//Разрешение вывода в монитор порта для отладки.
//В этом скетче не используется. Понадобится при использовании Blynk.Edgent
#define BLYNK_PRINT Serial

//Подключение библиотек
#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

  //Обновление состояния виджета на указанном пине
  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);
}

void setup()
{
  //Старт передачи данных в монитор порта.
  //Используется при отладке кода
  Serial.begin(115200);

  //Авторизация на сервере 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);
}

void loop()
{
  Blynk.run();//Запуск сервиса Blynk на плате (запуск функций библиотеки)
  timer.run();//Запуск таймера timer класса BlynkTimer
  //Любой пользовательский код. Не использовать функцию delay()!
}
 

russiano

New member
Проблема теперь состоит в том, чтобы объединить эти коды, так как в коде для DHT практически всё, что нужно для выведения написано до void setup, а для датчика движения - наоборот. Отличия в кодах большие. Когда пытался объединить, выскакивали всякие разные ошибки. Вот код, где всё вместе:
Код:
/*************************************************************
Передача температуры и влажности в сервис 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()!
}
 

Ildarmustafin86

Active member
А почему вы не можете переместить функцию notifiaction перед setup? Ошибка связана с серийным портом. Может кабель отцепился или еще что
 

russiano

New member
скорее всего, в кабеле тут была проблема. У меня получилось всё вывести в Блинк. Только теперь диод не загорается, хотя в Blynk показывает состояние sensor
 

russiano

New member
С этим я тоже разобрался
Спасибо за помощь. Теперь всё работает, как нужно.
 

russiano

New member
Хотя всё еще нет. В коде есть проблема с кнопкой вкл/выкл в Blynk. Теперь она просто не работает, и вне зависимости от нажатия датчики считывают показания.
Код:
/*************************************************************
Передача температуры и влажности в сервис 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[] = "Sila_Sibiri";// Имя сети
char pass[] = "russiano2453";//Пароль сети. Нет пароля - ""

//Создаем объект 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 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 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 loop()
{
  Blynk.run();//Запуск сервиса Blynk на плате (запуск функций библиотеки)
  timer.run();//Запуск таймера timer класса BlynkTimer
  //Любой пользовательский код. Не использовать функцию delay()!
}
 

Вложения

russiano

New member
Я думаю, что всё дело в функциях int pinValue = 0, int pinValue = param.asInt
pinValue = 0 задает работу вне зависимости от того, нажата ли кнопка в блинке.
 

russiano

New member
Если pinValue = 0, то System is OFF постоянно, если же наоборот поставить pinValue = 1, то диод будет работать и System is ON, но тем не менее от кнопки все равно не зависит
 

Вложения

Сверху Снизу