108 lines
2.9 KiB
C++
108 lines
2.9 KiB
C++
#include <WiFi.h>
|
|
#include <PubSubClient.h>
|
|
|
|
const char PROGMEM *SSID = "LOTUS"; // Nombre del WiFi
|
|
const char PROGMEM *password = "tupapatetocaen64"; // Contraseña del Wifi
|
|
|
|
int Pir_Pin = 2; // Pines que controlan los sensores
|
|
int SENSOR = 3;
|
|
int buzzer_pin = 4;
|
|
const char PROGMEM *ID = "Alarma"; //Nombre del dispositivo
|
|
const char PROGMEM *TOPIC = "Sistema de Alarmas"; //Nombre del topico suscrito
|
|
|
|
IPAddress broker(192,168,1,15); //Direccion ip del corredor MQTT
|
|
WiFiClient wclient;
|
|
|
|
PubSubClient client(wclient); //Configurar el cliente MQTT
|
|
bool state=0;
|
|
|
|
// Conectar al Wifi-------------------------
|
|
void setup_wifi() {
|
|
Serial.print("\nConnecting to ");
|
|
|
|
|
|
WiFi.begin("LOTUS", "tupapatetocaen64"); // Conectarse a la RED
|
|
|
|
while (WiFi.status() != WL_CONNECTED) { // Esperar por la coneccion
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
|
|
Serial.println();
|
|
Serial.println("WiFi connected");
|
|
Serial.print("IP address: ");
|
|
Serial.println(WiFi.localIP());
|
|
}
|
|
|
|
// Volver a conectarse con el cliente------------------------
|
|
void reconnect() {
|
|
// Bucle hasta que nos volvamso a conectar-----------------
|
|
while (!client.connected()) {
|
|
Serial.print("Attempting MQTT connection...");
|
|
// intenta conectarte
|
|
if (client.connect(ID)) {
|
|
Serial.println("connected");
|
|
Serial.print("Publishing to: ");
|
|
Serial.println(TOPIC);
|
|
Serial.println('\n');
|
|
|
|
} else {
|
|
Serial.println(" try again in 5 seconds");
|
|
// esperar 5 segundos antes de volver a intentar
|
|
delay(5000);
|
|
}
|
|
}
|
|
}
|
|
//Comienzo del codigo principal----------------
|
|
void setup() {
|
|
Serial.begin(115200); // Inicie la comunicacion en serie a 115200 baudios
|
|
pinMode(Pir_Pin,INPUT); // Configurar los sensores como entrada
|
|
pinMode(SENSOR, INPUT);
|
|
pinMode(buzzer_pin, OUTPUT);
|
|
delay(100);
|
|
setup_wifi();
|
|
client.setServer(broker, 1883);
|
|
}
|
|
|
|
void loop() {
|
|
if (!client.connected()) // Vuelve a conectar si se pierde la conexion
|
|
{
|
|
reconnect();
|
|
}
|
|
client.loop();
|
|
|
|
// Si el detector de movimiento capta algo------------------
|
|
if(digitalRead(Pir_Pin) == HIGH)
|
|
{
|
|
digitalWrite(buzzer_pin, HIGH);
|
|
Serial.println("¡Intrusos!");
|
|
state = !state; //alternar estado
|
|
if(state == 1) // Prendido
|
|
{
|
|
client.publish(TOPIC, "on");
|
|
Serial.println((String)TOPIC + " => on");
|
|
}
|
|
else
|
|
{
|
|
digitalWrite(buzzer_pin, LOW);
|
|
Serial.println("Modo vigilante");
|
|
Serial.println((String)TOPIC + " => off");
|
|
}
|
|
//Si el detector magnetico capta algo--------
|
|
digitalWrite(buzzer_pin, !digitalRead(SENSOR));
|
|
{
|
|
state = !state; //alternar estado
|
|
if(state == 1) // Prendido
|
|
{
|
|
client.publish(TOPIC, "on");
|
|
Serial.println((String)TOPIC + " => on");
|
|
}
|
|
else
|
|
{
|
|
Serial.println("Modo vigilante");
|
|
Serial.println((String)TOPIC + " => off");
|
|
}
|
|
}
|
|
}
|
|
}
|