Indholdsfortegnelse:

MQTT og Wifi Powered Mailbox Flag: 7 trin (med billeder)
MQTT og Wifi Powered Mailbox Flag: 7 trin (med billeder)

Video: MQTT og Wifi Powered Mailbox Flag: 7 trin (med billeder)

Video: MQTT og Wifi Powered Mailbox Flag: 7 trin (med billeder)
Video: #126 Cheap MQTT Broker on Raspberry Zero W / DietPi / MQTT Message Logger SQlite / PHPliteAdmin 2024, Juli
Anonim
MQTT og Wifi Powered Mailbox Flag
MQTT og Wifi Powered Mailbox Flag

Bemærk: opdateret med ny firmware, en skematisk og tips til en programmør

Et par år gik jeg i gang med mit eget hjemmeautomatiseringsprojekt. Det startede med at bygge en serverstyret 433 MHz sender bygget med en Arduino til at skifte masser af billige PT2262 -baserede fjernkontakter. Senere tilføjede jeg en Arduino -baseret modtager til min vejrstation, tilsluttede kontrolkontakten til min EV -oplader osv. Ting voksede mere og mere sammenflettet (og kompliceret!). Så for et par måneder siden besluttede jeg at standardisere alt baseret på MQTT til messaging, Node-RED til automatisering (begge kører på en enkelt Raspberry Pi B+) og MariaDb til logning (kører på min Synology NAS). Senere flyttede jeg også MQTT-mægleren (Mosquitto) og Node-RED til NAS'en.

Denne instruktive beskriver et fjollet sjovt projekt, der tilslutter min postkasse på gaden i denne hjemlige infrastruktur. Tanken er, at hvis nogen åbner den hegnsmonterede postkasse cirka 10 meter fra hoveddøren, signalerer det mig på min telefon og muligvis andre enheder.

Trin 1: Oversigt, forudsætninger og dele

Omrids

På et højt niveau skal postkassen, når den åbnes, sende en unik MQTT -besked til mægleren, så abonnenter på dette emne vil blive informeret. Node-RED abonnerer også og foretager en vis automatisering, i dette tilfælde sender en e-mail og/eller en push-besked til min telefon.

Postkassen skal køre på batterier og køre i mindst et år, og skal gøre det ved hjælp af mit WiFi -netværk. Da det kan tage flere sekunder at vække en mikro-controller og oprette forbindelse til et WiFi-netværk, kunne jeg ikke bruge aktiveringskontakten til at afbryde strømmen. I stedet skal processoren have lov til at afslutte sin virksomhed, efter at postkassens låg allerede er lukket.

Forudsætninger

Jeg antager, at du har beskedne loddeevner, har arbejdet lidt med Arduino IDE og har installeret ESP8266 -kortene ved hjælp af Boards Manager. Du skal også have en 3,3 volt USB-seriel adapter for at programmere mikrokontrolleren.

Jeg antager også, at du har en MQTT-mægler og en Node-RED-server, der kører. Hvis ikke, er der mange instruktioner på Internettet, men jeg vil råde dig til at tage den dovne vej og bruge Peter Scargills fremragende installationsskript, hvis du vil køre dette på en hvilken som helst Pi eller Ubuntu, eller bruge Andreas Spiess's billede til Pi Zero W (links i beskrivelsen af den video), hvilket sparer dig for et par timers visning af installationsskript, der kører. Alternativt kan du få firmwaren til at sende en e -mail direkte, men du mister meget fleksibilitet ved at gøre det.

Dele

  • 1 lukket, 3 AA batterikasse
  • 2 AA batterier
  • 1 ESP8266 modul. Til dette projekt brugte jeg en ESP-01
  • 1 mikrokontakt
  • 1 47K modstand
  • 1 4M7 modstand
  • 1 2.2uF kondensator
  • 1 tyndt plastrør. Jeg brugte en pen
  • 1 tyk, lang tændstik eller slikkepind. Det skal let passe og bevæge sig i plastrøret

Trin 2: Hardware: boksen, switch og ledninger

Hardware: boksen, switch og ledninger
Hardware: boksen, switch og ledninger
Hardware: boksen, switch og ledninger
Hardware: boksen, switch og ledninger
Hardware: boksen, switch og ledninger
Hardware: boksen, switch og ledninger

Jeg startede med en gammel batterikasse fra en nedlagt julepynt. Det var designet til tre batterier i AA -størrelse. Da ESP8266 kører pænt på 3 volt, kunne jeg bruge to batterier og bruge den tredje position til mikrokontrolleren. Bemærk, hvordan kassen havde et lille ekstra rum, som jeg kunne bruge til aktiveringskontakten. Jeg brugte en meget almindelig type switch, der er vist på billederne, men fjernede fjederen, der låser den i tændt eller slukket position. Jeg lodde to tynde ledninger til NC -kontakterne og limede det i kassen med en lille dråbe superlim.

Dernæst borede jeg et hul i topdækslet, der matchede et plastrør taget fra en kuglepen. Hullet flugter præcist med kontakten og styrer et stempel lavet af en tyk tændstik.

Til sidst lod jeg to ledninger mere til batterikontakterne og guidede alle fire ledninger til det tredje batteris position, hvor mikrokontrolleren skulle være.

Trin 3: Hardware: ESP-01

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

I betragtning af WiFi -kravet råber hele projektet ESP8266. Denne lille WiFi -controller er blevet den foretrukne arbejdshest i tinkering -samfundet som et modul, der kan købes for under 2,50 EUR og integrerer en fuld WiFi og TCP/IP -stak, med mere end nok kapacitet til overs til at køre dine egne programmer. Arduino IDE (eller Atom med PlatformIO -plugin) understøtter fuldt ud ESP8266.

Jeg ville normalt tage en ESP-12F, men jeg havde et lille ESP-01 bord, der var perfekt til jobbet og passer fint i batterikassen. Det eneste problem er, at det er ret kompliceret at blinke firmware i ESP-01. Mere om det i næste trin. Der er en ændring at foretage: Du skal fjerne den røde strøm -LED fra tavlen, da den løbende trækker 3mA. Når LED'en er fjernet, bruger modulet kun et par snesevis af uA i deepsleep -tilstand, hvilket får det til at vare i over et år på to kvalitets AA -batterier.

Det viste sig, at jeg kunne bruge to strimler med 4-pins hunhoveder og lodning på de få ekstra komponenter i fri form, så jeg kunne fjerne ESP-01 for at opdatere firmwaren, mens den stadig ville passe i det tredje batterirum.

Det er meget vigtigt at koble ESP korrekt. Ved hjælp af ovenstående snydeblad, tråd det op som følger.

  1. Batteri plus til Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) og en 47K modstand.
  2. Batteri minus til GND (A1) og en ledning på kontakten.
  3. Omskifterens anden ledning til en 100nF kondensator og en 4M7 modstand.
  4. De åbne ender af både modstande og kondensatoren til RST (C2).
  5. TXD (A2) kan forblive uden forbindelse.

Edit: Jeg var nødt til at udskifte ESP-01, fordi jeg lavede en fjollet fejl og ødelagde den. Det viste sig, at til min overraskelse blev den nye ESP-01 ikke nulstillet med den originale 100nF kondensator. Det har sandsynligvis et lidt anderledes design. Jeg erstattede den med en 2,2 uF, og nu virker den igen

Når det er gjort, kan alt monteres i kassen, men hold da op, først skal vi programmere modulet.

Trin 4: Programmering af ESP-01

Programmering af ESP-01
Programmering af ESP-01
Programmering af ESP-01
Programmering af ESP-01
Programmering af ESP-01
Programmering af ESP-01

For at blinke firmwaren på din ESP-01 kan du enten bygge en lille rig eller købe en (næsten) komplet programmør for omkring 1 euro.

Programmering af hardware -rig

Byg en lille rig med igen to kvindelige skæreborde til ESP-01. Du har også brug for et USB Serial -modul, der kan levere 3,3 volt. Bemærk, at ESP8266 -chippen ikke er 5 volt hærdet, så en fejl her kan dræbe dit modul. Anyway, igen ved hjælp af snydearket, wire din rig som følger:

  1. 3.3V fra USBSerialmodulet til Vcc, CH_PD, RST og GPIO2.
  2. GND for USBSerialmodulet til GND og GPIO0.
  3. TXD af USBSerialmodulet til RXD.
  4. RDX på USBSerialmodulet til TXD.

Pre-build programmerer

Sjovt som det er at bygge dine egne ting, den dovne tilgang er at få en ESP-01-til-seriel grænseflade fra dit foretrukne auktionssted, se billedet ovenfor. Dette er meget lettere, mere kompakt og mere pålideligt end en rig. Nogle af disse er dog ikke programmører, kun serielle grænseflader. Du skal lodde en trådbro mellem GND (pin A1) og GPIO0 (pin C1) på bagsiden af grænsefladen, se det andet billede. Bemærk, at ESP-01 skal tilsluttes med antennen vendt mod USB-stikket, ikke omvendt!

Bemærk: de findes også med en switch, se tredje billede, meget flot.

Indlæs firmwaren

Hvis vi antager en Arduino IDE på 1.8.3 eller nyere, skal du vælge Værktøjer> Board og vælge det board, du har. For en ESP-01 som jeg brugte, skal du vælge "Generisk ESP8266-modul" og indstille følgende muligheder (dette bør være alle standardindstillingerne):

  1. Flashtilstand: DIO
  2. Flashfrekvens: 40MHz
  3. CPU -frekvens: 80MHz
  4. Flashstørrelse: 512KB (64KB SPIFFS) Bemærk: Hvis du bruger et sort ESP-01-kort, skal du vælge 1MB (64KB SPIFFS)
  5. Debug -port: Deaktiveret
  6. Debug -niveau: Ingen
  7. Nulstil metode: ck
  8. Uploadhastighed 115200
  9. Port: vælg den port, der er tilsluttet din USB Serial interface. For min Ubuntu -pc var det /dev /ttyUSB0

Tilslut riggen/programmøren, indlæs den skitse, du kan finde her https://gitlab.com/jeroenmeijer/Mailbox.git. Angiv dine WiFi- og MQTT -mægleroplysninger og din IP -konfiguration i config.h, og vælg Upload.

Trin 5: Saml det hele

Samler det hele
Samler det hele

Jeg borede et hul til plastrøret i mit postkasses indre låg, så tæt på hængslet som muligt, og derefter varmlimede batterikassen til undersiden af låget. Dernæst brugte jeg en tyk tændstik som et stempel. Jeg brugte en snip til at skære tændstikken i længden, så kontakten ville åbne, hvis det ydre låg var lukket. Jeg kontrollerede forbindelsen ved at åbne låget, mens jeg kørte mosquitto_sub for at overvåge MQTT -meddelelser (udskift mqttbroker, bruger og adgangskode med din MQTT -konfiguration):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u bruger -P adgangskode

Cirka seks sekunder efter at det ydre låg åbnes, offentliggøres følgende MQTT -meddelelse. Tiden bruges til at vække mikrokontrolleren og etablere WiFi- og mæglerforbindelsen.

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

I løbet af denne tid brugte mikrokontrolleren cirka 70mA. Når det er gjort, går det i dyb søvn, og i mit tilfælde brugte det mindre end 20uA. "flap" er altid sandt, "vcc" angiver batterispændingen i mV og "prev" skal være 0. Hvis det er 1 eller 2, betyder det, at postkassen ikke kunne sende en besked tidligere, enten fordi den ikke kunne oprette forbindelse til WiFi, eller fordi den ikke kunne oprette forbindelse til MQTT -mægleren. "RSSI" er styrken af WiFi -signalet. Begge er meget praktisk til at diagnosticere problemer.

Det er en god idé at overvåge batterispændingen i et par dage for at sikre, at enheden fungerer efter hensigten og af en eller anden grund ikke tømmer batteriet.

Firmwaren er også i stand til at opdatere sig selv via luften (OTA), men det er lidt uden for omfanget af denne instruerbare. For de interesserede er OTA -konfigurationen også i config.h.

Trin 6: Brug af Node-RED til at handle på MQTT-beskeden

Brug af Node-RED til at handle på MQTT-beskeden
Brug af Node-RED til at handle på MQTT-beskeden

Endelig skabte jeg et simpelt flow i Node-RED. Den første knude abonnerer på postkassens emne (stat/postkasse/udløser). Når der modtages en besked, formaterer den anden knude en e -mail *). Den sidste node sender den ud til min gmail -adresse ved hjælp af gmail som SMTP -server. Min telefon vil derefter advare mig om ny mail.

Jeg har føjet Node-RED-flowet til et gitlab-kodestykke, så du kan importere det til dine Node-RED-strømme.

Selvfølgelig kan du tilføje nogle flere noder, f.eks. For at logge postkassehændelser til MariaDb eller SqlLite eller oprette ekstra alarmer, når batterispændingen går under 2,7 volt.

Glad mail-jagt!

*) Se næste side, jeg bruger PushBullet nu i stedet for e -mail.

Trin 7: Eftertanke

Der er altid en følelse af, at tingene kunne have været gjort bedre.

Kontakt

Jeg ville have foretrukket at bruge en (super) magnet og en rørkontakt i stedet for den noget klodset stempletilgang. Der var to grunde. Den ene er, der var ingen måde, jeg kunne få dette til at fungere med kontakten lukning, når kassen blev åbnet, og at have den altid lukket betød, at en lille strøm altid ville flyde. Set i bakspejlet ville det mindre end 1uA, der strømmer gennem 4M7 -modstanden, ikke have været en stor ting med hensyn til batterilevetid. Den anden var mere praktisk. Jeg lavede dette projekt lørdag og skrev softwaren, byggede det hele på søndag ud fra det, der lå rundt. Jeg havde simpelthen ikke en rørkontakt i skraldespanden.

Bemærk: som diy_bloke kommenterede, har rørkontakter en tendens til at blive klæbrige, når de magnetiseres i lang tid, så måske var stemplet slet ikke så dårlig en idé. Vi vil se. *)

Besked om tømning

Postkassen sender også en besked, når den tømmes. Dette er ikke noget problem, men med flere mennesker i huset, der får advarslen, kan man ende med at tjekke postkassen, der trodser hele dets formål! Der er et par måder omkring dette, såsom at kontrollere, om det indre låg er løftet, og i så fald ikke sende en besked. Eller i stedet for at bruge lågeomskifteren, skal du installere en detektor i bunden af postkassen. Eller en lille reset -knap, der skal trykkes på, når den tømmes. Alt ville imidlertid komplicere tingene og sandsynligvis forværre pålideligheden.

Beskeder

At sende e -mail er en ret effektiv, men grov måde at udsætte advarslen på. En mere elegant måde ville være en telefon -app, men jeg har ikke fundet en Android MQTT dashboard -app, der kan konfigureres til at udløse en operativsystemadvarsel, når der modtages en bestemt besked. Hvis der er en i nærheden, bedes du tilføje til kommentarerne. **)

*) Efter mere end et års drift viser det sig, at slikkepinden, jeg brugte, stort set hårdt valset papir, har en tendens til at blive forkortet under det konstante tryk på switchfjederen. Efter lidt fejlfinding udskiftede jeg den med en træpind.

**) Jeg bruger PushBullet nu til push -meddelelser, adskilt fra MQTT -instrumentbrættet. En lille Node-RED lav grænseflade til API'en kan findes her. Sørg for, at du angiver adgangstokenet i noden "Forbered dig på pushbullet" og din e -mail -adresse til tilbagekaldelsesformål i noden "Prøv igen".

Anbefalede: