Innholdsfortegnelse:

MQTT og Wifi Powered Mailbox Flag: 7 trinn (med bilder)
MQTT og Wifi Powered Mailbox Flag: 7 trinn (med bilder)

Video: MQTT og Wifi Powered Mailbox Flag: 7 trinn (med bilder)

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

Merk: oppdatert med ny fastvare, skjematisk og tips til en programmerer

Et par år begynte jeg på mitt eget hjemmeautomatiseringsprosjekt. Det startet med å bygge en serverstyrt 433 MHz senderbygger med en Arduino for å bytte mange billige PT2262 -baserte fjernkontroller. Senere la jeg til en Arduino -basert mottaker for værstasjonen min, koblet til kontrollkontakten til min EV -lader osv. Ting vokste seg mer og mer sammenflettet (og komplisert!). Så for noen måneder siden bestemte jeg meg for å standardisere alt basert på MQTT for meldinger, Node-RED for automatisering (begge kjører på en enkelt Raspberry Pi B+) og MariaDb for logging (kjører på min Synology NAS). Senere flyttet jeg MQTT-megleren (Mosquitto) og Node-RED over til NAS også.

Denne instruksjonsfulle beskriver et dumt for moro-prosjekt som hekter min gate-postkasse i denne hjemmeinfrastrukturen. Tanken er at hvis noen åpner den gjerdemonterte postkassen omtrent 10 meter fra inngangsdøren, signaliserer den meg på telefonen min og muligens andre enheter.

Trinn 1: Oversikt, forutsetninger og deler

Oversikt

På et høyt nivå bør postboksen, når den åpnes, sende en unik MQTT -melding til megleren, slik at abonnenter på dette emnet vil bli informert. Node-RED abonnerer også og gjør litt automatisering, i dette tilfellet sender han en e-post og/eller en push-melding til telefonen min.

Postkassen skal gå på batterier og gå i minst et år, og bør gjøre det ved hjelp av WiFi -nettverket mitt. Siden det kan ta flere sekunder å vekke en mikrokontroller og koble til et WiFi-nettverk, kunne jeg ikke bruke aktiveringsbryteren til å kutte strømmen. I stedet bør prosessoren få lov til å fullføre sin virksomhet etter at lokket på postkassen allerede er lukket.

Forutsetninger

Jeg antar at du har beskjedne loddeferdigheter, har jobbet litt med Arduino IDE og har installert ESP8266 -kortene ved hjelp av Boards Manager. Du må også ha en 3,3 volt USB-seriell adapter for å programmere mikrokontrolleren.

Jeg antar også at du har en MQTT-megler og en Node-RED-server som kjører. Hvis ikke, er det mange instruksjoner på Internett, men jeg vil råde deg til å ta den late ruten og bruke Peter Scargills utmerkede installeringsskript hvis du vil kjøre dette på en hvilken som helst Pi eller Ubuntu, eller bruke Andreas Spiess bilde for Pi Zero W (lenker i beskrivelsen av den videoen), noe som sparer deg for noen timer med å se installasjonsskript som kjører. Alternativt kan du få fastvaren til å sende ut en e -post direkte, men du mister mye fleksibilitet ved å gjøre det.

Deler

  • 1 lukket, 3 AA batteriboks
  • 2 AA -batterier
  • 1 ESP8266 -modul. Til dette prosjektet brukte jeg en ESP-01
  • 1 mikrobryter
  • 1 47K motstand
  • 1 4M7 motstand
  • 1 2.2uF kondensator
  • 1 tynt plastrør. Jeg brukte en penn
  • 1 tykk, lang fyrstikk eller slikkepinne. Den skal lett passe og bevege seg i plastrøret

Trinn 2: Maskinvare: boksen, bryteren og ledninger

Maskinvare: boksen, bryteren og ledninger
Maskinvare: boksen, bryteren og ledninger
Maskinvare: boksen, bryteren og ledninger
Maskinvare: boksen, bryteren og ledninger
Maskinvare: boksen, bryteren og ledninger
Maskinvare: boksen, bryteren og ledninger

Jeg begynte med en gammel batteriboks fra en nedlagt julepynt. Den var designet for tre AA -batterier. Siden ESP8266 vil kjøre fint på 3 volt, kan jeg bruke to batterier og bruke den tredje posisjonen for mikrokontrolleren. Legg merke til hvordan boksen hadde et lite ekstra rom som jeg kunne bruke til aktiveringsbryteren. Jeg brukte en veldig vanlig type bryter som vises på bildene, men fjernet fjæren som låser den i av- eller på -posisjon. Jeg loddet to tynne ledninger til NC -kontaktene og limte det i esken med en liten dråpe superlim.

Deretter boret jeg et hull i toppdekselet som matcher et plastrør hentet fra en kulepenn. Hullet samsvarer nøyaktig med bryteren og leder et stempel laget av en tykk fyrstikkpinne.

Til slutt loddet jeg ytterligere to ledninger til batterikontaktene og ledet alle fire ledningene til posisjonen til det tredje batteriet, der mikrokontrolleren skulle være.

Trinn 3: Maskinvare: ESP-01

Maskinvare: ESP-01
Maskinvare: ESP-01
Maskinvare: ESP-01
Maskinvare: ESP-01
Maskinvare: ESP-01
Maskinvare: ESP-01

Gitt WiFi -kravet, roper hele prosjektet ESP8266. Denne lille WiFi -kontrolleren har blitt favorittarbeidshesten i tinkering -samfunnet som en modul som kan kjøpes for under 2,50 EUR og integrerer en full WiFi og TCP/IP -stabel, med mer enn nok kapasitet til overs for å kjøre dine egne programmer. Arduino IDE (eller Atom med PlatformIO -plugin) støtter ESP8266 fullt ut.

Jeg ville vanligvis ta en ESP-12F, men jeg hadde et bittelite ESP-01-brett som var perfekt for jobben og passer fint i batteriboksen. Det eneste problemet er at det er ganske komplisert å blinke fastvare i ESP-01. Mer om det i neste trinn. Det er en endring å gjøre: Du må fjerne den røde strøm -LED -en fra brettet, da den kontinuerlig trekker 3mA. Når LED -lampen er fjernet, bruker modulen bare noen titalls uA i dyp sovemodus, noe som gjør at den varer i over et år på to kvalitets AA -batterier.

Det viste seg at jeg kunne bruke to strimler med 4-pins hunnhoder og loddetinn på de få ekstra komponentene i fri form, slik at jeg kunne fjerne ESP-01 for å oppdatere fastvaren, mens den fortsatt ville passe i det tredje batterirommet.

Det er veldig viktig å koble ESP riktig. Bruk det ovenstående juksearket, og led det opp som følger.

  1. Batteri pluss til Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) og en 47K motstand.
  2. Batteri minus til GND (A1) og en ledning på bryteren.
  3. Den andre ledningen til bryteren til en 100nF kondensator og en 4M7 -motstand.
  4. De åpne endene på både motstander og kondensatoren til RST (C2).
  5. TXD (A2) kan forbli frakoblet.

Edit: Jeg måtte bytte ESP-01 fordi jeg gjorde en dum feil og ødela den. Det viste seg at til min overraskelse ble den nye ESP-01 ikke tilbakestilt med den originale 100nF kondensatoren. Den har sannsynligvis en litt annen design. Jeg byttet den ut med en 2,2 uF, og nå fungerer den igjen

Når det er gjort, kan alt monteres i esken, men vent, først må vi programmere modulen.

Trinn 4: Programmering av ESP-01

Programmering av ESP-01
Programmering av ESP-01
Programmering av ESP-01
Programmering av ESP-01
Programmering av ESP-01
Programmering av ESP-01

For å blinke fastvaren på ESP-01 kan du enten bygge en liten rigg eller kjøpe en (nesten) komplett programmerer for ca 1 euro.

Programmering av maskinvare rigg

Bygg en liten rigg med igjen to hunnhoder for ESP-01. Du trenger også en USB Serial -modul som kan levere 3,3 volt. Vær oppmerksom på at ESP8266 -brikken ikke er 5 volt herdet, så en feil her kan drepe modulen din. Uansett, igjen ved å bruke juksearket, koble riggen din slik:

  1. 3.3V fra USBSerial -modulen til Vcc, CH_PD, RST og GPIO2.
  2. GND for USBSerial -modulen til GND og GPIO0.
  3. TXD av USBSerialmodulen til RXD.
  4. RDX på USBSerialmodulen til TXD.

Forhåndsbygger programmerer

Morsomt som det er å bygge dine egne ting, den latere tilnærmingen er å få et ESP-01-til-serielt grensesnitt fra ditt favoritt auksjonssted, se bildet ovenfor. Dette er mye lettere, mer kompakt og mer pålitelig enn en rigg. Noen av disse er imidlertid ikke programmerere, bare serielle grensesnitt. Du må lodde en bro mellom GND (pin A1) og GPIO0 (pin C1) på baksiden av grensesnittet, se det andre bildet. Vær oppmerksom på at ESP-01 skal plugges inn med antennen vendt mot USB-kontakten, ikke omvendt!

Merk: de finnes også med en bryter, se tredje bilde, veldig fint.

Last inn fastvaren

Forutsatt en Arduino IDE på 1.8.3 eller nyere, velger du Verktøy> Brett og velger brettet du har. For en ESP-01 som jeg brukte, velg "Generic ESP8266 Module", og angi følgende alternativer (dette bør være alle standardinnstillingene):

  1. Blitsmodus: DIO
  2. Blitsfrekvens: 40MHz
  3. CPU -frekvens: 80 MHz
  4. Flash-størrelse: 512KB (64KB SPIFFS) Merk: Hvis du bruker et svart ESP-01-kort, velger du 1MB (64KB SPIFFS)
  5. Feilsøkingsport: Deaktivert
  6. Feilsøkingsnivå: Ingen
  7. Tilbakestillingsmetode: ck
  8. Last opp hastighet 115200
  9. Port: velg porten som er koblet til USB Serial -grensesnittet. For min Ubuntu -PC var det /dev /ttyUSB0

Koble til riggen/programmereren, last inn skissen du finner her https://gitlab.com/jeroenmeijer/Mailbox.git. Angi legitimasjonene dine for WiFi- og MQTT -megler og IP -konfigurasjonen din i config.h og velg Last opp.

Trinn 5: Monter det hele

Monter det hele
Monter det hele

Jeg boret et hull for plastrøret i det indre lokket på postkassen min, så nær hengslet som mulig, og deretter limte jeg batteriboksen på undersiden av lokket. Deretter brukte jeg en tykk fyrstikk som et stempel. Jeg brukte en snip til å kutte fyrstikken til lengden slik at bryteren åpnet seg hvis det ytre lokket ble lukket. Jeg sjekket tilkoblingen ved å åpne lokket mens jeg kjørte mosquitto_sub for å overvåke MQTT -meldinger (bytt ut mqttbroker, bruker og passord med MQTT -konfigurasjonen):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u bruker -P passord

Omtrent seks sekunder etter at det ytre lokket er åpnet, blir følgende MQTT -melding publisert. Tiden brukes til å vekke mikrokontrolleren og etablere WiFi- og meglerforbindelsen.

stat/postkasse/utløser {"vcc": 3050, "flap": true, "prev": 0, "RSSI": 29, "version": "005"}

I løpet av denne tiden brukte mikrokontrolleren omtrent 70mA. Når det er gjort, går det i dyp søvn, og i mitt tilfelle brukte det mindre enn 20uA. "klaff" er alltid sant, "vcc" angir batterispenningen i mV og "prev" skal være 0. Hvis det er 1 eller 2, betyr det at postboksen ikke kunne sende en melding tidligere, enten fordi den ikke kunne koble til WiFi, eller fordi den ikke kunne koble seg til MQTT -megleren. "RSSI" er styrken til WiFi -signalet. Begge er veldig nyttige for å diagnostisere problemer.

Det er en god idé å overvåke batterispenningen i noen dager for å sikre at enheten fungerer etter hensikten og ikke tømmer batteriet av en eller annen grunn.

Fastvaren kan også oppdatere seg selv over air (OTA), men det er litt utenfor omfanget av denne instruerbare. For de interesserte er OTA -konfigurasjonen også i config.h.

Trinn 6: Bruke Node-RED til å handle på MQTT-meldingen

Bruke Node-RED til å handle på MQTT-meldingen
Bruke Node-RED til å handle på MQTT-meldingen

Til slutt skapte jeg en enkel flyt i Node-RED. Den første noden abonnerer på emnet i postkassen (stat/postboks/utløser). Når en melding mottas, formaterer den andre noden en e -post *). Den siste noden sender den ut til min gmail -adresse, ved å bruke gmail som SMTP -server. Telefonen min vil deretter varsle meg om ny e -post.

Jeg har lagt til Node-RED-flyten i en gitlab-kodebit, slik at du kan importere den til Node-RED-strømningene.

Selvfølgelig kan du legge til noen flere noder, for eksempel for å logge postbokshendelser til MariaDb eller SqlLite, eller opprette ekstra alarmer når batterispenningen går under 2,7 volt.

God postjakt!

*) Se neste side, jeg bruker PushBullet nå i stedet for e -post.

Trinn 7: Ettertanke

Det er alltid en følelse av at ting kunne vært gjort bedre.

Bytte om

Jeg ville foretrukket å bruke en (super) magnet og en sivkontakt i stedet for den litt klønete stempelmetoden. Det var to grunner. Den ene er, det var ingen måte jeg kunne få dette til å fungere med kontakten lukket når esken ble åpnet, og å ha den alltid lukket betydde at en liten strøm alltid ville strømme. I ettertid ville ikke mindre enn 1uA som strømmer gjennom 4M7 -motstanden ha vært en stor avtale når det gjelder batterilevetid. Den andre var mer praktisk. Jeg fant opp dette prosjektet på lørdag og skrev programvaren, bygde alt på søndag fra det som lå rundt. Jeg hadde rett og slett ikke sivkontakt i søppelboksen.

Merk: som diy_bloke kommenterte, har sivkontakter en tendens til å bli klissete når de magnetiseres i lang tid, så kanskje stemplet ikke var en så dårlig idé i det hele tatt. Vi får se. *)

Melding om tømming

Postkassen sender også ut en melding når den tømmes. Dette er ikke så farlig, men med flere mennesker i huset som får advarselen, kan en ende opp i en sløyfe og sjekke postkassen som trosser hele hensikten! Det er noen få måter å løse dette på, for eksempel å sjekke om det indre lokket er løftet, og i så fall ikke sende en melding. Eller i stedet for å bruke lokkbryteren, installer du en detektor nederst i postkassen. Eller en liten tilbakestillingsknapp som skal trykkes når du tømmer den. Imidlertid ville alt komplisere ting og sannsynligvis forverre påliteligheten.

Meldinger

Å sende e -post er en ganske effektiv, men grov måte å legge ut advarselen på. En mer elegant måte ville være en telefon -app, men jeg har ikke funnet en Android MQTT dashboard -app som kan konfigureres til å utløse et operativsystemvarsel når en bestemt melding mottas. Hvis det er en i nærheten, vennligst legg til i kommentarene. **)

*) Etter mer enn et år i drift viser det seg at slikkepinnen jeg brukte, i utgangspunktet hardvalset papir, har en tendens til å forkortes under det konstante trykket på bryterfjæren. Etter litt feilsøking erstattet jeg den med en trepinne.

**) Jeg bruker PushBullet nå for push -meldinger, atskilt fra MQTT -dashbordet. Et lite Node-RED lavt grensesnitt til API finnes her. Sørg for at du angir tilgangstokenet i noden "Forbered deg på pushbullet" og e -postadressen din for tilbakekallingsformål i noden "Prøv igjen".

Anbefalt: