Sommario:

Bandiera della casella di posta alimentata MQTT e Wi-Fi: 7 passaggi (con immagini)
Bandiera della casella di posta alimentata MQTT e Wi-Fi: 7 passaggi (con immagini)

Video: Bandiera della casella di posta alimentata MQTT e Wi-Fi: 7 passaggi (con immagini)

Video: Bandiera della casella di posta alimentata MQTT e Wi-Fi: 7 passaggi (con immagini)
Video: Informatica Smart - Lezione 005 - Backstage (21/03/2021) 2024, Luglio
Anonim
Flag cassetta postale alimentata MQTT e Wi-Fi
Flag cassetta postale alimentata MQTT e Wi-Fi

Nota: aggiornato con un nuovo firmware, uno schema e suggerimenti per un programmatore

Da un paio d'anni ho intrapreso il mio progetto di domotica. È iniziato costruendo un trasmettitore a 433 MHz controllato dal server con un Arduino per commutare molti interruttori remoti basati su PT2262 economici. Successivamente ho aggiunto un ricevitore basato su Arduino per la mia stazione meteorologica, collegato il contatto di controllo del mio caricatore EV, ecc. Le cose si sono sempre più intrecciate (e complicate!). Quindi, alcuni mesi fa ho deciso di standardizzare tutto in base a MQTT per la messaggistica, Node-RED per l'automazione (entrambi in esecuzione su un singolo Raspberry Pi B+) e MariaDb per la registrazione (in esecuzione sul mio Synology NAS). Successivamente ho spostato anche il broker MQTT (Mosquitto) e Node-RED sul NAS..

Questo istruibile descrive un progetto sciocco per divertimento che aggancia la mia cassetta postale montata su strada in questa infrastruttura domestica. L'idea è che se qualcuno apre la cassetta postale montata sul recinto a circa 10 metri dalla porta d'ingresso, mi segnala sul mio telefono e possibilmente su altri dispositivi.

Passaggio 1: struttura, prerequisiti e parti

Contorno

Ad alto livello, la casella di posta dovrebbe, una volta aperta, inviare un messaggio MQTT univoco al broker, in modo che gli abbonati a quell'argomento vengano informati. Anche Node-RED si iscrive e fa un po' di automazione, in questo caso invia un'e-mail e/o un messaggio push al mio telefono.

La casella di posta dovrebbe funzionare a batterie e funzionare per almeno un anno, e dovrebbe farlo utilizzando la mia rete WiFi. Poiché il risveglio di un microcontrollore e la connessione a una rete WiFi possono richiedere diversi secondi, non ho potuto utilizzare l'interruttore di attivazione per interrompere l'alimentazione. Invece, il processore dovrebbe essere autorizzato a terminare la sua attività dopo che il coperchio della cassetta postale è già stato chiuso.

prerequisiti

Presumo che tu abbia modeste capacità di saldatura, abbia lavorato un po' con l'IDE Arduino e abbia installato le schede ESP8266 utilizzando Boards Manager. È inoltre necessario disporre di un adattatore seriale USB da 3,3 volt per programmare il microcontrollore.

Presumo anche che tu abbia un broker MQTT e un server Node-RED in esecuzione. In caso contrario, ci sono molte istruzioni su Internet, ma consiglierei di seguire la strada pigra e utilizzare l'eccellente script di installazione di Peter Scargill se si desidera eseguirlo su qualsiasi Pi o Ubuntu, oppure utilizzare l'immagine di Andreas Spiess per il Pi Zero W (collegamenti nella descrizione di quel video), che ti farà risparmiare alcune ore di visualizzazione degli script di installazione in esecuzione. In alternativa, puoi fare in modo che il firmware invii direttamente un'e-mail, ma perderai molta flessibilità nel farlo.

Parti

  • 1 scatola chiusa, 3 batterie AA
  • 2 batterie AA
  • 1 modulo ESP8266. Per questo progetto ho usato un ESP-01
  • 1 microinterruttore
  • 1 resistenza da 47K
  • 1 resistenza 4M7
  • 1 condensatore da 2.2uF
  • 1 tubo di plastica sottile. ho usato una penna
  • 1 fiammifero spesso e lungo o un bastoncino per lecca-lecca. Dovrebbe adattarsi e muoversi facilmente nel tubo di plastica

Passaggio 2: hardware: scatola, interruttore e cablaggio

Hardware: scatola, interruttore e cablaggio
Hardware: scatola, interruttore e cablaggio
Hardware: scatola, interruttore e cablaggio
Hardware: scatola, interruttore e cablaggio
Hardware: scatola, interruttore e cablaggio
Hardware: scatola, interruttore e cablaggio

Ho iniziato con una vecchia scatola di batterie da una defunta decorazione natalizia. È stato progettato per tre batterie AA. Poiché ESP8266 funzionerà bene a 3 volt, potrei usare due batterie e utilizzare la terza posizione per il microcontrollore. Nota come la scatola aveva un piccolo scomparto extra che potevo usare per l'interruttore di attivazione. Ho usato un tipo di interruttore molto comune mostrato nelle immagini, ma ho rimosso la molla che lo blocca in posizione di accensione o spegnimento. Ho saldato due fili sottili ai contatti NC e l'ho incollato nella scatola con una piccola goccia di super colla.

Successivamente, ho praticato un foro nel coperchio superiore in corrispondenza di un tubo di plastica preso da una penna a sfera. Il foro si allinea esattamente con l'interruttore e guida uno stantuffo realizzato con uno spesso bastoncino di fiammifero.

Infine, ho saldato altri due fili ai contatti della batteria e ho guidato tutti e quattro i fili nella posizione della terza batteria, dove doveva essere il microcontrollore.

Passaggio 3: hardware: ESP-01

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

Dato il requisito WiFi, l'intero progetto grida ESP8266. Questo piccolo controller WiFi è diventato il cavallo di battaglia preferito dalla comunità di armeggiare come modulo acquistabile a meno di 2,50 EUR e integra uno stack WiFi e TCP/IP completo, con una capacità più che sufficiente per eseguire i propri programmi. L'IDE Arduino (o Atom con il plug-in PlatformIO) supporta completamente ESP8266.

Di solito prendevo un ESP-12F, ma avevo una piccola scheda ESP-01 in giro che era perfetta per il lavoro e si adattava bene alla scatola della batteria. L'unico problema è che è abbastanza complicato eseguire il flashing del firmware nell'ESP-01. Maggiori informazioni su questo nel prossimo passaggio. C'è una modifica da fare: devi rimuovere il LED di alimentazione rosso dalla scheda, poiché assorbe continuamente 3 mA. Con il LED rimosso, il modulo utilizza solo poche decine di uA in modalità deepsleep che lo farà durare per oltre un anno con due batterie AA di qualità.

Si è scoperto che potevo usare due strisce di intestazioni femminili a 4 pin e saldare sui pochi componenti extra in forma libera in modo da poter rimuovere l'ESP-01 per aggiornare il firmware, mentre si adattava ancora al terzo vano batteria.

È molto importante cablare correttamente l'ESP. Usando il cheat sheet sopra, collegalo come segue.

  1. Batteria più a Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) e un resistore da 47K.
  2. Batteria negativa a GND (A1) e un filo dell'interruttore.
  3. L'altro filo dell'interruttore a un condensatore da 100nF e un resistore 4M7.
  4. Le estremità aperte di entrambi i resistori e il condensatore a RST (C2).
  5. TXD (A2) può rimanere scollegato.

Modifica: ho dovuto sostituire l'ESP-01 perché ho commesso un errore stupido e l'ho distrutto. Si è scoperto che con mia sorpresa il nuovo ESP-01 non si è ripristinato con il condensatore originale da 100 nF. Probabilmente ha un design leggermente diverso. L'ho sostituito con uno da 2,2 uF e ora funziona di nuovo

Al termine, tutto può essere montato nella scatola, ma aspetta, prima dobbiamo programmare il modulo.

Passaggio 4: programmazione dell'ESP-01

Programmazione dell'ESP-01
Programmazione dell'ESP-01
Programmazione dell'ESP-01
Programmazione dell'ESP-01
Programmazione dell'ESP-01
Programmazione dell'ESP-01

Per eseguire il flashing del firmware sul tuo ESP-01, puoi costruire un piccolo impianto o acquistare un programmatore (quasi) completo per circa 1 euro.

Rig hardware di programmazione

Costruisci un piccolo impianto con ancora due intestazioni femminili per ESP-01. Inoltre, è necessario un modulo seriale USB, in grado di fornire 3,3 volt. Nota che il chip ESP8266 non è temprato a 5 volt, quindi un errore qui potrebbe uccidere il tuo modulo. Ad ogni modo, sempre usando il cheat sheet, cabla il tuo rig come segue:

  1. 3.3V dal modulo USBSerial a Vcc, CH_PD, RST e GPIO2.
  2. GND del modulo USBSerial a GND e GPIO0.
  3. TXD del modulo USBSerial a RXD.
  4. RDX del modulo USBSerial a TXD.

Programmatore precompilato

Per quanto sia divertente costruire le tue cose, l'approccio più pigro è ottenere un'interfaccia da ESP-01 a seriale dal tuo sito di aste preferito, vedi l'immagine sopra. Questo è molto più semplice, più compatto e più affidabile di un rig. Tuttavia, alcuni di questi non sono programmatori, solo interfacce seriali. È necessario saldare un ponte di filo tra GND (pin A1) e GPIO0 (pin C1) sul retro dell'interfaccia, vedere la seconda immagine. Nota che ESP-01 deve essere collegato con l'antenna rivolta verso la presa USB, non il contrario!

Nota: esistono anche con interruttore, vedi terza foto, molto carine.

Carica il firmware

Supponendo un IDE Arduino di 1.8.3 o successivo, seleziona Strumenti > Scheda e seleziona la scheda che hai. Per un ESP-01 come quello che ho usato, scegli "Modulo generico ESP8266" e imposta le seguenti opzioni (queste dovrebbero essere tutte le impostazioni predefinite):

  1. Modalità flash: DIO
  2. Frequenza flash: 40 MHz
  3. Frequenza CPU: 80 MHz
  4. Dimensione flash: 512 KB (64 KB SPIFFS) Nota: se si utilizza una scheda ESP-01 nera, scegliere 1 MB (64 KB SPIFFS)
  5. Porta di debug: disabilitata
  6. Livello di debug: nessuno
  7. Metodo di ripristino: ck
  8. Velocità di caricamento 115200
  9. Porta: seleziona la porta che è collegata alla tua interfaccia seriale USB. Per il mio PC Ubuntu che era /dev/ttyUSB0

Collega il rig/programmatore, carica lo Sketch che trovi qui https://gitlab.com/jeroenmeijer/Mailbox.git. Fornisci le credenziali del tuo broker WiFi e MQTT e la tua configurazione IP in config.h e scegli Carica.

Passaggio 5: assemblare il tutto

Assemblare il tutto
Assemblare il tutto

Ho praticato un foro per il tubo di plastica nel coperchio interno della mia cassetta della posta, il più vicino possibile alla cerniera, quindi ho incollato a caldo la scatola della batteria sul lato inferiore di quel coperchio. Successivamente ho usato un fiammifero spesso come stantuffo. Ho usato una cesoia per tagliare il fiammifero a misura in modo che l'interruttore si aprisse se il coperchio esterno fosse chiuso. Ho controllato la connettività aprendo il coperchio durante l'esecuzione di mosquitto_sub per monitorare i messaggi MQTT (sostituisci mqttbroker, utente e password con la tua configurazione MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u utente -P password

Circa sei secondi dopo l'apertura del coperchio esterno viene pubblicato il seguente messaggio MQTT. Il tempo viene utilizzato per riattivare il microcontrollore e stabilire la connessione WiFi e broker.

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

Durante questo periodo, il microcontrollore ha utilizzato circa 70 mA. Al termine, entra in modalità di sonno profondo e nel mio caso ha utilizzato meno di 20uA. "flap" è sempre vero, "vcc" indica la tensione della batteria in mV e "prev" dovrebbe essere 0. Se è 1 o 2, significa che la casella di posta non è stata in grado di inviare un messaggio in precedenza, o perché non è riuscita a connettersi a il WiFi o perché non è riuscito a connettersi al broker MQTT. "RSSI" è la potenza del segnale WiFi. Entrambi sono molto utili per diagnosticare i problemi.

È una buona idea monitorare la tensione della batteria per alcuni giorni per assicurarsi che il dispositivo funzioni come previsto e non si scarichi la batteria per qualche motivo.

Il firmware è anche in grado di aggiornarsi via etere (OTA), ma questo va un po' oltre lo scopo di questa istruzione. Per chi fosse interessato, la configurazione OTA è anche in config.h.

Passaggio 6: utilizzo di Node-RED per agire sul messaggio MQTT

Utilizzo di Node-RED per agire sul messaggio MQTT
Utilizzo di Node-RED per agire sul messaggio MQTT

Infine, ho creato un semplice flusso in Node-RED. Il primo nodo si iscrive all'argomento della casella di posta (stat/postbox/trigger). Quando viene ricevuto un messaggio, il secondo nodo formatta un'e-mail *). Il nodo finale lo invia al mio indirizzo Gmail, utilizzando Gmail come server SMTP. Il mio telefono mi avviserà quindi di nuova posta.

Ho aggiunto il flusso Node-RED a uno snippet gitlab in modo che tu possa importarlo nei tuoi flussi Node-RED.

Ovviamente puoi aggiungere altri nodi, ad esempio per registrare gli eventi della casella di posta su MariaDb o SqlLite, o creare allarmi extra quando la tensione della batteria scende sotto i 2,7 volt.

Buona caccia alla posta!

*) Vedi la pagina successiva, ora sto usando PushBullet invece dell'e-mail.

Passaggio 7: ripensamenti

C'è sempre questa sensazione che le cose avrebbero potuto essere fatte meglio.

Interruttore

Avrei preferito usare un (super) magnete e un contatto reed invece del goffo approccio a stantuffo. C'erano due ragioni. Uno è che non avrei mai potuto farlo funzionare con il contatto che si chiudeva quando la scatola veniva aperta, e averlo sempre chiuso significava che scorreva sempre una piccola corrente. In retrospettiva, il meno di 1uA che scorre attraverso il resistore 4M7 non sarebbe stato un grosso problema in termini di durata della batteria. L'altro era più pratico. Ho realizzato questo progetto sabato e ho scritto il software, l'ho costruito tutto domenica da ciò che era in giro. Semplicemente non avevo un contatto reed nella cassetta della posta indesiderata.

Nota: come ha commentato diy_bloke, i contatti reed hanno la tendenza a diventare appiccicosi quando vengono magnetizzati per lungo tempo, quindi forse lo stantuffo non era affatto una cattiva idea. Vedremo. *)

Messaggio sullo svuotamento

La casella di posta invia un messaggio anche quando viene svuotata. Questo non è un grosso problema, ma con più persone in casa che ricevono l'avviso, si potrebbe finire in un loop che controlla la cassetta postale sfidando il suo intero scopo! Ci sono alcuni modi per aggirare questo problema, come controllare se il coperchio interno è sollevato e, in tal caso, non inviare un messaggio. Oppure, invece di utilizzare l'interruttore del coperchio, installa un rilevatore nella parte inferiore della cassetta postale. Oppure un piccolo pulsante di reset da premere durante lo svuotamento. Tuttavia, tutto complicherebbe le cose e probabilmente peggiorerebbe l'affidabilità.

messaggistica

L'invio di e-mail è un modo piuttosto efficace ma rozzo di mettere in guardia. Un modo più elegante sarebbe un'app per telefono, ma non ho trovato un'app dashboard MQTT Android che possa essere configurata per attivare un avviso del sistema operativo quando viene ricevuto un determinato messaggio. Se ce n'è uno in giro, aggiungilo ai commenti. **)

*) Dopo più di un anno di funzionamento, si scopre che il bastoncino per lecca-lecca che ho usato, fondamentalmente carta arrotolata dura, ha la tendenza ad accorciarsi sotto la pressione costante della molla dell'interruttore. Dopo un po' di risoluzione dei problemi l'ho sostituito con un bastoncino di legno.

**) Sto usando PushBullet ora per i messaggi push, separati dal dashboard MQTT. Una piccola interfaccia Node-RED low per l'API può essere trovata qui. Assicurati di fornire il token di accesso nel nodo "Prepara per pushbullet" e il tuo indirizzo email per scopi di fallback nel nodo "Riprova".

Consigliato: