Inhoudsopgave:
- Stap 1: Overzicht, vereisten en onderdelen
- Stap 2: Hardware: de doos, schakelaar en bedrading
- Stap 3: Hardware: de ESP-01
- Stap 4: Programmeren van de ESP-01
- Stap 5: Alles in elkaar zetten
- Stap 6: Node-RED gebruiken om op het MQTT-bericht te reageren
- Stap 7: Nadenken
Video: MQTT en wifi-aangedreven mailboxvlag - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
Let op: bijgewerkt met nieuwe firmware, een schema en tips voor een programmeur
Een paar jaar ben ik begonnen aan mijn eigen domotica-project. Het begon met het bouwen van een servergestuurde 433 MHz-zender gebouwd met een Arduino om veel goedkope op PT2262 gebaseerde externe schakelaars te schakelen. Later heb ik een op Arduino gebaseerde ontvanger voor mijn weerstation toegevoegd, het stuurcontact van mijn EV-oplader aangesloten, enzovoort. De zaken raakten steeds meer met elkaar verweven (en gecompliceerd!). Dus besloot ik een paar maanden geleden om alles te standaardiseren op basis van MQTT voor messaging, Node-RED voor automatisering (beide draaien op een enkele Raspberry Pi B+) en MariaDb voor logging (draaien op mijn Synology NAS). Later heb ik de MQTT-broker (Mosquitto) en Node-RED ook naar de NAS verplaatst.
Dit instructable beschrijft een dwaas voor de lol project dat mijn op straat gemonteerde brievenbus in deze thuisinfrastructuur aansluit. Het idee is dat als iemand de op het hek gemonteerde brievenbus ongeveer 10 meter van de voordeur opent, dit mij op mijn telefoon en mogelijk andere apparaten signaleert.
Stap 1: Overzicht, vereisten en onderdelen
Overzicht
Op hoog niveau moet de mailbox, wanneer deze wordt geopend, een uniek MQTT-bericht naar de makelaar sturen, zodat abonnees op dat onderwerp worden geïnformeerd. Node-RED is ook geabonneerd en doet wat automatisering, in dit geval een e-mail en/of een pushbericht naar mijn telefoon sturen.
De mailbox moet op batterijen werken en minimaal een jaar meegaan, en wel via mijn wifi-netwerk. Omdat het activeren van een microcontroller en verbinding maken met een wifi-netwerk enkele seconden kan duren, kon ik de activeringsschakelaar niet gebruiken om de stroom uit te schakelen. In plaats daarvan zou de verwerker zijn werk moeten kunnen afmaken nadat het deksel van de brievenbus al is gesloten.
Vereisten
Ik neem aan dat je een bescheiden soldeervaardigheid hebt, een beetje met de Arduino IDE hebt gewerkt en de ESP8266-kaarten hebt geïnstalleerd met behulp van de Boards Manager. U hebt ook een 3,3 volt USB Serial-adapter nodig om de microcontroller te programmeren.
Ik neem ook aan dat je een MQTT-broker en een Node-RED-server hebt draaien. Zo niet, dan zijn er veel instructies op internet, maar ik zou adviseren om de luie route te nemen en het uitstekende installatiescript van Peter Scargill te gebruiken als je dit op een Pi of Ubuntu wilt uitvoeren, of de afbeelding van Andreas Spiess voor de Pi Zero W (links in de beschrijving van die video), wat u een paar uur bespaart bij het kijken naar draaiende installatiescripts. Als alternatief kunt u de firmware rechtstreeks een e-mail laten verzenden, maar u verliest veel flexibiliteit als u dit doet.
Onderdelen
- 1 gesloten, 3 AA-batterijdoos
- 2 AA-batterijen
- 1 ESP8266-module. Voor dit project gebruikte ik een ESP-01
- 1 microschakelaar
- 1 47K weerstand
- 1 4M7 weerstand
- 1 2.2uF condensator
- 1 dunne plastic buis. ik heb een pen gebruikt
- 1 dikke, lange lucifer of lollystokje. Het moet gemakkelijk in de plastic buis passen en bewegen
Stap 2: Hardware: de doos, schakelaar en bedrading
Ik begon met een oude accubak van een ter ziele gegane kerstversiering. Het is ontworpen voor drie AA-batterijen. Omdat de ESP8266 mooi op 3 volt loopt, zou ik twee batterijen kunnen gebruiken en de derde positie voor de microcontroller. Merk op hoe de doos een klein extra compartiment had dat ik kon gebruiken voor de activeringsschakelaar. Ik heb een veelgebruikt type schakelaar gebruikt dat op de foto's wordt getoond, maar verwijderde de veer die hem in de aan- of uit-stand vergrendelt. Ik heb twee dunne draden aan de NC-contacten gesoldeerd en in de doos gelijmd met een klein druppeltje superlijm.
Vervolgens boorde ik een gat in de bovenklep, passend bij een plastic buisje uit een balpen. Het gat is precies uitgelijnd met de schakelaar en geleidt een plunjer gemaakt van een dikke lucifer.
Ten slotte heb ik nog twee draden aan de batterijcontacten gesoldeerd en alle vier de draden naar de positie van de derde batterij geleid, waar de microcontroller zou komen.
Stap 3: Hardware: de ESP-01
Gezien de wifi-eis schreeuwt het hele project ESP8266. Deze kleine wifi-controller is het favoriete werkpaard van de knutselgemeenschap geworden als een module die voor minder dan 2,50 euro kan worden gekocht en die een volledige wifi- en TCP/IP-stack integreert, met meer dan genoeg capaciteit om je eigen programma's te draaien. De Arduino IDE (of Atom met de PlatformIO-plug-in) ondersteunt de ESP8266 volledig.
Ik zou meestal een ESP-12F nemen, maar ik had een klein ESP-01-bordje liggen dat perfect was voor de klus en mooi in de accubak past. Het enige probleem is dat het behoorlijk ingewikkeld is om firmware in de ESP-01 te flashen. Daarover meer in de volgende stap. Er is één wijziging die moet worden aangebracht: u moet de rode voedings-LED van het bord verwijderen, omdat deze continu 3mA trekt. Als de LED is verwijderd, gebruikt de module slechts enkele tientallen uA in de diepe slaapmodus, waardoor hij meer dan een jaar meegaat op twee hoogwaardige AA-batterijen.
Het bleek dat ik twee strips van 4-pins vrouwelijke headers kon gebruiken en de paar extra componenten in vrije vorm kon solderen, zodat ik de ESP-01 kon verwijderen om de firmware te updaten, terwijl hij nog in het derde batterijcompartiment zou passen.
Het is erg belangrijk om de ESP correct te bedraden. Gebruik het bovenstaande spiekbriefje om het als volgt aan te sluiten.
- Batterij plus naar Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) en een 47K-weerstand.
- Batterij min naar GND (A1) en één draad van de schakelaar.
- De andere draad van de schakelaar naar een 100nF condensator en een 4M7 weerstand.
- De open uiteinden van beide weerstanden en de condensator naar RST (C2).
- TXD (A2) kan losgekoppeld blijven.
Bewerken: ik moest de ESP-01 vervangen omdat ik een domme fout maakte en hem vernietigde. Bleek dat tot mijn verbazing de nieuwe ESP-01 niet resette met de originele 100nF condensator. Het heeft waarschijnlijk een iets ander ontwerp. Ik heb hem vervangen door een 2.2 uF en nu werkt het weer
Als je klaar bent, kan alles in de doos worden gemonteerd, maar wacht even, eerst moeten we de module programmeren.
Stap 4: Programmeren van de ESP-01
Om de firmware op je ESP-01 te flashen, kun je een kleine rig bouwen of een (bijna) complete programmer kopen voor ongeveer 1 euro.
Hardwarematige programmering
Bouw een kleine rig met weer twee vrouwelijke headers voor de ESP-01. U hebt ook een seriële USB-module nodig die 3,3 volt kan leveren. Merk op dat de ESP8266-chip niet 5 volt gehard is, dus een fout hier kan uw module doden. Hoe dan ook, gebruik opnieuw het spiekbriefje en bedraad je rig als volgt:
- 3.3V van de USBSerial-module naar Vcc, CH_PD, RST en GPIO2.
- GND van de USBSerial-module naar GND en GPIO0.
- TXD van de USBSerial-module naar RXD.
- RDX van de USBSerial-module naar TXD.
Pre-build programmeur
Hoe leuk het ook is om je eigen spullen te bouwen, de luiere benadering is om een ESP-01-naar-serieel interface te krijgen van je favoriete veilingsite, zie de afbeelding hierboven. Dit is veel gemakkelijker, compacter en betrouwbaarder dan een rig. Sommige hiervan zijn echter geen programmeurs, maar seriële interfaces. U dient een draadbrug te solderen tussen GND (pin A1) en GPIO0 (pin C1) aan de achterzijde van de interface, zie de tweede foto. Merk op dat de ESP-01 moet worden aangesloten met de antenne naar de USB-stekker gericht, niet andersom!
Let op: ze bestaan ook met een schakelaar, zie derde foto, erg mooi.
Laad de firmware
Uitgaande van een Arduino IDE van 1.8.3 of hoger, selecteer Tools > Board en selecteer het board dat je hebt. Voor een ESP-01 zoals ik gebruikte, kies "Generic ESP8266 Module" en stel de volgende opties in (dit zouden alle standaardinstellingen moeten zijn):
- Flitsmodus: DIO
- Flitsfrequentie: 40MHz
- CPU-frequentie: 80 MHz
- Flash grootte: 512KB (64KB SPIFFS) Let op: als je een zwart ESP-01 board gebruikt, kies dan 1MB (64KB SPIFFS)
- Foutopsporingspoort: Uitgeschakeld
- Foutopsporingsniveau: Geen
- Reset methode: ck
- Uploadsnelheid 115200
- Poort: selecteer de poort die is aangesloten op uw seriële USB-interface. Voor mijn Ubuntu-pc was dat /dev/ttyUSB0
Sluit de rig / programmer aan, laad de Sketch die je hier kunt vinden https://gitlab.com/jeroenmeijer/Mailbox.git. Geef uw WiFi- en MQTT-brokerreferenties en uw IP-configuratie op in config.h en kies Uploaden.
Stap 5: Alles in elkaar zetten
Ik boorde een gat voor de plastic buis in het binnendeksel van mijn brievenbus, zo dicht mogelijk bij het scharnier, en verlijmde vervolgens de batterijdoos aan de onderkant van dat deksel. Vervolgens gebruikte ik een dikke lucifer als zuiger. Ik gebruikte een knipsel om de lucifer op lengte te knippen, zodat de schakelaar zou openen als het buitenste deksel gesloten was. Ik heb de connectiviteit gecontroleerd door het deksel te openen tijdens het uitvoeren van mosquitto_sub om MQTT-berichten te controleren (vervang mqttbroker, gebruiker en wachtwoord door uw MQTT-configuratie):
$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u gebruiker -P wachtwoord
Ongeveer zes seconden nadat het buitenste deksel is geopend, wordt het volgende MQTT-bericht gepubliceerd. De tijd wordt gebruikt om de microcontroller te wekken en de wifi- en brokerverbinding tot stand te brengen.
stat/mailbox/trigger {"vcc":3050, "flap":true, "prev":0, "RSSI":29, "version": "005"}
Gedurende deze tijd gebruikte de microcontroller ongeveer 70 mA. Als het klaar is, gaat het in diepe slaap en in mijn geval gebruikte het minder dan 20uA. "flap" is altijd waar, "vcc" geeft aan dat de batterijspanning in mV en "prev" 0 moet zijn. Als het 1 of 2 is, betekent dit dat de mailbox niet eerder een bericht kon verzenden, ofwel omdat het geen verbinding kon maken met de WiFi, of omdat het geen verbinding kon maken met de MQTT-makelaar. "RSSI" is de sterkte van het wifi-signaal. Beide zijn erg handig om problemen te diagnosticeren.
Het is een goed idee om de batterijspanning een paar dagen in de gaten te houden om er zeker van te zijn dat het apparaat werkt zoals bedoeld en de batterij om de een of andere reden niet leegraakt.
De firmware kan zichzelf ook via de ether (OTA) bijwerken, maar dat valt iets buiten het bestek van deze instructable. Voor de geïnteresseerden, de OTA-configuratie staat ook in config.h.
Stap 6: Node-RED gebruiken om op het MQTT-bericht te reageren
Ten slotte heb ik een eenvoudige stroom gemaakt in Node-RED. Het eerste knooppunt abonneert zich op het onderwerp van de mailbox (stat/postbox/trigger). Wanneer een bericht wordt ontvangen, maakt het tweede knooppunt een e-mail *). Het laatste knooppunt stuurt het naar mijn gmail-adres, met gmail als SMTP-server. Mijn telefoon waarschuwt me dan als er nieuwe e-mail is.
Ik heb de Node-RED-stroom toegevoegd aan een gitlab-fragment, zodat je het in je Node-RED-stromen kunt importeren.
Natuurlijk kun je wat meer nodes toevoegen, bijvoorbeeld om de mailbox-gebeurtenissen in MariaDb of SqlLite te loggen, of extra alarmen te creëren wanneer de batterijspanning onder de 2,7 volt komt.
Veel post-hunting!
*) Zie volgende pagina, ik gebruik nu PushBullet in plaats van e-mail.
Stap 7: Nadenken
Er is altijd het gevoel dat dingen beter hadden gekund.
Schakelaar
Ik had liever een (super)magneet en een reedcontact gebruikt in plaats van de wat onhandige plunjeraanpak. Er waren twee redenen. Een daarvan is dat ik dit op geen enkele manier kon laten werken met het contact dat werd gesloten toen de doos werd geopend, en als het altijd gesloten was, zou er altijd een kleine stroom vloeien. Achteraf gezien zou de minder dan 1uA die door de 4M7-weerstand vloeit geen groot probleem zijn geweest in termen van levensduur van de batterij. De andere was een meer praktische. Ik verzon dit project op zaterdag en schreef de software, bouwde het allemaal op zondag van wat er lag. Ik had gewoon geen reed-contact in de junkbox.
Opmerking: zoals diy_bloke opmerkte, hebben reedcontacten de neiging om plakkerig te worden als ze lange tijd worden gemagnetiseerd, dus misschien was de plunjer helemaal niet zo'n slecht idee. We zullen zien. *)
Bericht bij legen
De mailbox verstuurt ook een bericht bij het legen ervan. Dit is niet erg, maar met meer mensen in huis die de waarschuwing krijgen, kan je in een lus terechtkomen die de mailbox controleert en zijn hele doel tart! Er zijn een paar manieren om dit te omzeilen, zoals controleren of het binnendeksel is opgetild, en zo ja, stuur dan geen bericht. Of installeer in plaats van de dekselschakelaar een detector aan de onderkant van de brievenbus. Of een kleine resetknop die moet worden ingedrukt bij het legen. Alles zou de zaken echter compliceren en waarschijnlijk de betrouwbaarheid verslechteren.
Berichten
Het verzenden van e-mail is een vrij effectieve maar grove manier om de waarschuwing te verspreiden. Een elegantere manier zou een telefoon-app zijn, maar ik heb geen Android MQTT-dashboard-app gevonden die kan worden geconfigureerd om een besturingssysteemwaarschuwing te activeren wanneer een bepaald bericht wordt ontvangen. Als er een in de buurt is, voeg dan toe aan de opmerkingen. **)
*) Na meer dan een jaar in gebruik blijkt dat het lollystokje dat ik heb gebruikt, in feite hard opgerold papier, de neiging heeft om korter te worden onder de constante druk van de schakelveer. Na wat probleemoplossing heb ik het vervangen door een houten stok.
**) Ik gebruik PushBullet nu voor pushberichten, los van het MQTT-dashboard. Een kleine Node-RED lage interface naar de API is hier te vinden. Zorg ervoor dat u het toegangstoken in node "Prepare for pushbullet" en uw e-mailadres voor fallback-doeleinden in node "Retry" invoert.
Aanbevolen:
MQTT op Armtronix-borden: 3 stappen
MQTT op Armtronix-borden: in deze instructable willen we u in eerste instantie laten zien hoe u een op Linux (Debian of Ubuntu) gebaseerd systeem kunt gebruiken en Mosquitto (Mqtt Broker) erop kunt installeren, en laat u ook zien hoe u de Mqtt-client op uw telefoon gebruikt ( Android)/ Linux-gebaseerd systeem, verzenden en
SmartHome draadloze communicatie: de extreme basis van MQTT: 3 stappen
SmartHome draadloze communicatie: de extreme basis van MQTT: MQTT basis: **Ik ga een serie domotica doen, ik zal de stappen doorlopen die ik heb genomen om alles te leren wat ik in de toekomst heb gedaan. Deze Instructable is de basis voor het instellen van MQTT voor gebruik in mijn toekomstige Instructables. echter
ESP8266 RGB LED STRIP WIFI-bediening - NODEMCU Als een IR-afstandsbediening voor ledstrip, bestuurd via wifi - RGB LED STRIP Smartphone-bediening: 4 stappen
ESP8266 RGB LED STRIP WIFI-bediening | NODEMCU Als een IR-afstandsbediening voor ledstrip, bestuurd via wifi | RGB LED STRIP Smartphone-bediening: Hallo allemaal, in deze tutorial zullen we leren hoe we nodemcu of esp8266 kunnen gebruiken als een IR-afstandsbediening om een RGB LED-strip te bedienen en Nodemcu zal worden bestuurd door smartphone via wifi. Dus in principe kun je de RGB LED STRIP bedienen met je smartphone
Uw elektriciteitsmeter voor het elektriciteitsnet uitlezen (ESP8266, WiFi, MQTT en Openhab): 6 stappen (met afbeeldingen)
Lees uw belangrijkste elektriciteitsmeter (ESP8266, WiFi, MQTT en Openhab): In deze Instructable ontdek je hoe ik mijn belangrijkste elektriciteitsverbruik van mijn huis lees en publiceer het via een ESP8266, Wifi, MQTT in mijn Openhab Home Automation. Ik heb een 'slimme meter' ISKRA Type MT372, maar het heeft geen gemakkelijke mogelijkheid om de
ESP8266-NODEMCU $3 WiFi-module #1- Aan de slag met WiFi: 6 stappen
ESP8266-NODEMCU $3 WiFi-module #1- Aan de slag met WiFi: een nieuwe wereld van deze microcomputers is gearriveerd en dit ding is de ESP8266 NODEMCU. Dit is het eerste deel dat laat zien hoe je de omgeving van de esp8266 in je arduino IDE kunt installeren via de aan de slag-video en als de onderdelen inc