Innehållsförteckning:

MQTT och Wifi Powered Mailbox Flag: 7 steg (med bilder)
MQTT och Wifi Powered Mailbox Flag: 7 steg (med bilder)

Video: MQTT och Wifi Powered Mailbox Flag: 7 steg (med bilder)

Video: MQTT och Wifi Powered Mailbox Flag: 7 steg (med bilder)
Video: Solar powered mailbox camera | IoT for lazy people 2024, Juli
Anonim
MQTT och Wifi Powered Mailbox Flag
MQTT och Wifi Powered Mailbox Flag

Obs: uppdaterad med ny firmware, en schematisk och tips för en programmerare

Ett par år påbörjade jag mitt eget hemautomatiseringsprojekt. Det började med att bygga en serverstyrd 433 MHz sändarbyggnad med en Arduino för att byta massor av billiga PT2262 -baserade fjärrkontakter. Senare lade jag till en Arduino -baserad mottagare för min väderstation, kopplade upp kontrollkontakten för min EV -laddare, etc. Saker och ting blev allt mer sammanflätade (och komplicerade!). Så för några månader sedan bestämde jag mig för att standardisera allt baserat på MQTT för meddelanden, Node-RED för automatisering (båda körs på en enda Raspberry Pi B+) och MariaDb för loggning (körs på min Synology NAS). Senare flyttade jag MQTT-mäklaren (Mosquitto) och Node-RED över till NAS också.

Denna instruerbara beskriver ett dumt för skojs skull projekt som hakar min gatupostlåda i denna heminfrastruktur. Tanken är att om någon öppnar den staketmonterade brevlådan cirka 10 meter från ytterdörren, signalerar den mig på min telefon och eventuellt andra enheter.

Steg 1: Disposition, förutsättningar och delar

Översikt

På en hög nivå bör brevlådan, när den öppnas, skicka ett unikt MQTT -meddelande till mäklaren, så att prenumeranter på det ämnet kommer att informeras. Node-RED prenumererar också och gör lite automatisering, i det här fallet skickar det ett e-postmeddelande och/eller ett push-meddelande till min telefon.

Postlådan ska köras på batterier och köras i minst ett år, och bör göra det med mitt WiFi -nätverk. Eftersom det kan ta flera sekunder att väcka en mikrokontroller och ansluta till ett WiFi-nätverk kunde jag inte använda aktiveringsomkopplaren för att stänga av strömmen. I stället bör processorn få avsluta sin verksamhet efter att locket på brevlådan redan har stängts.

Förkunskaper

Jag antar att du har blygsamma lödningskunskaper, har arbetat lite med Arduino IDE och har installerat ESP8266 -korten med Boards Manager. Du måste också ha en 3,3 volt USB-adapter för att programmera mikrokontrollen.

Jag antar också att du har en MQTT-mäklare och en Node-RED-server som körs. Om inte, finns det många instruktioner på Internet, men jag skulle rekommendera att ta den lata vägen och använda Peter Scargills utmärkta installationsskript om du vill köra detta på någon Pi eller Ubuntu, eller använda Andreas Spiess bild för Pi Zero W (länkar i beskrivningen av den videon), vilket sparar dig några timmar med att titta på installationsskript som körs. Alternativt kan du få firmware att skicka ut ett e -postmeddelande direkt, men du kommer att förlora mycket flexibilitet när du gör det.

Delar

  • 1 stängd, 3 AA batterilåda
  • 2 AA -batterier
  • 1 ESP8266 -modul. För detta projekt använde jag en ESP-01
  • 1 mikrobrytare
  • 1 47K motstånd
  • 1 4M7 motstånd
  • 1 2.2uF kondensator
  • 1 tunn plaströr. Jag använde en penna
  • 1 tjock, lång tändsticka eller slickepinne. Den ska enkelt passa och röra sig i plaströret

Steg 2: Hårdvara: lådan, omkopplaren och ledningarna

Hårdvara: lådan, switch och ledningar
Hårdvara: lådan, switch och ledningar
Hårdvara: lådan, switch och ledningar
Hårdvara: lådan, switch och ledningar
Hårdvara: lådan, switch och ledningar
Hårdvara: lådan, switch och ledningar

Jag började med en gammal batterilåda från en nedlagd juldekoration. Den var designad för tre AA -batterier. Eftersom ESP8266 kommer att fungera bra på 3 volt kan jag använda två batterier och använda den tredje positionen för mikrokontrollen. Lägg märke till hur lådan hade ett litet extra fack som jag kunde använda för aktiveringsomkopplaren. Jag använde en mycket vanlig typ av strömbrytare som visas på bilderna, men tog bort fjädern som låser den i på eller av -läge. Jag lödde två tunna trådar till NC -kontakterna och limmade det i lådan med en liten droppe superlim.

Därefter borrade jag ett hål i det övre locket som matchade ett plaströr taget från en kulpenna. Hålet ligger i linje med omkopplaren och styr en kolv gjord av en tjock matchpinne.

Slutligen lodde jag ytterligare två ledningar till batterikontakterna och guidade alla fyra ledningarna till positionen för det tredje batteriet, där mikrokontrollen skulle vara.

Steg 3: Hårdvara: ESP-01

Hårdvara: ESP-01
Hårdvara: ESP-01
Hårdvara: ESP-01
Hårdvara: ESP-01
Hårdvara: ESP-01
Hårdvara: ESP-01

Med tanke på WiFi -kravet ropar hela projektet ESP8266. Denna lilla WiFi -handkontroll har blivit den mest fina arbetshästen i pysselgemenskapen som en modul som kan köpas för 2,50 EUR och integrerar en full WiFi- och TCP/IP -stack, med mer än tillräckligt med kapacitet att driva egna program. Arduino IDE (eller Atom med PlatformIO -plugin) stöder ESP8266 fullt ut.

Jag skulle vanligtvis ta en ESP-12F, men jag hade en liten ESP-01-bräda som låg perfekt för jobbet och passar fint i batterilådan. Det enda problemet är att det är ganska komplicerat att flasha firmware i ESP-01. Mer om det i nästa steg. Det finns en ändring att göra: Du måste ta bort den röda lysdioden från kortet, eftersom den kontinuerligt drar 3mA. Med lysdioden borttagen använder modulen bara några tiotals uA i djuptömningsläge vilket gör att den håller i över ett år på två kvalitets AA -batterier.

Det visade sig att jag kunde använda två remsor med 4-stifts honhuvuden och lödning på de få extra komponenterna i fri form så att jag kunde ta bort ESP-01 för att uppdatera firmware, medan den fortfarande skulle passa i det tredje batterifacket.

Det är mycket viktigt att ansluta ESP korrekt. Använd ovanstående fuskblad, vira upp det enligt följande.

  1. Batteri plus till Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) och ett 47K motstånd.
  2. Batteri minus till GND (A1) och en ledning på omkopplaren.
  3. Brytarens andra ledning till en 100nF kondensator och ett 4M7 -motstånd.
  4. De öppna ändarna på både motstånd och kondensatorn till RST (C2).
  5. TXD (A2) kan förbli oansluten.

Edit: Jag var tvungen att byta ut ESP-01 eftersom jag gjorde ett dumt misstag och förstörde det. Det visade sig att till min förvåning återställdes den nya ESP-01 inte med den ursprungliga 100nF kondensatorn. Den har förmodligen en något annorlunda design. Jag bytte ut den mot en 2,2 uF och nu fungerar den igen

När det är klart kan allt monteras i lådan, men håll ut, först måste vi programmera modulen.

Steg 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

För att blinka firmware på din ESP-01 kan du antingen bygga en liten rigg eller köpa en (nästan) komplett programmerare för cirka 1 euro.

Programmering av hårdvarrigigg

Bygg en liten rigg med igen två hona för ESP-01. Du behöver också en USB -seriemodul som kan leverera 3,3 volt. Observera att ESP8266 -chipet inte är 5 volt härdat, så ett misstag här kan döda din modul. Hur som helst, igen med fuskarket, kabela din rigg enligt följande:

  1. 3.3V från USBSerial -modulen till Vcc, CH_PD, RST och GPIO2.
  2. GND för USBSerial -modulen till GND och GPIO0.
  3. TXD för USBSerialmodulen till RXD.
  4. RDX för USBSerialmodulen till TXD.

Förbyggd programmerare

Roligt som det är att bygga dina egna grejer, det latare tillvägagångssättet är att få ett ESP-01-till-seriellt gränssnitt från din favorit auktionssajt, se bilden ovan. Detta är mycket lättare, mer kompakt och mer pålitligt än en rigg. Vissa av dessa är dock inte programmerare, bara seriella gränssnitt. Du måste löda en trådbro mellan GND (stift A1) och GPIO0 (stift C1) på baksidan av gränssnittet, se den andra bilden. Observera att ESP-01 ska anslutas med antennen vänd mot USB-kontakten, inte tvärtom!

Obs: de finns också med en switch, se tredje bilden, mycket snyggt.

Ladda in firmware

Om vi antar en Arduino IDE på 1.8.3 eller senare väljer du Verktyg> Kort och väljer det kort du har. För en ESP-01 som jag använde, välj "Generisk ESP8266-modul" och ställ in följande alternativ (detta bör vara alla standardvärden):

  1. Blixtläge: DIO
  2. Blixtfrekvens: 40 MHz
  3. CPU -frekvens: 80 MHz
  4. Blixtstorlek: 512KB (64KB SPIFFS) Obs! Om du använder ett svart ESP-01-kort väljer du 1MB (64KB SPIFFS)
  5. Felsökningsport: Inaktiverad
  6. Felsökningsnivå: Ingen
  7. Återställ metod: ck
  8. Uppladdningshastighet 115200
  9. Port: välj porten som är ansluten till ditt USB -seriella gränssnitt. För min Ubuntu -dator var det /dev /ttyUSB0

Anslut riggen/programmeraren, ladda den skiss du hittar här https://gitlab.com/jeroenmeijer/Mailbox.git. Ange dina WiFi- och MQTT -mäklaruppgifter och din IP -konfiguration i config.h och välj Ladda upp.

Steg 5: Montera allt

Montering av allt
Montering av allt

Jag borrade ett hål för plaströret i innerlocket på min brevlåda, så nära gångjärnet som möjligt, och sedan limmade jag batterilådan på undersidan av locket. Därefter använde jag en tjock match som en kolv. Jag använde en snip för att klippa tändstickan i längd så att omkopplaren skulle öppna om ytterlocket stängdes. Jag kontrollerade anslutningen genom att öppna locket medan jag kör mosquitto_sub för att övervaka MQTT -meddelanden (ersätt mqttbroker, användare och lösenord med din MQTT -konfiguration):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u användare -P lösenord

Cirka sex sekunder efter att det yttre locket öppnats publiceras följande MQTT -meddelande. Tiden används för att väcka mikrokontrollern och upprätta WiFi- och mäklaranslutningen.

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

Under denna tid använde mikrokontrollen cirka 70mA. När det är klart går det i djup sömn och i mitt fall använde det mindre än 20uA. "flik" är alltid sant, "vcc" anger batterispänningen i mV och "föregående" ska vara 0. Om det är 1 eller 2 betyder det att brevlådan inte kunde skicka ett meddelande tidigare, antingen eftersom det inte kunde ansluta till WiFi, eller för att den inte kunde ansluta till MQTT -mäklaren. "RSSI" är styrkan i WiFi -signalen. Båda är mycket praktiska för att diagnostisera problem.

Det är en bra idé att övervaka batterispänningen i några dagar för att säkerställa att enheten fungerar som den ska och inte tömmer batteriet av någon anledning.

Firmware kan också uppdatera sig själv via luften (OTA), men det ligger lite utanför ramen för detta instruerbara. För dem som är intresserade finns OTA -konfigurationen också i config.h.

Steg 6: Använda Node-RED för att agera på MQTT-meddelandet

Använda Node-RED för att agera på MQTT-meddelandet
Använda Node-RED för att agera på MQTT-meddelandet

Slutligen skapade jag ett enkelt flöde i Node-RED. Den första noden prenumererar på ämnet för brevlådan (stat/postbox/trigger). När ett meddelande tas emot formaterar den andra noden ett e -postmeddelande *). Den sista noden skickar ut den till min gmail -adress med Gmail som SMTP -server. Min telefon kommer då att meddela mig om ny e -post.

Jag har lagt till Node-RED-flödet i ett gitlab-utdrag så att du kan importera det till dina Node-RED-flöden.

Naturligtvis kan du lägga till några fler noder, till exempel för att logga brevlådeshändelserna till MariaDb eller SqlLite, eller skapa extra larm när batterispänningen går under 2,7 volt.

Glad postjakt!

*) Se nästa sida, jag använder PushBullet nu istället för e -post.

Steg 7: Eftertanke

Det finns alltid en känsla av att saker och ting kunde ha gjorts bättre.

Växla

Jag hade föredraget att använda en (super) magnet och en vass kontakt istället för det lite klumpiga kolvmetoden. Det fanns två skäl. Det ena är att det inte fanns något sätt att jag kunde få det att fungera när kontakten stängdes när lådan öppnades, och att ha den stängd innebar att en liten ström alltid skulle flöda. I efterhand skulle det mindre än 1uA som flödar genom 4M7 -motståndet inte ha varit en stor sak när det gäller batteritid. Den andra var mer praktisk. Jag skapade det här projektet på lördagen och skrev programvaran, byggde allt på söndagen från det som låg runt. Jag hade helt enkelt inte en vasskontakt i skräpboxen.

Obs: som diy_bloke kommenterade, har vasskontakter en tendens att bli klibbiga när de magnetiseras under lång tid, så kanske kolven inte var en så dålig idé alls. Vi får se. *)

Meddelande om tömning

Postlådan skickar ut ett meddelande när du tömmer det också. Det här är ingen stor grej, men med fler människor i huset som får varningen kan man hamna i en loop och kolla brevlådan som trotsar dess hela syfte! Det finns några sätt att kringgå detta, till exempel att kontrollera om det inre locket är lyft, och i så fall inte skicka ett meddelande. Eller istället för att använda lockomkopplaren, installera en detektor längst ner i brevlådan. Eller en liten återställningsknapp som du ska trycka på när du tömmer den. Men allt skulle komplicera saker och förmodligen försämra tillförlitligheten.

Meddelanden

Att skicka e -post är ett ganska effektivt men grovt sätt att släcka varningen. Ett mer elegant sätt skulle vara en telefonapp, men jag har inte hittat en Android MQTT -instrumentpanelapp som kan konfigureras för att utlösa en operativsystemvarning när ett visst meddelande tas emot. Om det finns en, lägg till i kommentarerna. **)

*) Efter mer än ett år i drift visar det sig att slickepinnen jag använde, i princip hårdvalsat papper, har en tendens att förkortas under omkopplarfjäderns konstanta tryck. Efter lite felsökning bytte jag ut den mot en träpinne.

**) Jag använder PushBullet nu för push -meddelanden, separat från MQTT -instrumentpanelen. Ett litet Node-RED lågt gränssnitt till API finns här. Se till att du tillhandahåller åtkomsttoken i noden "Förbered dig på pushbullet" och din e -postadress för reservändamål i noden "Försök igen".

Rekommenderad: