esp-8266 ( 01 ) необходимо управление по Internet

Тема в разделе "Закажу проект", создана пользователем Den Kiva, 24 авг 2018.

  1. Den Kiva

    Den Kiva Нерд

    Добрый день!
    Существует программатор и исполнительное устройство.
    См. фото ниже:
    Фото с текстом.jpeg

    Исполнительное устройство имеет:
    esp-8266
    реле - на GPIO2 ( через транзисторный ключ )
    кнопку - на GPO0

    Исполнительное устройство должно работать по принципу:
    Нажатие на кнопку, включается реле, повторное нажатие выключается.
    При этом должна быть возможность управлять через internet.


    Кто в этом разбирается, напишите.
     

    Вложения:

  2. iodev

    iodev Нуб

    Здравствуйте, готов реализовать.
    Пишите: iodev.pro@gmail.com
    Telegram: @bnk12
     
  3. Den Kiva

    Den Kiva Нерд

    Пишите номер вацап, так проще, у меня +7-775-935-55-55
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Держи бесплатно!Ненужное удали а нужное исправь под свой 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
    }
     
     
    ostrov и Den Kiva нравится это.
  5. Den Kiva

    Den Kiva Нерд

    Спасибо! Спасибо!