• Система автоматизации с открытым исходным кодом на базе 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, но тем не менее от кнопки все равно не зависит
 

Вложения

Сверху Снизу