Добрый день! Существует программатор и исполнительное устройство. См. фото ниже: Исполнительное устройство имеет: esp-8266 реле - на GPIO2 ( через транзисторный ключ ) кнопку - на GPO0 Исполнительное устройство должно работать по принципу: Нажатие на кнопку, включается реле, повторное нажатие выключается. При этом должна быть возможность управлять через internet. Кто в этом разбирается, напишите.
Держи бесплатно!Ненужное удали а нужное исправь под свой esp8266 Код (C++): #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <SimpleTimer.h> #include <OneWire.h> #include <SPI.h> #include <Ethernet.h> #include <DallasTemperature.h> #include <WidgetRTC.h> #include <dht11.h> dht11 DHT; // определение входов/выходов на плате ESP8266 (ESP-12F/E) #define DHT11_PIN 12 // gpio12 датчик темп. DHT-11 #define ONE_WIRE_BUS 13 // gpio13 датчик температуры DS2B18 или куча датчиков #define Light_PIN 4 // gpio4 реле на включение света #define Electro_PIN 15 // gpio15 реле на выключение розетки #define PIR_PIN 5 // gpio5 // определение пина на выход датчика движения HC-SR501 #define BLYNK_MAX_SENDBYTES 600 // увеличить размер сообщений (по умолчанию 128) // цвета виджетов на смартфоне // здесь все просто – каждые 2 цифры в 16-тиричном коде соответствуют R,G и B // кодировки цвета, я в CorelDraw окрасил прямоугольник в нужный цвет // записал значения R,G и B, перевел в 16-тиричный код #define BLYNK_GREEN "#23C48E" #define BLYNK_BLUE "#04C0F8" #define BLYNK_YELLOW "#ED9D00" #define BLYNK_RED "#D3435C" #define BLYNK_DARK_BLUE "#5F7CD8" #define BLYNK_WHITE "#FFFFFF" #define BLYNK_CYAN "#99F7F1" #define BLYNK_YELLOW_L "#E7F799" #define BLYNK_ROSE "#F7B599" #define BLYNK_FIOLET "#F799F2" #define BLYNK_GREEN_L "#99F7B4" OneWire oneWire(ONE_WIRE_BUS); // привязка OneWare-коммуникации к пину на плате DallasTemperature sensors(&oneWire); // привязка датчиков DS2B18 к шине OneWare // персональные данные char auth[] = "*****"; //код авторизации в Blynk char ssid[] = "*****"; //название вашей сети Wi-Fi char pass[] = "*****"; //пароль вашего Wi-Fi SimpleTimer timer; WidgetRTC rtc; // инициализируем виджет часов реального времени // все переменные по свету, сигнализации и датчика движения HC-SR501 bool flagAlarm = false; // произошло проникновение (сигнал с датчика) bool flagSetAlarm = false; // постановка на сигнализацию (сигнал с выджета "кнопка" на смартфоне) bool flagAlarmPrevious = false; // состояние по фронтам сигнала от датчика движения bool flagLightOn = false; // свет в корридоре постоянно включить (сигнал с выджета "кнопка" на смартфоне) bool isFirstConnect = true; bool LIG = false; int lightLev; BLYNK_CONNECTED()// Если установили связь первый раз, то синхонезируем все виджеты { rtc.begin(); if (isFirstConnect) { Blynk.syncAll(); // синхонезируем все виджеты if (year() != 1970) { // Составляем строки с временем и датой и добовляем их к сообщению String currentTime = String(hour()) + ":" + minute() + ":" + second(); String currentDate = String(day()) + "/" + month() + "/" + year() + " "; String Notif_first = "Оборудование Запущено " + currentDate + " " + currentTime; Blynk.notify(Notif_first); isFirstConnect = false; } } } void setup() { Serial.begin(9600); // See the connection status in Serial Monitor Blynk.begin(auth, ssid, pass); sensors.begin(); pinMode(Light_PIN,OUTPUT); pinMode(Electro_PIN,OUTPUT); pinMode(PIR_PIN,INPUT); setSyncInterval(10*60); timer.setInterval(5000L, sendUptime); // задаем 5 сек. } BLYNK_WRITE(V0) // Считываем состояние кнопки "Alarm_On" { if (param.asInt() == 1) { flagSetAlarm =true; Blynk.setProperty(V0,"onLabel","Объект на охране"); Blynk.setProperty(V0,"color",BLYNK_RED); } else { flagSetAlarm =false; Blynk.setProperty(V0,"offLabel","Снят с охраны"); Blynk.setProperty(V0,"color",BLYNK_GREEN); Blynk.setProperty(V0,"label","Охрана Объекта"); } } //BLYNK_WRITE(V0) BLYNK_WRITE(V1) // Считываем состояние кнопки "включить свет" { if (param.asInt() == 1) { flagLightOn =true; Blynk.setProperty(V1,"onLabel","Свет горит"); Blynk.setProperty(V1,"color",BLYNK_YELLOW_L); } else { flagLightOn =false; Blynk.setProperty(V1,"offLabel","Свет - auto mode"); Blynk.setProperty(V1,"color",BLYNK_WHITE); } } // BLYNK_WRITE(V1) BLYNK_WRITE(V2) // Считываем состояние кнопки "выключить розетку" { if (param.asInt() == 1) { digitalWrite(Electro_PIN,HIGH); // выключаем розетку, поскольку контакты рэле Н.З. Blynk.setProperty(V2,"onLabel","Розетка отключена"); Blynk.setProperty(V2,"color",BLYNK_RED); } else { digitalWrite(Electro_PIN,LOW); Blynk.setProperty(V2,"offLabel","Розетка включена"); Blynk.setProperty(V2,"color",BLYNK_BLUE); } } // BLYNK_WRITE(V2) BLYNK_WRITE(V3) // Считываем пороговую уставку уровня освещенности по которой включаем свет (при срабатывании датчика движения) { lightLev = param.asInt(); } // BLYNK_WRITE(V3) void readPIRSensor() // функция для считывания показаний датчика движения { if (digitalRead(PIR_PIN) == HIGH) { flagAlarm = true; } else { flagAlarm = false; } if ((flagAlarm) && (!flagAlarmPrevious)) { flagAlarmPrevious = true; LIG = true; if (lightLev < analogRead(A0)) { LIG = false; } if(flagSetAlarm) { // Составляем строки с временем и датой и добовляем их к сообщению String currentTime = String(hour()) + ":" + minute() + ":" + second(); String currentDate = String(day()) + "/" + month() + "/" + year() + " "; String Notif = currentDate + " " + currentTime + " - проникновение"; Blynk.notify(Notif); //String curMes = "Проникновение - " + currentTime; Blynk.setProperty(V0,"label",Notif); } } if ((!flagAlarm) && (flagAlarmPrevious)) { flagAlarmPrevious = false; LIG = false; delay(200); //на всякий случай - время для восстановления параметров датчика освещенности после выключения света, на случай датчик движения выкл. и бысто вкл. } } // readPIRSensor // программа обработки иннформации от датчиков температуры // по заданному интервалу времени, у нас раз в 5 сек., см. строку 82 (поскольку датчик температуры DHT11 - тормознутый) void sendUptime() { //параметры отсылаем в Blynk Blynk.virtualWrite(10, DHT.temperature - 2); //virtual pin 10 - температура в корридоре Blynk.virtualWrite(11, DHT.humidity); // virtual pin 11 - влажность в корридоре Blynk.virtualWrite(12,analogRead(A0)); // virtual pin 12 освещенность в корридоре sensors.requestTemperatures(); // запрос от сенсоров ds2b18 float tempAir = sensors.getTempCByIndex(0); // получение информ. от сенсора 1 Blynk.virtualWrite(13, tempAir); // virtual pin 13 - температура на улице } void loop() { Blynk.run(); // Initiates Blynk timer.run(); // Initiates SimpleTimer readPIRSensor(); if (flagLightOn) { digitalWrite(Light_PIN,HIGH);//если мы из Blynk нажали клавишу вкл. свет - вкл. свет в безакцептном порядке } else { if (LIG) { digitalWrite(Light_PIN,HIGH); // включаем свет если сработал датчик движения и уровень освещенности меньше установленного в Blynk } else { digitalWrite(Light_PIN,LOW); // выключаем свет } } int chk = DHT.read(DHT11_PIN); // чтение с сенсора DHT11 }