Tabla de contenido:

Bandera de buzón con MQTT y Wifi: 7 pasos (con imágenes)
Bandera de buzón con MQTT y Wifi: 7 pasos (con imágenes)

Video: Bandera de buzón con MQTT y Wifi: 7 pasos (con imágenes)

Video: Bandera de buzón con MQTT y Wifi: 7 pasos (con imágenes)
Video: [INFO229] Tutorial RabbitMQ - 30/10/2020 2024, Noviembre
Anonim
Bandera de buzón con MQTT y Wifi
Bandera de buzón con MQTT y Wifi

Nota: actualizado con nuevo firmware, un esquema y consejos para un programador

Hace un par de años me embarqué en mi propio proyecto de domótica. Comenzó construyendo un transmisor de 433 MHz controlado por servidor con un Arduino para cambiar muchos interruptores remotos baratos basados en PT2262. Más tarde agregué un receptor basado en Arduino para mi estación meteorológica, conecté el contacto de control de mi cargador EV, etcétera. Las cosas se volvieron cada vez más entrelazadas (¡y complicadas!). Entonces, hace unos meses decidí estandarizar todo basado en MQTT para mensajería, Node-RED para automatización (ambos ejecutándose en una sola Raspberry Pi B +) y MariaDb para registro (ejecutándose en mi Synology NAS). Luego moví el broker MQTT (Mosquitto) y Node-RED al NAS también.

Este instructivo describe un proyecto tonto por diversión que conecta mi buzón de correo montado en la calle en esta infraestructura hogareña. La idea es que si alguien abre el buzón montado en la cerca a unos 10 metros de la puerta principal, me avise en mi teléfono y posiblemente en otros dispositivos.

Paso 1: descripción, requisitos previos y piezas

Esquema

En un nivel alto, el buzón debe, cuando se abre, enviar un mensaje MQTT único al corredor, para que los suscriptores de ese tema estén informados. Node-RED también se suscribe y realiza cierta automatización, en este caso enviando un correo electrónico y / o un mensaje push a mi teléfono.

El buzón debe funcionar con baterías y funcionar durante al menos un año, y debe hacerlo utilizando mi red WiFi. Como despertar un microcontrolador y conectarse a una red WiFi puede llevar varios segundos, no pude usar el interruptor de activación para cortar la energía. En cambio, se debe permitir que el procesador termine su trabajo después de que la tapa del buzón ya se haya cerrado.

Requisitos previos

Supongo que tiene habilidades de soldadura modestas, ha trabajado un poco con el IDE de Arduino y ha instalado las placas ESP8266 utilizando Boards Manager. También necesita tener un adaptador USB serial de 3.3 voltios para programar el microcontrolador.

También supongo que tiene un corredor MQTT y un servidor Node-RED en ejecución. De lo contrario, hay muchas instrucciones en Internet, pero le aconsejaría que tome la ruta perezosa y use el excelente script de instalación de Peter Scargill si desea ejecutar esto en cualquier Pi o Ubuntu, o use la imagen de Andreas Spiess para Pi Zero W (enlaces en la descripción de ese video), lo que le ahorrará algunas horas de ver la ejecución de los scripts de instalación. Alternativamente, puede hacer que el firmware envíe un correo electrónico directamente, pero perderá mucha flexibilidad al hacerlo.

Partes

  • 1 caja cerrada, 3 pilas AA
  • 2 pilas AA
  • 1 módulo ESP8266. Para este proyecto utilicé un ESP-01
  • 1 microinterruptor
  • 1 resistencia de 47K
  • 1 resistencia 4M7
  • 1 condensador de 2,2 uF
  • 1 tubo de plástico fino. Usé un bolígrafo
  • 1 cerilla larga y gruesa o palito de piruleta. Debe caber y moverse fácilmente en el tubo de plástico.

Paso 2: Hardware: la caja, el interruptor y el cableado

