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
Publicar un comentario