ALARMA ESP32 IOT CON SINRIC PRO






 CODIGO ARDUINO


#include <Wire.h>
#include <LiquidCrystal_I2C.h>  //Downlaod the library: http://www.electronoobs.com/eng_arduino_liq_crystal.php
LiquidCrystal_I2C lcd(0x27,16,2);  //SCL = D1     SDA = D2
#include <RTClib.h> // for the RTC
RTC_DS3231 rtc;     // crea objeto del tipo RTC_DS3231
char daysOfTheWeek[7][12] = {"Domin", "Lunes", "Mart", "Mierc", "Juev", "Viern", "Sabad"};

#ifdef ENABLE_DEBUG
  #define DEBUG_ESP_PORT Serial
  #define NODEBUG_WEBSOCKETS
  #define NDEBUG
#endif

#include <Arduino.h>
#if defined(ESP8266)
  #include <ESP8266WiFi.h>
#elif defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
  #include <WiFi.h>
#endif

#include "SinricPro.h"
#include "SinricProSwitch.h"

#define WIFI_SSID         "FLIA ROYERO HOYOS.EXT"    
#define WIFI_PASS         "32852065"
#define APP_KEY           "699082fa-651d-4542-b74c-0e35c371dff4"      // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx"
#define APP_SECRET        "722fc766-8aeb-4a78-b983-5252417eeb18-c928a382-b3db-46e9-bbdf-d620680dfead"   // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx"

#define SWITCH_ID_1       "62fac034db27003734195d91"    // ALARMA - DRONACTIVOS
#define SWITCH_ID_2       "6209518c923117df0dc5575a"    // EMERGENCIA - DRONACTIVOS
#define SWITCH_ID_3       "YOUR-DEVICE-ID"    // Should look like "5dc1564130xxxxxxxxxxxxxx"
#define SWITCH_ID_4       "YOUR-DEVICE-ID"    // Should look like "5dc1564130xxxxxxxxxxxxxx"

#define BAUD_RATE         115200                // Change baudrate to your need
bool myPowerState1 = false;
bool myPowerState2 = false;

#define Rele 23   //D3
int EstadoSistema = 1;
int EstadoSirena = 0;
int EstadoPanicoF = 0;
float Temperatura = 0;
int estadoRF = 0;
long previousMillis = 0;        
long intervalOn = 90000;
#define RF 12  //Pin donde esta conectado el receptor rx480e4 - pin VT
#define ARMADO 14 //PIN DONDE LLEGA UN PULSO DEL RECEPTOR RX480E4 AL PRESIONAR EL BOTON A DEL REMOTO
#define DESARMADO 27
#define PinPanico 26
#define PinExtra 25
#define LedR 4
#define LedG 17
#define LedB 5
int inicio = 0;

bool onPowerState1(const String &deviceId, bool &state) {
  Serial.printf("Device 1 turned %s\r\n", state?"on":"off");
  myPowerState1 = state;
  if(myPowerState1 == 1){
    SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1]; //SWITCH_ID_1 // send powerstate event
    mySwitch1.sendPowerStateEvent(myPowerState1); // send the new powerState to SinricPro server
    armado();
    }
  if(myPowerState1 == 0){
  desarmado();}
  //digitalWrite(LedR, !myPowerState1?LOW:HIGH);
  Serial.print("myPowerState1= ");
  Serial.println(myPowerState1);
  return true; // request handled properly
}

bool onPowerState2(const String &deviceId, bool &state) {
  Serial.printf("Device 2 turned %s\r\n", state?"on":"off");
  myPowerState2 = state;
  if(myPowerState2 == 1){
      EstadoPanicoF = 1;
      Serial.print("BOTON DE PANICO = ");
      Serial.println(EstadoPanicoF);
      digitalWrite (LedR, HIGH);//*******************
      digitalWrite (LedG, LOW);
      digitalWrite (LedB, LOW);
      digitalWrite (Rele, HIGH);
      }
  if(myPowerState2 == 0){
      EstadoPanicoF = 0;
      Serial.print("BOTON DE PANICO = ");
      Serial.println(EstadoPanicoF);
      digitalWrite (LedR, LOW);//*******************
      digitalWrite (LedG, LOW);
      digitalWrite (LedB, LOW);
      digitalWrite (Rele, LOW);
      }
  //digitalWrite(LedG, !myPowerState2?LOW:HIGH);
  Serial.print("myPowerState2= ");
  Serial.println(myPowerState2);
  return true; // request handled properly
}

bool onPowerState3(const String &deviceId, bool &state) {
  Serial.printf("Device 3 turned %s\r\n", state?"on":"off");
  return true; // request handled properly
}

bool onPowerState4(const String &deviceId, bool &state) {
  Serial.printf("Device 4 turned %s\r\n", state?"on":"off");
  return true; // request handled properly
}


// setup function for WiFi connection
void setupWiFi() {
  Serial.printf("\r\n[Wifi]: Connecting");
  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.printf(".");
    delay(250);
  }

  Serial.printf("connected!\r\n[WiFi]: IP-Address is %s\r\n", WiFi.localIP().toString().c_str());
}


void setupSinricPro() {
 
  SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1]; // add devices and callbacks to SinricPro
  mySwitch1.onPowerState(onPowerState1);
  SinricProSwitch& mySwitch2 = SinricPro[SWITCH_ID_2];
  mySwitch2.onPowerState(onPowerState2);
  SinricProSwitch& mySwitch3 = SinricPro[SWITCH_ID_3];
  mySwitch3.onPowerState(onPowerState3);
  SinricProSwitch& mySwitch4 = SinricPro[SWITCH_ID_4];
  mySwitch4.onPowerState(onPowerState4);

  SinricPro.onConnected([](){ Serial.printf("Connected to SinricPro\r\n"); });
  SinricPro.onDisconnected([](){ Serial.printf("Disconnected from SinricPro\r\n"); });
  SinricPro.begin(APP_KEY, APP_SECRET);
}

void setup() {
  Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n");
  delay(100);
  Wire.begin( );                // GDY200622
  lcd.init();
  lcd.backlight();
  lcd.print("Iniciando...");
  pinMode(RF, INPUT); //Aqui debe estar conectado el Vt del receptor RX480E4
  pinMode(PinPanico, INPUT);
  pinMode(PinExtra, INPUT);
  pinMode (Rele, OUTPUT);
  pinMode(ARMADO, INPUT);
  pinMode(DESARMADO, INPUT);
  pinMode(LedR, OUTPUT);
  pinMode(LedG, OUTPUT);
  pinMode(LedB, OUTPUT);
  digitalWrite (LedR, LOW);
  digitalWrite (LedG, LOW);
  digitalWrite (LedB, LOW);
  digitalWrite(Rele, HIGH); // RELE QUE ACTIVA LA SIRENA
  delay (600);
  digitalWrite(Rele, LOW);
  delay (5000);  //ESPERA 5 SEGUNDOS PARA SALIR Y ARMAR
  digitalWrite(Rele, HIGH);
  delay (200);
  digitalWrite(Rele, LOW);
  setupWiFi();
  setupSinricPro();
 
  if(!rtc.begin()) {
    //Serial.println(F("Couldn't find RTC"));
     while(1);
  }
  lcd.clear();
  //armado();
  }

void loop() {
  Fecha_hora();
 
  if(EstadoPanicoF == 1){
      digitalWrite (LedR, HIGH);//*******************
      digitalWrite (LedG, LOW);
      digitalWrite (LedB, LOW);
      digitalWrite (Rele, HIGH);
  }
 
  if(digitalRead(PinPanico)== HIGH){
      myPowerState2 = 1;
      EstadoPanicoF = 1;
       SinricProSwitch& mySwitch2 = SinricPro[SWITCH_ID_2]; //SWITCH_ID_1 // send powerstate event
       mySwitch2.sendPowerStateEvent(myPowerState2); // send the new powerState to SinricPro server
      Serial.print("BOTON DE PANICO = ");
      Serial.println(EstadoPanicoF);
      previousMillis = millis(); //Solo pasara si en boton esta en HIGH. Si esta en LOW el bucle no hara esta accion.
      estadoRF = 0;
      }
       
    if (digitalRead(ARMADO) == HIGH){
       armado();
       //SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1]; //SWITCH_ID_1 // send powerstate event
       //mySwitch1.sendPowerStateEvent(myPowerState1); // send the new powerState to SinricPro server
      }
    if (digitalRead(DESARMADO) == HIGH){
     desarmado();
     
       SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1]; //SWITCH_ID_1 // send powerstate event
       mySwitch1.sendPowerStateEvent(myPowerState1); // send the new powerState to SinricPro server
       SinricProSwitch& mySwitch2 = SinricPro[SWITCH_ID_2]; //SWITCH_ID_1 // send powerstate event
       mySwitch2.sendPowerStateEvent(myPowerState2); // send the new powerState to SinricPro server
    }
    if (digitalRead(RF) == HIGH){
      estadoRF = 1;}


  if((EstadoSistema == 1) && (estadoRF == 1) && (EstadoPanicoF == 0)){
    Serial.println("INTRUSO DETECTADO");
    Serial.print("EstadoSistema = ");
    Serial.println(EstadoSistema);
    Serial.print("EstadoPanicoF = ");
    Serial.println(EstadoPanicoF);
    Serial.print("EstadoRF = ");
    Serial.println(estadoRF);
    Serial.print("EstadoSirena = ");
    Serial.println(EstadoSirena);
    digitalWrite(Rele, HIGH);
    digitalWrite (LedR, HIGH);//*******************
    digitalWrite (LedG, LOW);
    digitalWrite (LedB, LOW);
      previousMillis = millis(); //Solo pasara si en boton esta en HIGH. Si esta en LOW el bucle no hara esta accion.
      estadoRF = 0;
      EstadoSirena = 1;
      }
 
   if(millis() - previousMillis >= intervalOn) {   // Mientras (estado = 1) millis aumentara con cada pasada del bucle y previusMillis se mantendra
     digitalWrite (Rele, LOW);
     //Serial.println("FIN DEL TIEMPO MILIS ALARMA");
     estadoRF = 0;
     EstadoSirena = 0;
     EstadoPanicoF = 0;
     }

    if((EstadoSistema == 1) && (estadoRF == 0) && (EstadoSirena == 0) && (EstadoPanicoF == 0)){
     Serial.println("SISTEMA ARMADO - LED ROJO");
     digitalWrite (LedR, HIGH);
     digitalWrite (LedG, LOW);//*************
     digitalWrite (LedB, LOW);
    }
    if((EstadoSistema == 0) && (EstadoPanicoF == 0) && (estadoRF == 0) && (EstadoSirena == 0)){
     Serial.println("SISTEMA DESARMADO - LED AZUL");
     digitalWrite (LedR, LOW);
     digitalWrite (LedG, LOW);
     digitalWrite (LedB, LOW);
     digitalWrite (Rele, LOW);
    }

  SinricPro.handle();
    if(inicio <= 300){
    inicio = inicio + 1;
    Serial.print("Inicio = ");
    Serial.println(inicio);
    if(inicio == 295){
    Serial.print("ENVIANDO...");
    myPowerState1 = 1;
    delay(100);
    SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1]; //SWITCH_ID_1 // send powerstate event
    mySwitch1.sendPowerStateEvent(myPowerState1); // send the new powerState to SinricPro server
    delay(100);
     }
    }
}



void Fecha_hora(){
          DateTime now = rtc.now();       // funcion que devuelve fecha y horario en formato
          if((now.second()==0) || (now.minute()==0) || (now.hour()==0)){
            lcd.init();
            //delay(100);
          }
          lcd.setCursor(0,0); //columna, fila
          lcd.print(now.day(), DEC);          // funcion que obtiene el dia de la fecha completa
          lcd.print("/");         // caracter barra como separador
          lcd.print(now.month(), DEC);        // funcion que obtiene el mes de la fecha completa
          lcd.print("/");         // caracter barra como separador
          lcd.print(now.year(), DEC);       // funcion que obtiene el año de la fecha completa
          lcd.setCursor(0,1);
          lcd.print(now.hour(), DEC);       // funcion que obtiene la hora de la fecha completa
          lcd.print(":");         // caracter dos puntos como separador
          lcd.print(now.minute(), DEC);       // funcion que obtiene los minutos de la fecha completa
          lcd.print(":");         // caracter dos puntos como separador
          lcd.print(now.second(), DEC);     // funcion que obtiene los segundos de la fecha completa
          lcd.setCursor(11,0);
          lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
          lcd.setCursor(9,1);
          Temperatura = rtc.getTemperature();
          lcd.print(Temperatura);
          lcd.setCursor(14,1);
          lcd.print(" C");
           }

          void armado(){
  EstadoSistema = 1;        // ALARMA ARMADA SENSANDO EN ESPERA - EL ESTADO 1 LO ASIGNA AL PRESIONAR A Y SOLO EN ESTE LOS SENSORES PUEDEN ACTIVAR
  EstadoPanicoF = 0;
  estadoRF = 0;
  EstadoSirena = 0;
  myPowerState1 = 1;
  myPowerState2 = 0;
  SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1]; //SWITCH_ID_1 // send powerstate event
        mySwitch1.sendPowerStateEvent(myPowerState1); // send the new powerState to SinricPro server
        delay(300);
        digitalWrite(Rele, HIGH); // RELE QUE ACTIVA LA SIRENA
        delay (600);
        digitalWrite(Rele, LOW);
        delay (5000);  //ESPERA 5 SEGUNDOS PARA SALIR Y ARMAR
        digitalWrite(Rele, HIGH);
        delay (200);
        digitalWrite(Rele, LOW);
        delay(50);
        Serial.println("SISTEMA ARMADO");
        Serial.print("EstadoSistema = ");
        Serial.println(EstadoSistema);
        Serial.print("EstadoPanicoF = ");
        Serial.println(EstadoPanicoF);
        Serial.print("EstadoRF = ");
        Serial.println(estadoRF);
        Serial.print("EstadoSirena = ");
        Serial.println(EstadoSirena);
       
         }


void desarmado(){
      EstadoPanicoF = 0;
      EstadoSistema = 0;
      estadoRF = 0;  
      EstadoSirena = 0;
      myPowerState1 = 0;
      myPowerState2 = 0;
        digitalWrite(Rele, HIGH); // RELE QUE ACTIVA LA SIRENA
        digitalWrite (LedG, HIGH);
        delay (100);
        digitalWrite(Rele, LOW);
        digitalWrite (LedG, LOW);
        delay (100);
        digitalWrite(Rele, HIGH); //SIRENA ACTIVADA
        digitalWrite (LedG, HIGH);
        delay (100);
        digitalWrite(Rele, LOW);
        digitalWrite (LedG, LOW);
        delay (100);
        digitalWrite(Rele, HIGH); // SIRENA ACTIVADA
        digitalWrite (LedG, HIGH);
        delay (100);
        digitalWrite(Rele, LOW);
        digitalWrite (LedG, LOW);
        delay(50);
        Serial.println("SISTEMA DESARMADO");
        Serial.print("EstadoSistema = ");
        Serial.println(EstadoSistema);
        Serial.print("EstadoPanicoF = ");
        Serial.println(EstadoPanicoF);
        Serial.print("EstadoRF = ");
        Serial.println(estadoRF);
        Serial.print("EstadoSirena = ");
        Serial.println(EstadoSirena);        
          }

Comentarios

Entradas populares de este blog

CLASIFICADOR DE COLORES CON SENSOR TCS3472 (I2C) CON ARDUINO NANO

PROTOTIPO - CONTROL DE ACCESO CON RFID + TECLADO CON ALMACENAMIENTO EN MICRO SD

CONTROL DE ACCESO CON RFID YMODULO RTC DS3231