Taula de continguts:

Marcador de la bústia de correu amb tecnologia MQTT i Wifi: 7 passos (amb imatges)
Marcador de la bústia de correu amb tecnologia MQTT i Wifi: 7 passos (amb imatges)

Vídeo: Marcador de la bústia de correu amb tecnologia MQTT i Wifi: 7 passos (amb imatges)

Vídeo: Marcador de la bústia de correu amb tecnologia MQTT i Wifi: 7 passos (amb imatges)
Vídeo: V.O. Complete. An educational look at the creation of the Internet. Vinton Cerf 2024, Desembre
Anonim
Marcador de bústia de correu amb tecnologia MQTT i Wifi
Marcador de bústia de correu amb tecnologia MQTT i Wifi

Nota: s'actualitza amb un nou firmware, un esquema i consells per a un programador

Un parell d’anys em vaig embarcar en el meu propi projecte domòtic. Va començar creant un transmissor de 433 MHz controlat pel servidor amb un Arduino per canviar molts commutadors remots basats en PT2262. Més tard, vaig afegir un receptor basat en Arduino per a la meva estació meteorològica, vaig connectar el contacte de control del meu carregador EV, etc. Les coses creixien cada cop més entrellaçades (i complicades!). Així doncs, fa uns mesos vaig decidir estandarditzar tot basat en MQTT per a missatgeria, Node-RED per a automatització (ambdues funcionant en un únic Raspberry Pi B +) i MariaDb per a registre (executant-se al meu Synology NAS). Més tard, també vaig traslladar el broker MQTT (Mosquitto) i Node-RED al NAS.

Aquest instructiu descriu un projecte ximple i divertit que connecta la meva bústia de correu muntada al carrer en aquesta infraestructura domèstica. La idea és que si algú obre la bústia de correu muntada a la tanca a uns 10 metres de la porta d’entrada, em senyalitza al telèfon i, possiblement, a altres dispositius.

Pas 1: Esquema, requisits previs i parts

Esquema

En un nivell alt, la bústia hauria d’enviar un missatge MQTT únic al corredor quan s’obri, de manera que se n’informi els subscriptors d’aquest tema. Node-RED també es subscriu i fa certa automatització, en aquest cas enviant un missatge de correu electrònic i / o un missatge push al meu telèfon.

La bústia hauria de funcionar amb bateries i funcionar durant un any com a mínim i hauria de fer-ho mitjançant la meva xarxa WiFi. Com que despertar un microcontrolador i connectar-se a una xarxa WiFi pot trigar uns quants segons, no he pogut utilitzar l’interruptor d’activació per tallar l’alimentació. En lloc d'això, s'hauria de permetre que el processador acabi el seu negoci després que la tapa de la bústia ja s'hagi tancat.

Prerequisits

Suposo que teniu una modesta capacitat de soldar, heu treballat una mica amb l'IDE d'Arduino i heu instal·lat les plaques ESP8266 mitjançant el gestor de plaques. També heu de tenir un adaptador sèrie USB de 3,3 volts per programar el microcontrolador.

També suposo que teniu un corredor MQTT i un servidor Node-RED funcionant. Si no, hi ha moltes instruccions a Internet, però us aconsellaria fer una ruta mandrosa i utilitzar l'excel·lent script d'instal·lació de Peter Scargill si voleu executar-ho en qualsevol Pi o Ubuntu, o bé utilitzar la imatge d'Andreas Spiess per al Pi Zero W (enllaços a la descripció d’aquest vídeo), cosa que us estalviarà unes quantes hores de veure executar els scripts d’instal·lació. Com a alternativa, podeu fer que el firmware enviï un correu electrònic directament, però perdrà molta flexibilitat en fer-ho.

Parts

  • 1 caixa de bateries tancada, 3 AA
  • 2 piles AA
  • 1 mòdul ESP8266. Per a aquest projecte he utilitzat un ESP-01
  • 1 microinterruptor
  • 1 resistència de 47K
  • 1 resistència 4M7
  • 1 condensador de 2.2uF
  • 1 tub prim de plàstic. Vaig utilitzar un bolígraf
  • 1 llumí gruixut o bastó de piruleta. Ha d’adaptar-se i moure’s fàcilment al tub de plàstic

Pas 2: Maquinari: caixa, commutador i cablejat

Maquinari: la caixa, el commutador i el cablejat
Maquinari: la caixa, el commutador i el cablejat
Maquinari: la caixa, el commutador i el cablejat
Maquinari: la caixa, el commutador i el cablejat
Maquinari: la caixa, el commutador i el cablejat
Maquinari: la caixa, el commutador i el cablejat

Vaig començar amb una antiga caixa de bateries d’una decoració nadalenca desapareguda. Va ser dissenyat per a tres bateries de mida AA. Com que l’ESP8266 funcionarà bé a 3 volts, podria utilitzar dues bateries i utilitzar la tercera posició per al microcontrolador. Fixeu-vos que la caixa tenia un petit compartiment addicional que podia utilitzar per a l’interruptor d’activació. He utilitzat un tipus d’interruptor molt comú que es mostra a les imatges, però he tret la molla que el bloqueja a la posició d’encès o apagat. Vaig soldar dos cables fins als contactes NC i els vaig enganxar a la caixa amb una petita gota de súper cola.

A continuació, vaig perforar un forat a la coberta superior que coincidia amb un tub de plàstic extret d’un bolígraf. El forat s’alinea exactament amb l’interruptor i guia un émbol fet amb un pal gruixut de llumins.

Finalment, he soldat dos cables més als contactes de la bateria i he guiat els quatre cables cap a la posició de la tercera bateria, on hi hauria de ser el microcontrolador.

Pas 3: Maquinari: l'ESP-01

Maquinari: l’ESP-01
Maquinari: l’ESP-01
Maquinari: l’ESP-01
Maquinari: l’ESP-01
Maquinari: l’ESP-01
Maquinari: l’ESP-01

Donat el requisit de WiFi, tot el projecte crida ESP8266. Aquest petit controlador WiFi s’ha convertit en el cavall de batalla preferit de la comunitat que fa jocs com a mòdul que es compra a menys de 2,50 EUR i integra una pila WiFi i TCP / IP completa, amb una capacitat més que suficient per executar els vostres propis programes. L’Arduino IDE (o Atom amb el connector PlatformIO) admet totalment l’ESP8266.

Normalment agafava un ESP-12F, però tenia una petita placa ESP-01 que era perfecta per al treball i s’adapta molt bé a la caixa de la bateria. L'únic problema és que és bastant complicat fer flash de firmware a l'ESP-01. Més informació al següent pas. Hi ha una modificació que cal fer: heu de treure el LED d’alimentació vermell de la placa, ja que dibuixa contínuament 3 mA. Amb el LED eliminat, el mòdul utilitza només unes poques desenes d’UA en mode deepsleep, que durarà més d’un any amb dues bateries AA de qualitat.

Va resultar que podia fer servir dues tires de capçaleres femelles de 4 pins i soldar els pocs components addicionals de forma gratuïta per poder treure l’ESP-01 per actualitzar el microprogramari, tot i que encara cabia al tercer compartiment de la bateria.

És molt important connectar correctament l'ESP. Feu servir el full de trucs anterior per connectar-lo de la manera següent.

  1. Bateria més a Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) i una resistència de 47K.
  2. Bateria menys a GND (A1) i un cable del commutador.
  3. L'altre cable del commutador a un condensador 100nF i una resistència 4M7.
  4. Els extrems oberts de les dues resistències i el condensador a RST (C2).
  5. TXD (A2) pot romandre sense connexió.

Edició: Vaig haver de substituir l'ESP-01 perquè vaig cometre un error ximple i el vaig destruir. Va resultar que, per sorpresa meva, el nou ESP-01 no es va reiniciar amb el condensador 100nF original. Probablement té un disseny lleugerament diferent. El vaig substituir per un 2.2 uF i ara torna a funcionar

En acabar, tot es pot muntar a la caixa, però espereu, primer hem de programar el mòdul.

Pas 4: Programació de l'ESP-01

Programació de l'ESP-01
Programació de l'ESP-01
Programació de l'ESP-01
Programació de l'ESP-01
Programació de l'ESP-01
Programació de l'ESP-01

Per llançar el firmware del vostre ESP-01, podeu construir un equip petit o comprar un programador (gairebé) complet per aproximadament 1 euro.

Plataforma de maquinari de programació

Construeix una petita plataforma amb dues capçaleres femenines de nou per a l’ESP-01. A més, necessiteu un mòdul USB de sèrie, capaç de proporcionar 3,3 volts. Tingueu en compte que el xip ESP8266 no està endurit a 5 volts, de manera que un error aquí podria acabar amb el vostre mòdul. De totes maneres, usant de nou el full de trucs, connecteu el vostre equip de la manera següent:

  1. 3,3 V del mòdul USBSerial a Vcc, CH_PD, RST i GPIO2.
  2. GND del mòdul USBSerial a GND i GPIO0.
  3. TXD del mòdul USBSerial a RXD.
  4. RDX del mòdul USBSerial a TXD.

Programador previ a la construcció

Per divertit que sigui crear el vostre propi material, l’enfocament més mandrós és obtenir una interfície ESP-01 de sèrie des del vostre lloc de subhastes preferit. Vegeu la imatge superior. Això és molt més fàcil, compacte i fiable que una plataforma. Tanmateix, alguns d’aquests no són programadors, només interfícies en sèrie. Cal soldar un pont de filferro entre GND (pin A1) i GPIO0 (pin C1) a la part posterior de la interfície, vegeu la segona imatge. Tingueu en compte que l’ESP-01 s’ha de connectar amb l’antena cap al connector USB, no al revés.

Nota: també existeixen amb un interruptor, vegeu la tercera imatge, molt maca.

Carregueu el firmware

Suposant un IDE Arduino de 1.8.3 o posterior, seleccioneu Eines> Tauler i seleccioneu la placa que teniu. Per a un ESP-01 com he utilitzat, trieu "Mòdul ESP8266 genèric" i configureu les opcions següents (haurien de ser tots els valors predeterminats):

  1. Mode de flaix: DIO
  2. Freqüència de flaix: 40 MHz
  3. Freqüència de la CPU: 80 MHz
  4. Mida del flaix: 512 KB (64 KB SPIFFS) Nota: si utilitzeu una placa ESP-01 negra, trieu 1 MB (64 KB SPIFFS)
  5. Port de depuració: desactivat
  6. Nivell de depuració: cap
  7. Mètode de restabliment: ck
  8. Velocitat de càrrega 115200
  9. Port: seleccioneu el port connectat a la vostra interfície sèrie USB. Per al meu PC Ubuntu que era / dev / ttyUSB0

Connecteu l’equip / programador, carregueu l’esbós que podeu trobar aquí https://gitlab.com/jeroenmeijer/Mailbox.git. Proporcioneu les vostres credencials d’agent WiFi i MQTT i la vostra configuració d’IP a config.h i trieu Penja.

Pas 5: Muntatge de tot

Muntant-ho tot
Muntant-ho tot

Vaig perforar un forat per al tub de plàstic de la tapa interior de la bústia, el més a prop possible de la frontissa, i després vaig enganxar la caixa de la bateria a la part inferior d’aquesta tapa. A continuació, vaig fer servir un llumí gruixut com a pistó. Vaig fer servir un retall per tallar la llumina de manera que l’interruptor s’obrís si es tapava la tapa exterior. Vaig comprovar la connectivitat obrint la tapa mentre executava mosquitto_sub per supervisar els missatges MQTT (substituïu mqttbroker, usuari i contrasenya per la vostra configuració MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat / #" -u usuari -P contrasenya

Aproximadament sis segons després d'obrir la tapa exterior, es publica el següent missatge MQTT. Es fa servir el temps per activar el microcontrolador i establir la connexió WiFi i broker.

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

Durant aquest temps, el microcontrolador va utilitzar aproximadament 70 mA. En acabar, entra en son profund i, en el meu cas, utilitza menys de 20uA. "flap" sempre és cert, "vcc" indica que el voltatge de la bateria en mV i "prev" hauria de ser 0. Si és 1 o 2, significa que la bústia de correu no ha pogut enviar un missatge abans, ja sigui perquè no es podia connectar a el WiFi, o perquè no es podia connectar al broker MQTT. "RSSI" és la força del senyal WiFi. Tots dos són molt útils per diagnosticar problemes.

És una bona idea controlar el voltatge de la bateria durant uns quants dies per assegurar-vos que el dispositiu funcioni tal com es volia i que no esgoti la bateria per algun motiu.

El microprogramari també es pot actualitzar per si mateix (OTA), però això està una mica més enllà de l’abast d’aquest instructiu. Per als interessats, la configuració OTA també es troba a config.h.

Pas 6: utilitzar Node-RED per actuar sobre el missatge MQTT

Utilitzant Node-RED per actuar sobre el missatge MQTT
Utilitzant Node-RED per actuar sobre el missatge MQTT

Finalment, he creat un flux senzill a Node-RED. El primer node es subscriu al tema de la bústia de correu (stat / postbox / trigger). Quan es rep un missatge, el segon node forma un correu electrònic *). L’últim node l’envia a la meva adreça de Gmail, fent servir gmail com a servidor SMTP. Aleshores, el meu telèfon m’avisarà del correu electrònic nou.

He afegit el flux Node-RED a un fragment de gitlab perquè pugueu importar-lo als vostres fluxos Node-RED.

Per descomptat, podeu afegir alguns nodes més, per exemple per registrar els esdeveniments de la bústia de correu a MariaDb o SqlLite, o crear alarmes addicionals quan el voltatge de la bateria baixi de 2,7 volts.

Feliç caça de correu!

*) Vegeu la pàgina següent, ara estic fent servir PushBullet en lloc de correu electrònic.

Pas 7: reflexions posteriors

Sempre hi ha aquesta sensació que les coses s’haurien pogut fer millor.

Interruptor

Hauria preferit utilitzar un (súper) imant i un contacte de canya en lloc de l’enfocament de l’èmbol una mica maldestre. Hi havia dues raons. Una d’elles és que no hi havia cap manera de fer funcionar això amb el tancament del contacte quan es va obrir la caixa, i que sempre estigués tancada significava que sempre fluiria un petit corrent. Retrospectivament, els menys d’1uA que circulen per la resistència 4M7 no haurien estat un gran problema en termes de durada de la bateria. L’altra era més pràctica. Vaig inventar aquest projecte dissabte i vaig escriure el programari, vaig construir-ho tot diumenge a partir del que hi havia al voltant. Simplement no tenia cap contacte de canya a la caixa brossa.

Nota: com comentava diy_bloke, els contactes de canya tendeixen a quedar-se enganxosos quan s’imanten durant molt de temps, de manera que potser l’èmbol no era una idea tan dolenta. Veurem. *)

Missatge sobre el buidatge

La bústia també envia un missatge en buidar-lo. Això no és un gran problema, però amb més gent de la casa rebent l'avís, es pot acabar en un bucle comprovant la bústia de correu desafiant tot el seu propòsit. Hi ha algunes maneres d’evitar-ho, com ara comprovar si s’aixeca la tapa interior i, si és així, no envieu cap missatge. O en lloc d’utilitzar l’interruptor de la tapa, instal·leu un detector a la part inferior de la bústia. O bé un petit botó de restabliment per prémer en buidar-lo. Tot i això, tot complicaria les coses i probablement empitjoraria la fiabilitat.

Missatgeria

L’enviament de correu electrònic és una manera bastant eficaç però crua de publicar l’advertència. Una manera més elegant seria una aplicació per a telèfons, però no he trobat cap aplicació de tauler de control Android MQTT que es pugui configurar per activar una alerta del sistema operatiu quan es rebi un missatge determinat. Si n’hi ha algun, afegiu-lo als comentaris. **)

*) Després de més d'un any en funcionament, resulta que el pal de piruletes que vaig utilitzar, bàsicament paper laminat dur, té tendència a escurçar-se sota la pressió constant del moll de l'interruptor. Després d'algunes solucions de problemes, el vaig substituir per un pal de fusta.

**) Ara faig servir PushBullet per a missatges push, separats del tauler de MQTT. Aquí es pot trobar una petita interfície Node-RED baixa a l'API. Assegureu-vos que proporcioneu el testimoni d’accés al node "Prepara per a pushbullet" i la vostra adreça de correu electrònic amb finalitats alternatives al node "Torna-ho a provar".

Recomanat: