#include <WiFi.h>
#include <PubSubClient.h>
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const char* mqtt_server = "http://localhost:1880/#flow/23d8b974229158bb"; // Dirección del servidor HiveMQ
const int mqtt_port = 1883; // Puerto MQTT (puerto predeterminado)
const char* mqtt_user = "96a6d18e96b648cf"; // Nombre de usuario MQTT (deja en blanco si no es necesario)
const char* mqtt_password = ""; // Contraseña MQTT (deja en blanco si no es necesario)
const char* mqtt_topic = "ALARMA";
const int PIR_PIN = 14; // Pin del sensor PIR
const int LED_PIN = 2; // Pin del LED
const int BUZZER_PIN = 4; // Pin del zumbador
WiFiClient espClient;
PubSubClient client(espClient);
bool alarmaActivada = false;
void setup() {
pinMode(PIR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
Serial.begin(115200);
Serial.println("Alarma desactivada. Esperando detección de movimiento...");
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int motion = digitalRead(PIR_PIN);
if (motion == HIGH) {
if (!alarmaActivada) {
alarmaActivada = true;
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
Serial.println("Movimiento detectado. Alarma activada.");
client.publish(mqtt_topic, "Movimiento detectado");
}
delay(5000);
} else {
if (alarmaActivada) {
alarmaActivada = false;
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
Serial.println("No hay movimiento. Alarma desactivada.");
client.publish(mqtt_topic, "No hay movimiento. Alarma desactivada.");
}
}
}
void setup_wifi() {
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando a la red WiFi...");
}
Serial.println("Conectado a la red WiFi");
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensaje recibido en el tema: ");
Serial.println(topic);
Serial.print("Contenido del mensaje: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() {
while (!client.connected()) {
Serial.print("Conectando a Node-red...");
if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
Serial.println("conectado");
client.subscribe(mqtt_topic);
} else {
Serial.print("falló, rc=");
Serial.print(client.state());
Serial.println(" intentando de nuevo en 5 segundos");
delay(5000);
}
}
}