Cuprins:

Semnalizare cutie poștală alimentată de MQTT și Wifi: 7 pași (cu imagini)
Semnalizare cutie poștală alimentată de MQTT și Wifi: 7 pași (cu imagini)

Video: Semnalizare cutie poștală alimentată de MQTT și Wifi: 7 pași (cu imagini)

Video: Semnalizare cutie poștală alimentată de MQTT și Wifi: 7 pași (cu imagini)
Video: Cutie colete Parcel Keeper 1000 Inchidere Cheie - ROTTNER 2024, Iulie
Anonim
Semnalizare MQTT și Wifi Powered Mailbox
Semnalizare MQTT și Wifi Powered Mailbox

Notă: actualizat cu un firmware nou, o schemă și sfaturi pentru un programator

Câțiva ani m-am angajat în propriul meu proiect de automatizare a casei. A început prin construirea unei emițătoare de 433 MHz controlate de server cu un Arduino pentru a comuta o mulțime de switch-uri la distanță bazate pe PT2262 ieftine. Mai târziu am adăugat un receptor bazat pe Arduino pentru stația meteo, am conectat contactul de control al încărcătorului meu EV, etc. Lucrurile au devenit din ce în ce mai împletite (și complicate!). Deci, acum câteva luni am decis să standardizez totul bazat pe MQTT pentru mesagerie, Node-RED pentru automatizare (ambele rulând pe un singur Raspberry Pi B +) și MariaDb pentru logare (rulând pe Synology NAS). Mai târziu am mutat brokerul MQTT (Mosquitto) și Node-RED pe NAS.

Acest instructabil descrie un proiect prostesc pentru distracție care leagă cutia poștală montată pe stradă în această infrastructură de acasă. Ideea este că dacă cineva deschide cutia poștală montată pe gard la aproximativ 10 metri de ușa din față, mă semnalează pe telefonul meu și, eventual, pe alte dispozitive.

Pasul 1: schiță, condiții prealabile și piese

Contur

La un nivel ridicat, cutia poștală ar trebui, atunci când este deschisă, să trimită un mesaj MQTT unic către broker, astfel încât abonații la acel subiect să fie informați. Node-RED se abonează și face unele automatizări, în acest caz trimitând un e-mail și / sau un mesaj push pe telefonul meu.

Căsuța poștală ar trebui să funcționeze pe baterii și să funcționeze cel puțin un an și ar trebui să o facă folosind rețeaua mea WiFi. Deoarece trezirea unui microcontroler și conectarea la o rețea WiFi pot dura câteva secunde, nu am putut folosi comutatorul de activare pentru a întrerupe alimentarea. În schimb, procesorului ar trebui să i se permită să-și termine afacerea după ce capacul cutiei poștale s-a închis deja.

Precondiții

Presupun că aveți abilități modeste de lipire, ați lucrat puțin cu Arduino IDE și ați instalat plăcile ESP8266 folosind Boards Manager. De asemenea, trebuie să aveți un adaptor serial USB de 3,3 volți pentru a programa microcontrolerul.

Presupun, de asemenea, că aveți un broker MQTT și un server Node-RED care rulează. Dacă nu, există multe instrucțiuni pe Internet, dar aș sfătui să luați traseul leneș și să utilizați scriptul de instalare excelent al lui Peter Scargill dacă doriți să rulați acest lucru pe orice Pi sau Ubuntu sau să utilizați imaginea lui Andreas Spiess pentru Pi Zero W (linkuri în descrierea acelui videoclip), care vă va economisi câteva ore de vizionare a scripturilor de instalare rulând. Alternativ, puteți face ca firmware-ul să trimită un e-mail direct, dar veți pierde multă flexibilitate în acest sens.

Părți

  • 1 cutie de baterii închisă, 3 AA
  • 2 baterii AA
  • 1 modul ESP8266. Pentru acest proiect am folosit un ESP-01
  • 1 microcomutator
  • 1 rezistor de 47K
  • 1 rezistor 4M7
  • 1 condensator 2.2uF
  • 1 tub subțire de plastic. Am folosit un stilou
  • 1 chibrit gros sau lung sau acadea. Ar trebui să se potrivească și să se miște cu ușurință în tubul de plastic

Pasul 2: Hardware: cutie, comutator și cablare

Hardware: cutie, comutator și cablare
Hardware: cutie, comutator și cablare
Hardware: cutie, comutator și cablare
Hardware: cutie, comutator și cablare
Hardware: cutie, comutator și cablare
Hardware: cutie, comutator și cablare

Am început cu o cutie de baterii veche dintr-un decor de Crăciun defunct. A fost proiectat pentru trei baterii de dimensiuni AA. Deoarece ESP8266 va funcționa frumos pe 3 volți, aș putea folosi două baterii și aș putea folosi a treia poziție pentru microcontroler. Observați cum cutia avea un mic compartiment suplimentar pe care aș putea să-l folosesc pentru comutatorul de activare. Am folosit un tip de comutator foarte obișnuit prezentat în imagini, dar am scos arcul care îl blochează în poziția pornit sau oprit. Am lipit două fire subțiri la contactele NC și le-am lipit în cutie cu o picătură mică de super lipici.

Apoi, am forat o gaură în capacul superior care se potrivea cu un tub de plastic luat dintr-un pix. Gaura se aliniază exact cu comutatorul și ghidează un piston realizat dintr-un baston gros de chibrit.

În cele din urmă, am lipit încă două fire la contactele bateriei și am ghidat toate cele patru fire în poziția celei de-a treia baterii, unde urma să fie microcontrolerul.

Pasul 3: Hardware: ESP-01

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

Având în vedere cerința WiFi, întregul proiect strigă ESP8266. Acest mic controler WiFi a devenit calul de lucru preferat al comunității care se ocupă de modul în care este cumpărat sub 2,50 EUR și integrează o stivă completă WiFi și TCP / IP, cu o capacitate mai mult decât suficientă pentru a vă rula propriile programe. Arduino IDE (sau Atom cu pluginul PlatformIO) acceptă pe deplin ESP8266.

Aș lua de obicei un ESP-12F, dar aveam o mică placă ESP-01 așezată în jur, care era perfectă pentru serviciu și se potrivea frumos în cutia bateriei. Singura problemă este că este destul de complicat să blochezi firmware-ul în ESP-01. Mai multe despre asta în pasul următor. Există o singură modificare de făcut: trebuie să scoateți LED-ul roșu de alimentare de pe placă, deoarece acesta atrage continuu 3mA. Cu LED-ul scos, modulul folosește doar câteva zeci de uA în modul deepsleep, ceea ce îl va face să dureze peste un an pe două baterii AA de calitate.

S-a dovedit că aș putea folosi două benzi de anteturi feminine cu 4 pini și lipire pe cele câteva componente suplimentare în formă liberă, astfel încât să pot elimina ESP-01 pentru a actualiza firmware-ul, în timp ce acesta ar încă încap în al treilea compartiment al bateriei.

Este foarte important să conectați corect ESP-ul. Folosind foaia de trișare de mai sus, conectați-o după cum urmează.

  1. Baterie plus la Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) și un rezistor de 47K.
  2. Bateria minus la GND (A1) și un fir al comutatorului.
  3. Celălalt fir al comutatorului la un condensator 100nF și un rezistor 4M7.
  4. Capetele deschise ale ambelor rezistențe și ale condensatorului la RST (C2).
  5. TXD (A2) poate rămâne neconectat.

Edit: A trebuit să înlocuiesc ESP-01 pentru că am făcut o greșeală prostească și l-am distrus. Sa dovedit că, spre surprinderea mea, noul ESP-01 nu a resetat cu condensatorul original 100nF. Probabil are un design ușor diferit. L-am înlocuit cu unul de 2,2 uF și acum funcționează din nou

Când ați terminat, totul poate fi montat în cutie, dar rețineți, mai întâi trebuie să programăm modulul.

Pasul 4: Programarea ESP-01

Programarea ESP-01
Programarea ESP-01
Programarea ESP-01
Programarea ESP-01
Programarea ESP-01
Programarea ESP-01

Pentru a bloca firmware-ul de pe ESP-01, puteți fie să construiți o platformă mică, fie să cumpărați un programator (aproape) complet pentru aproximativ 1 euro.

Programare hardware rig

Construiți o platformă mică, din nou, cu două anteturi pentru ESP-01. De asemenea, aveți nevoie de un modul serial USB, capabil să furnizeze 3,3 volți. Rețineți că cipul ESP8266 nu este întărit cu 5 volți, deci o greșeală aici ar putea să vă omoare modulul. Oricum, folosind din nou foaia de înșelătorie, conectați echipamentul dvs. după cum urmează:

  1. 3.3V de la modulul USBSerial la Vcc, CH_PD, RST și GPIO2.
  2. GND al modulului USBSerial către GND și GPIO0.
  3. TXD al modulului USBSerial la RXD.
  4. RDX al modulului USBSerial către TXD.

Programator pre-build

Oricât de distractiv este să-ți construiești propriile lucruri, abordarea mai leneșă este de a obține o interfață ESP-01-la-serial de pe site-ul tău preferat de licitații, vezi imaginea de mai sus. Acest lucru este mult mai ușor, mai compact și mai fiabil decât o platformă. Cu toate acestea, unele dintre acestea nu sunt programatori, ci doar interfețe seriale. Trebuie să lipiți o punte de sârmă între GND (pinul A1) și GPIO0 (pinul C1) pe partea din spate a interfeței, a se vedea a doua imagine. Rețineți că ESP-01 trebuie conectat cu antena orientată spre mufa USB, nu invers!

Notă: există și cu un comutator, vezi a treia imagine, foarte frumos.

Încărcați firmware-ul

Presupunând un IDE Arduino de 1.8.3 sau o versiune ulterioară, selectați Instrumente> Placă și selectați placa pe care o aveți. Pentru un ESP-01 cum am folosit, alegeți „Modul ESP8266 generic” și setați următoarele opțiuni (acestea ar trebui să fie toate valorile implicite):

  1. Mod bliț: DIO
  2. Frecvența blițului: 40MHz
  3. Frecvența procesorului: 80MHz
  4. Dimensiune bliț: 512 KB (64 KB SPIFFS) Notă: dacă utilizați o placă ESP-01 neagră, alegeți 1 MB (64 KB SPIFFS)
  5. Port de depanare: Dezactivat
  6. Nivel de depanare: Nici unul
  7. Metoda de resetare: ck
  8. Viteza de încărcare 115200
  9. Port: selectați portul care este conectat la interfața dvs. Serial USB. Pentru computerul meu Ubuntu care a fost / dev / ttyUSB0

Conectați platforma / programatorul, încărcați schița pe care o puteți găsi aici https://gitlab.com/jeroenmeijer/Mailbox.git. Furnizați acreditările de broker WiFi și MQTT și configurația IP în config.h și alegeți Încărcare.

Pasul 5: Asamblarea totul

Asamblând totul
Asamblând totul

Am forat o gaură pentru tubul de plastic în capacul interior al cutiei poștale, cât mai aproape de balama posibil, apoi am lipit la cald cutia bateriei de partea inferioară a capacului respectiv. Apoi am folosit un chibrit gros ca piston. Am folosit un snip pentru a tăia chibritul la lungime, astfel încât întrerupătorul să se deschidă dacă capacul exterior ar fi închis. Am verificat conectivitatea deschizând capacul în timp ce rulam mosquitto_sub pentru a monitoriza mesajele MQTT (înlocuiți mqttbroker, utilizator și parola cu configurația dvs. MQTT):

$ mosquitto_sub -h mqttbroker -v -t "stat / #" -u utilizator -P parolă

Aproximativ șase secunde după deschiderea capacului exterior, este publicat următorul mesaj MQTT. Timpul este folosit pentru a trezi microcontrolerul și a stabili conexiunea WiFi și broker.

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

În acest timp, microcontrolerul a folosit aproximativ 70mA. Când a terminat, intră în somn profund și în cazul meu a folosit mai puțin de 20uA. „clapeta” este întotdeauna adevărată, „vcc” afirmă că tensiunea bateriei în mV și „prev” ar trebui să fie 0. Dacă este 1 sau 2, înseamnă că cutia poștală nu a putut trimite un mesaj mai devreme, fie pentru că nu s-a putut conecta la WiFi sau pentru că nu s-a putut conecta la brokerul MQTT. „RSSI” este puterea semnalului WiFi. Ambele sunt foarte la îndemână pentru diagnosticarea problemelor.

Este o idee bună să monitorizați tensiunea bateriei timp de câteva zile pentru a vă asigura că dispozitivul funcționează conform intenției și nu scurge bateria din anumite motive.

Firmware-ul este, de asemenea, capabil să se actualizeze prin antenă (OTA), dar acest lucru este puțin dincolo de sfera acestui instructable. Pentru cei interesați, configurația OTA se află și în config.h.

Pasul 6: Utilizarea Node-RED pentru a acționa pe mesajul MQTT

Folosind Node-RED pentru a acționa pe mesajul MQTT
Folosind Node-RED pentru a acționa pe mesajul MQTT

În cele din urmă, am creat un flux simplu în Node-RED. Primul nod se abonează la subiectul căsuței poștale (stat / cutie poștală / declanșator). Când se primește un mesaj, al doilea nod formată un e-mail *). Nodul final îl trimite la adresa mea Gmail, folosind Gmail ca server SMTP. Telefonul meu mă va avertiza apoi cu privire la e-mailurile noi.

Am adăugat fluxul Node-RED la un fragment gitlab, astfel încât să îl puteți importa în fluxurile Node-RED.

Desigur, puteți adăuga câteva noduri, de exemplu pentru a înregistra evenimentele cutiei poștale pe MariaDb sau SqlLite sau pentru a crea alarme suplimentare atunci când tensiunea bateriei scade sub 2,7 volți.

Fericit vânătoare de corespondență!

*) Vezi pagina următoare, folosesc PushBullet acum în loc de e-mail.

Pasul 7: după gânduri

Există întotdeauna acest sentiment că lucrurile ar fi putut fi făcute mai bine.

Intrerupator

Aș fi preferat să folosesc un (super) magnet și un contact cu stuf în locul abordării cu piston oarecum neîndemânatic. Au existat două motive. Unul este că nu am putut face acest lucru cu închiderea contactului atunci când cutia a fost deschisă și, dacă a fost închisă întotdeauna, a însemnat întotdeauna un curent mic. Retrospectiv, mai puțin de 1uA care curge prin rezistorul 4M7 nu ar fi fost o mare problemă în ceea ce privește durata de viață a bateriei. Celălalt a fost unul mai practic. Am inventat acest proiect sâmbătă și am scris software-ul, am construit totul duminică din ceea ce se întindea. Pur și simplu nu am avut un contact de reed în cutia de gunoi.

Notă: după cum a comentat diy_bloke, contactele de stuf au tendința de a deveni lipicioase atunci când sunt magnetizate pentru o lungă perioadă de timp, deci poate că pistonul nu a fost deloc o idee atât de rea. Vom vedea. *)

Mesaj despre golire

Căsuța poștală trimite un mesaj și atunci când îl goliți. Acest lucru nu este mare lucru, dar cu mai mulți oameni din casă care primesc avertismentul, s-ar putea ajunge într-o buclă verificând cutia poștală sfidând întregul scop! Există câteva modalități în acest sens, cum ar fi verificarea dacă capacul interior este ridicat și, dacă da, nu trimiteți un mesaj. Sau, în loc să utilizați comutatorul capacului, instalați un detector în partea de jos a cutiei poștale. Sau un mic buton de resetare care trebuie apăsat la golirea acestuia. Cu toate acestea, toate ar complica lucrurile și probabil ar agrava fiabilitatea.

Mesagerie

Trimiterea e-mailului este un mod destul de eficient, dar grosolan, de a scoate avertismentul. O modalitate mai elegantă ar fi o aplicație pentru telefon, dar nu am găsit o aplicație de tablou de bord Android MQTT care poate fi configurată pentru a declanșa o alertă a sistemului de operare atunci când este primit un anumit mesaj. Dacă există unul în jur, vă rugăm să adăugați la comentarii. **)

*) După mai mult de un an de funcționare, se dovedește că lollipop stick-ul pe care l-am folosit, practic hârtie laminată tare, are tendința de a se scurta sub presiunea constantă a arcului comutatorului. După câteva depanări, l-am înlocuit cu un băț de lemn.

**) Acum folosesc PushBullet pentru mesaje push, separate de tabloul de bord MQTT. O mică interfață redusă Node-RED cu API poate fi găsită aici. Asigurați-vă că furnizați jetonul de acces în nodul „Pregătiți-vă pentru pushbullet” și adresa dvs. de e-mail în scop alternativ în nodul „Încercați din nou”.

Recomandat: