
Primera Publicación
Este es el contenido de mi primera publicación en el blog.
Leer másEn Mechardo Labs me apasiona crear soluciones IoT innovadoras que integren hardware y software de forma fluida. En mi hogar, encontré un antiguo sistema de alarma inactivo, con sensores y sirenas cuyas conexiones convergían en un punto central. Aprovechando esta infraestructura, diseñé un sistema de alarma IoT avanzado utilizando un broker MQTT, una placa ESP32 con ESPHome para la gestión del hardware, y un puente (bridge) en Rust para proporcionar una interfaz robusta. Este sistema permite enviar notificaciones en tiempo real (por ejemplo, a través de Telegram), combinando fiabilidad, escalabilidad y una experiencia de usuario optimizada.
El proyecto mqtt-IOT-alarm
es un sistema de alarma IoT basado en MQTT diseñado para monitorear
tres sensores de movimiento distribuidos en la casa y dos sensores de apertura de puerta, uno adelante y
otro
atrás. Todos estos sensores se conectan a un ESP32 con conector USB tipo C (se utilizó un adaptador para una
correcta lectura).
Para adaptar la conexión de los sensores se requiere utilizar 12 V de alimentación, y dado que los sensores funcionan como interruptores, se reduce la tensión a la salida para que el ESP32 pueda leerla correctamente. Se empleó un divisor resistivo en la salida del sensor (reduciendo a 3.3 V) y se agregó un capacitor como filtro pasa bajos. Para las sirenas, se utilizó un par de relés que actúan como desacoplo de señales. Por último, se conectó el receptor de un timbre inalámbrico directamente a la placa.
ESPHome es una plataforma de código abierto que simplifica la programación de dispositivos ESP32 y ESP8266 para aplicaciones IoT. Su configuración basada en YAML nos permitió definir rápidamente los sensores y actuadores sin escribir código C++ de bajo nivel. Además, ESPHome se integra fácilmente con MQTT y permite actualizaciones OTA (over the air).
esphome:
name: esp32-mqtt-alarm
esp32:
board: esp32dev
wifi:
ssid: "wifi-ssid"
password: "wifi-password"
logger:
api:
ota:
platform: esphome
mqtt:
broker: "192.168.100.2"
port: 1883
on_message:
- topic: "alarm/exterior"
payload: "ON"
then:
- logger.log: "Activando sirena EXTERIOR (GPIO16)"
- output.turn_on: pin16
- topic: "alarm/exterior"
payload: "OFF"
then:
- logger.log: "Desactivando sirena EXTERIOR (GPIO16)"
- output.turn_off: pin16
- topic: "alarm/interior"
payload: "ON"
then:
- logger.log: "Activando sirena INTERIOR (GPIO17)"
- output.turn_on: pin17
- topic: "alarm/interior"
payload: "OFF"
then:
- logger.log: "Desactivando sirena INTERIOR (GPIO17)"
- output.turn_off: pin17
output:
- platform: gpio
pin: 16
id: pin16
- platform: gpio
pin: 17
id: pin17
binary_sensor:
- platform: gpio
pin: 33
name: "Bell Button"
id: bell_button
on_press:
- logger.log: "Botón del timbre presionado. Publicando MQTT..."
- mqtt.publish:
topic: "bell"
payload: "ON"
Esta configuración publica los eventos de los sensores al broker MQTT y permite controlar las sirenas remotamente a través de tópicos MQTT.
La pieza clave de software es un programa en Rust que actúa como puente entre los sensores/actuadores y los usuarios (yo). El ESP32 envía datos de los sensores mediante mensajes MQTT al broker local (Mosquitto). El programa Rust se suscribe a los tópicos de interés y ejecuta la lógica definida cada vez que recibe un mensaje. Gracias al modelo pub/sub de MQTT, el hardware y el software están desacoplados: los dispositivos publican datos en el broker y el servicio en Rust los recibe al suscribirse a esos tópicos.
rumqttc
para
conectarse al broker MQTT. Se inicializan las opciones de conexión (MqttOptions
), se crea
un
cliente y se suscribe a los tópicos relevantes (por ejemplo alarm/motion
,
alarm/door
).
tokio::main
, lanzando una
tarea que procesa eventloop.poll()
de manera continua y no bloqueante. Esto permite manejar
múltiples mensajes en paralelo sin afectar la respuesta en tiempo real.
El proyecto mqtt-IOT-alarm
fue una experiencia emocionante en la construcción de un sistema de
alarma IoT completamente local. Al combinar el rendimiento de Rust en el puente MQTT, la simplicidad de
ESPHome en el ESP32, y la flexibilidad de Telegram para notificaciones, creamos una solución confiable y
fácil de usar. Este proyecto demuestra el poder de integrar herramientas de código abierto con desarrollo
personalizado para resolver problemas reales del hogar.