Hardware: la caja, el interruptor y el cableado
Hardware: la caja, el interruptor y el cableado
Hardware: la caja, el interruptor y el cableado
Hardware: la caja, el interruptor y el cableado
Hardware: la caja, el interruptor y el cableado
Hardware: la caja, el interruptor y el cableado

Comencé con una caja de batería vieja de una decoración navideña desaparecida. Fue diseñado para tres pilas de tamaño AA. Como el ESP8266 funcionará bien con 3 voltios, podría usar dos baterías y usar la tercera posición para el microcontrolador. Observe cómo la caja tenía un pequeño compartimento adicional que podía usar para el interruptor de activación. Usé un tipo de interruptor muy común que se muestra en las imágenes, pero quité el resorte que lo sujeta en la posición de encendido o apagado. Soldé dos alambres delgados a los contactos NC y los pegué en la caja con una pequeña gota de superpegamento.

A continuación, perforé un agujero en la tapa superior a juego con un tubo de plástico extraído de un bolígrafo. El orificio se alinea exactamente con el interruptor y guía un émbolo hecho con una varilla de cerilla gruesa.

Finalmente, soldé dos cables más a los contactos de la batería y guié los cuatro cables hasta la posición de la tercera batería, donde iba a estar el microcontrolador.

Paso 3: Hardware: el ESP-01

Hardware: el ESP-01
Hardware: el ESP-01
Hardware: el ESP-01
Hardware: el ESP-01
Hardware: el ESP-01
Hardware: el ESP-01

Dado el requisito de WiFi, todo el proyecto grita ESP8266. Este pequeño controlador WiFi se ha convertido en el caballo de batalla favorito de la comunidad de retoques como un módulo que se puede comprar por menos de 2,50 euros e integra una pila completa de WiFi y TCP / IP, con capacidad más que suficiente para ejecutar sus propios programas. El IDE de Arduino (o Atom con el complemento PlatformIO) es totalmente compatible con ESP8266.

Por lo general, tomaba un ESP-12F, pero tenía una pequeña placa ESP-01 que era perfecta para el trabajo y encaja perfectamente en la caja de la batería. El único problema es que es bastante complicado actualizar el firmware en el ESP-01. Más sobre eso en el siguiente paso. Hay una modificación que hacer: debe quitar el LED de encendido rojo de la placa, ya que consume 3 mA continuamente. Con el LED eliminado, el módulo usa solo unas pocas decenas de uA en modo de sueño profundo, lo que hará que dure más de un año con dos baterías AA de calidad.

Resultó que podía usar dos tiras de conectores hembra de 4 pines y soldar los pocos componentes adicionales en forma libre para poder quitar el ESP-01 para actualizar el firmware, mientras que aún cabía en el tercer compartimento de la batería.

Es muy importante conectar correctamente el ESP. Usando la hoja de trucos anterior, conéctelo de la siguiente manera.

  1. Batería más a Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) y una resistencia de 47K.
  2. Batería menos a GND (A1) y un cable del interruptor.
  3. El otro cable del interruptor a un capacitor de 100nF y una resistencia de 4M7.
  4. Los extremos abiertos de ambas resistencias y el condensador a RST (C2).
  5. TXD (A2) puede permanecer desconectado.

Editar: tuve que reemplazar el ESP-01 porque cometí un error tonto y lo destruí. Resultó que, para mi sorpresa, el nuevo ESP-01 no se reinició con el condensador original de 100nF. Probablemente tenga un diseño ligeramente diferente. Lo reemplacé por uno de 2.2 uF y ahora funciona nuevamente

Cuando termine, todo se puede montar en la caja, pero espere, primero tenemos que programar el módulo.

Paso 4: Programación del ESP-01

Programando el ESP-01
Programando el ESP-01
Programando el ESP-01
Programando el ESP-01
Programando el ESP-01
Programando el ESP-01

Para actualizar el firmware de su ESP-01, puede construir una pequeña plataforma o comprar un programador (casi) completo por aproximadamente 1 euro.

Plataforma de hardware de programación

Construya una pequeña plataforma con dos cabezales hembra de nuevo para el ESP-01. Además, necesita un módulo de serie USB, capaz de proporcionar 3,3 voltios. Tenga en cuenta que el chip ESP8266 no está endurecido a 5 voltios, por lo que un error aquí podría matar su módulo. De todos modos, nuevamente usando la hoja de trucos, cablee su equipo de la siguiente manera:

  1. 3.3V del módulo USBSerial a Vcc, CH_PD, RST y GPIO2.
  2. GND del módulo USBSerial a GND y GPIO0.
  3. TXD del módulo USBSerial a RXD.
  4. RDX del módulo USBSerial a TXD.

Programador de preconstrucción

Por divertido que sea construir sus propias cosas, el enfoque más perezoso es obtener una interfaz ESP-01-a-serial de su sitio de subastas favorito, vea la imagen de arriba. Esto es mucho más fácil, más compacto y más confiable que una plataforma. Sin embargo, algunos de ellos no son programadores, solo interfaces seriales. Necesita soldar un puente de alambre entre GND (pin A1) y GPIO0 (pin C1) en la parte trasera de la interfaz, vea la segunda imagen. Tenga en cuenta que el ESP-01 debe enchufarse con la antena orientada hacia el conector USB, ¡no al revés!

Nota: también existen con un interruptor, ver tercera foto, muy bonito.

Cargue el firmware

Suponiendo un IDE de Arduino de 1.8.3 o posterior, seleccione Herramientas> Placa y seleccione la placa que tiene. Para un ESP-01 como el que usé, elija "Módulo ESP8266 genérico" y configure las siguientes opciones (estas deberían ser todas las predeterminadas):

  1. Modo de flash: DIO
  2. Frecuencia de flash: 40 MHz
  3. Frecuencia de CPU: 80 MHz
  4. Tamaño del flash: 512 KB (64 KB SPIFFS) Nota: si utiliza una placa ESP-01 negra, elija 1 MB (64 KB SPIFFS)
  5. Puerto de depuración: deshabilitado
  6. Nivel de depuración: ninguno
  7. Método de reinicio: ck
  8. Velocidad de subida 115200
  9. Puerto: seleccione el puerto que está conectado a su interfaz serie USB. Para mi PC con Ubuntu que era / dev / ttyUSB0

Conecte el equipo / programador, cargue el Sketch que puede encontrar aquí https://gitlab.com/jeroenmeijer/Mailbox.git. Proporcione sus credenciales de corredor WiFi y MQTT y su configuración de IP en config.h y elija Cargar.

Paso 5: ensamblarlo todo

Ensamblando todo
Ensamblando todo

Perforé un agujero para el tubo de plástico en la tapa interior de mi buzón, lo más cerca posible de la bisagra, luego pegué con pegamento caliente la caja de la batería en la parte inferior de esa tapa. Luego utilicé una cerilla gruesa como desatascador. Utilicé una tijera para cortar el fósforo a la medida necesaria para que el interruptor se abriera si la tapa exterior estaba cerrada. Verifiqué la conectividad abriendo la tapa mientras ejecutaba mosquitto_sub para monitorear los mensajes MQTT (reemplace mqttbroker, usuario y contraseña con su configuración MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat / #" -u usuario -P contraseña

Aproximadamente seis segundos después de que se abre la tapa exterior, se publica el siguiente mensaje MQTT. El tiempo se usa para despertar el microcontrolador y establecer la conexión WiFi y el corredor.

stat / mailbox / trigger {"vcc": 3050, "flap": true, "prev": 0, "RSSI": 29, "version": "005"}

Durante este tiempo, el microcontrolador usó aproximadamente 70 mA. Cuando termina, entra en sueño profundo y en mi caso usó menos de 20uA. "flap" siempre es cierto, "vcc" indica el voltaje de la batería en mV y "prev" debe ser 0. Si es 1 o 2, significa que el buzón no pudo enviar un mensaje antes, ya sea porque no pudo conectarse a el WiFi, o porque no se pudo conectar al broker MQTT. "RSSI" es la fuerza de la señal WiFi. Ambos son muy útiles para diagnosticar problemas.

Es una buena idea controlar el voltaje de la batería durante unos días para asegurarse de que el dispositivo funcione según lo previsto y no agote la batería por algún motivo.

El firmware también puede actualizarse por aire (OTA), pero eso está un poco más allá del alcance de este instructable. Para los interesados, la configuración de OTA también está en config.h.

Paso 6: Usar Node-RED para actuar sobre el mensaje MQTT

Uso de Node-RED para actuar sobre el mensaje MQTT
Uso de Node-RED para actuar sobre el mensaje MQTT

Finalmente, creé un flujo simple en Node-RED. El primer nodo se suscribe al tema del buzón (stat / postbox / trigger). Cuando se recibe un mensaje, el segundo nodo formatea un correo electrónico *). El nodo final lo envía a mi dirección de gmail, usando gmail como servidor SMTP. Entonces mi teléfono me alertará de correo nuevo.

He agregado el flujo Node-RED a un fragmento de gitlab para que pueda importarlo a sus flujos Node-RED.

Por supuesto, puede agregar algunos nodos más, por ejemplo, para registrar los eventos del buzón en MariaDb o SqlLite, o crear alarmas adicionales cuando el voltaje de la batería desciende por debajo de 2,7 voltios.

¡Feliz búsqueda de correo!

*) Vea la página siguiente, estoy usando PushBullet ahora en lugar del correo electrónico.

Paso 7: Pensamientos posteriores

Siempre existe la sensación de que las cosas podrían haberse hecho mejor.

Cambiar

Hubiera preferido usar un (super) imán y un contacto de lengüeta en lugar del enfoque algo torpe del émbolo. Hubo dos razones. Una es que no había forma de que pudiera hacer que esto funcionara con el contacto cerrándose cuando se abría la caja, y tenerlo siempre cerrado significaba que siempre fluiría una pequeña corriente. En retrospectiva, el flujo de menos de 1uA a través de la resistencia 4M7 no habría sido un gran problema en términos de duración de la batería. El otro era más práctico. Inventé este proyecto el sábado y escribí el software, lo construí todo el domingo a partir de lo que había por ahí. Simplemente no tenía un contacto de lengüeta en la caja de basura.

Nota: como comentó diy_bloke, los contactos de lengüeta tienden a volverse pegajosos cuando se magnetizan durante mucho tiempo, por lo que tal vez el émbolo no fue tan mala idea. Veremos. *)

Mensaje al vaciar

El buzón también envía un mensaje al vaciarlo. Esto no es gran cosa, pero con más personas en la casa recibiendo la advertencia, uno podría terminar revisando el buzón desafiando todo su propósito. Hay algunas formas de evitar esto, como verificar si la tapa interior está levantada y, de ser así, no enviar un mensaje. O en lugar de usar el interruptor de la tapa, instale un detector en la parte inferior del buzón. O un pequeño botón de reinicio para presionar al vaciarlo. Sin embargo, todo complicaría las cosas y probablemente empeoraría la fiabilidad.

Mensajería

Enviar correo electrónico es una forma bastante eficaz pero burda de enviar la advertencia. Una forma más elegante sería una aplicación de teléfono, pero no he encontrado una aplicación de panel de control MQTT de Android que pueda configurarse para activar una alerta del sistema operativo cuando se recibe un determinado mensaje. Si hay uno, agréguelo a los comentarios. **)

*) Después de más de un año en funcionamiento, resulta que el palito de paleta que utilicé, básicamente papel enrollado duro, tiende a acortarse bajo la presión constante del resorte del interruptor. Después de solucionar algunos problemas, lo reemplacé con un palo de madera.

**) Estoy usando PushBullet ahora para mensajes push, separado del tablero de MQTT. Aquí se pueden encontrar pequeñas interfaces bajas de Node-RED para la API. Asegúrese de proporcionar el token de acceso en el nodo "Preparar para pushbullet" y su dirección de correo electrónico para fines de respaldo en el nodo "Reintentar".

Recomendado: