Sisukord:

MQTT ja WiFi -toega postkasti lipp: 7 sammu (piltidega)
MQTT ja WiFi -toega postkasti lipp: 7 sammu (piltidega)

Video: MQTT ja WiFi -toega postkasti lipp: 7 sammu (piltidega)

Video: MQTT ja WiFi -toega postkasti lipp: 7 sammu (piltidega)
Video: Architecture Kata #1 - Разбор с экспертом [Как работает настоящий Solution Architect] #ityoutubersru 2024, Juuni
Anonim
MQTT ja Wifi toitega postkasti lipp
MQTT ja Wifi toitega postkasti lipp

Märkus: värskendatud uue püsivara, skeemi ja näpunäidetega programmeerijale

Paar aastat alustasin oma koduautomaatika projektiga. Alustuseks ehitati Arduino abil serveriga juhitav 433 MHz saatja, mis lülitab palju odavaid PT2262 -põhiseid kauglüliteid. Hiljem lisasin oma ilmajaamale Arduino -põhise vastuvõtja, ühendasin oma EV laadija juhtkontakti jne. Asjad kasvasid üha enam (ja keeruliseks!). Niisiis otsustasin paar kuud tagasi standardiseerida kõik sõnumite saatmiseks MQTT, automatiseerimiseks Node-RED (mõlemad töötavad ühe Raspberry Pi B+) ja logimiseks MariaDb (töötab minu Synology NAS-il). Hiljem kolisin MQTT maakleri (Mosquitto) ja Node-RED ka NAS-i.

See juhend juhendab tobedat ja lõbusat projekti, mis haakis minu tänavale paigaldatud postkasti sellesse koduinfrastruktuuri. Idee on selles, et kui keegi avab aiaga kinnitatud postkasti umbes 10 meetri kaugusel välisuksest, annab see mulle märku minu telefonist ja võib -olla ka muudest seadmetest.

1. samm: ülevaade, eeltingimused ja osad

Kontuur

Kõrgel tasemel peaks postkast avamisel saatma maaklerile ainulaadse MQTT -sõnumi, nii et selle teema tellijaid teavitatakse. Sõlm-RED tellib ka ja automatiseerib, sel juhul saadab minu telefonile e-kirja ja/või tõuketeate.

Postkast peaks töötama patareidega ja töötama vähemalt aasta ning seda tuleks teha minu WiFi -võrgu abil. Kuna mikrokontrolleri äratamine ja WiFi-võrguga ühenduse loomine võib võtta mitu sekundit, ei saanud ma toite katkestamiseks aktiveerimislülitit kasutada. Selle asemel tuleks protsessoril lubada oma äri lõpetada pärast seda, kui postkasti kaas on juba suletud.

Eeltingimused

Eeldan, et teil on tagasihoidlikud jootmisoskused, olete natuke töötanud Arduino IDE -ga ja paigaldanud ESP8266 tahvlid Boards Manageri abil. Mikrokontrolleri programmeerimiseks peab teil olema ka 3,3-voldine USB-jadaadapter.

Samuti eeldan, et teil töötab MQTT maakler ja Node-RED server. Kui ei, siis Internetis on palju juhiseid, kuid ma soovitaksin kasutada laiskateed ja kasutada Peter Scargilli suurepärast installiskripti, kui soovite seda mis tahes Pi või Ubuntus käivitada või kasutada Pias Zero W (Andreas Spiess) pilti. selle video kirjelduses olevad lingid), mis säästab paar tundi installiskriptide töötamise vaatamist. Teise võimalusena võite panna püsivara saatma e -kirja otse, kuid kaotate sellega palju paindlikkust.

Osad

  • 1 suletud, 3 AA patareikarp
  • 2 AA patareid
  • 1 ESP8266 moodul. Selle projekti jaoks kasutasin ESP-01
  • 1 mikrolüliti
  • 1 47K takisti
  • 1 4M7 takisti
  • 1 2.2uF kondensaator
  • 1 õhuke plasttoru. Kasutasin pliiatsit
  • 1 paks, pikk tikutops või pulgakomm. See peaks plasttorus kergesti sobituma ja liikuma

Samm: riistvara: karp, lüliti ja juhtmestik

Riistvara: kast, lüliti ja juhtmestik
Riistvara: kast, lüliti ja juhtmestik
Riistvara: kast, lüliti ja juhtmestik
Riistvara: kast, lüliti ja juhtmestik
Riistvara: kast, lüliti ja juhtmestik
Riistvara: kast, lüliti ja juhtmestik

Alustasin vanast akukarbist, mis pärineb kadunud jõulukaunistustest. See oli mõeldud kolmele AA suurusega patareile. Kuna ESP8266 töötab kenasti 3 voltil, saaksin kasutada kahte akut ja kasutada mikrokontrolleri kolmandat positsiooni. Pange tähele, kuidas karbil oli väike lisaruum, mida saaksin aktiveerimislüliti jaoks kasutada. Kasutasin piltidel näidatud väga levinud tüüpi lülitit, kuid eemaldasin vedru, mis lukustab selle sisse või välja. Jootsin kaks õhukest traati NC kontaktide külge ja liimisin selle karbi sisse pisikese tilga superliimiga.

Järgmisena puurisin ülemisse kaanesse augu, mis sobib pastapliiatsist võetud plasttoruga. Auk joondub täpselt lülitiga ja juhib paksust tikupulgast valmistatud kolbi.

Lõpuks jootsin veel kaks juhet aku kontaktide juurde ja juhtisin kõik neli juhtmest kolmanda aku asendisse, kus mikrokontroller pidi olema.

Samm: riistvara: ESP-01

Riistvara: ESP-01
Riistvara: ESP-01
Riistvara: ESP-01
Riistvara: ESP-01
Riistvara: ESP-01
Riistvara: ESP-01

Võttes arvesse WiFi nõuet, hüüab kogu projekt ESP8266. Sellest väikesest WiFi -kontrollerist on saanud nokitsejate kogukonna lemmikhobune moodulina, mille saab osta alla 2,50 euro ja mis sisaldab täielikku WiFi- ja TCP/IP -virna, kus on rohkem kui piisavalt ruumi oma programmide käivitamiseks. Arduino IDE (või Atom koos PlatformIO pistikprogrammiga) toetab täielikult ESP8266.

Tavaliselt võtaksin ESP-12F, kuid mul oli ümber pisike ESP-01 plaat, mis sobis selle töö jaoks ideaalselt ja mahub kenasti akukasti. Ainus probleem on see, et ESP-01 püsivara välk on üsna keeruline. Sellest lähemalt järgmises etapis. Tuleb teha üks muudatus: peate eemaldama plaadilt punase toite LED, kuna see tõmbab pidevalt 3mA. Kui LED on eemaldatud, kasutab moodul sügavas unerežiimis vaid mõnikümmend uA -d, mis tagab kahe kvaliteetse AA -patareiga kestmise üle aasta.

Selgus, et võin vabas vormis kasutada paari riba 4-pin naissoost päiseid ja jootmist mõne lisakomponendi peale, et saaksin püsivara värskendamiseks ESP-01 eemaldada, samal ajal kui see mahuks veel kolmandasse patareisahtlisse.

Väga oluline on ESP õigesti ühendada. Kasutage ülaltoodud petulehte, ühendage see järgmiselt.

  1. Aku pluss Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) ja 47K takisti.
  2. Aku miinus GND (A1) ja lüliti üks juhe.
  3. Lüliti teine juhe on 100nF kondensaator ja 4M7 takisti.
  4. Mõlema takisti ja kondensaatori avatud otsad RST -le (C2).
  5. TXD (A2) võib jääda ühendamata.

Edit: pidin ESP-01 välja vahetama, sest tegin rumala vea ja hävitasin selle. Selgus, et minu üllatuseks ei taastatud uut ESP-01 algse 100 nF kondensaatoriga. Tõenäoliselt on sellel veidi erinev disain. Vahetasin selle 2.2 uF vastu ja nüüd töötab jälle

Kui see on tehtud, saab kõik kasti paigaldada, kuid pidage kinni, kõigepealt peame mooduli programmeerima.

4. samm: ESP-01 programmeerimine

ESP-01 programmeerimine
ESP-01 programmeerimine
ESP-01 programmeerimine
ESP-01 programmeerimine
ESP-01 programmeerimine
ESP-01 programmeerimine

ESP-01 püsivara vilkumiseks võite ehitada väikese seadme või osta (peaaegu) täieliku programmeerija umbes 1 euro eest.

Riistvara programmeerimine

Ehitage ESP-01 jaoks väike rig koos kahe naispeaga. Lisaks vajate USB -jadamoodulit, mis suudab toita 3,3 volti. Pange tähele, et ESP8266 kiip ei ole 5 volti karastatud, nii et viga võib teie mooduli tappa. Igatahes, kasutades uuesti petulehte, ühendage oma seade nii:

  1. 3.3V USBSerial moodulist Vcc, CH_PD, RST ja GPIO2.
  2. USB -seriaalmooduli GND GND -le ja GPIO0 -le.
  3. USBSerial mooduli TXD RXD -le.
  4. USB -seriaalmooduli RDX TXD -le.

Ehitamise eelprogrammeerija

Nii lõbus kui ka oma asju ehitada, laisem lähenemisviis on hankida oma lemmikoksjonisaidilt ESP-01-jadaliides, vt ülaltoodud pilti. See on palju lihtsam, kompaktsem ja usaldusväärsem kui rig. Kuid mõned neist ei ole programmeerijad, vaid jadaliidesed. Peate jootma traadisilla GND (tihvt A1) ja GPIO0 (tihvt C1) vahel liidese tagaküljel, vt teist pilti. Pange tähele, et ESP-01 tuleb ühendada nii, et antenn on suunatud USB-pistiku poole, mitte vastupidi!

Märkus: need on olemas ka lülitiga, vaata kolmandat pilti, väga kena.

Laadige püsivara

Eeldades, et Arduino IDE on 1.8.3 või uuem, valige Tools> Board ja valige tahvel, mis teil on. ESP-01 jaoks, nagu ma kasutasin, valige "Generic ESP8266 Module" ja määrake järgmised valikud (need peaksid olema kõik vaikeseaded):

  1. Välgurežiim: DIO
  2. Välgu sagedus: 40 MHz
  3. Protsessori sagedus: 80 MHz
  4. Välgu suurus: 512 KB (64 KB SPIFFS) Märkus: kui kasutate musta ESP-01 plaati, valige 1 MB (64 KB SPIFFS)
  5. Silumisport: keelatud
  6. Silumise tase: puudub
  7. Lähtestusmeetod: ck
  8. Üleslaadimiskiirus 115200
  9. Port: valige USB -jadaliidesega ühendatud port. Minu Ubuntu arvuti jaoks oli see /dev /ttyUSB0

Ühendage seade/programmeerija, laadige eskiis, mille leiate siit https://gitlab.com/jeroenmeijer/Mailbox.git. Esitage konfiguratsioonis h oma WiFi ja MQTT maakleri mandaadid ning oma IP -konfiguratsioon ja valige Laadi üles.

Samm: koguge see kokku

Selle kõige kokkupanek
Selle kõige kokkupanek

Puurisin oma postkasti sisemisse kaane sisse plasttoru jaoks augu võimalikult hinge lähedusse, seejärel liimisin kuumalt aku kaane selle kaane alla. Järgmisena kasutasin kolbina paksu tikku. Lõikasin tiku pikkusega nii, et lüliti avaneks, kui väliskaas suletakse. Ma kontrollisin ühenduvust, avades kaane mosquitto_sub töötamise ajal MQTT -sõnumite jälgimiseks (asendage mqttbroker, kasutaja ja parool oma MQTT -konfiguratsiooniga):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u kasutaja -P parool

Umbes kuus sekundit pärast välimise kaane avamist avaldatakse järgmine MQTT -teade. Aega kasutatakse mikrokontrolleri äratamiseks ning WiFi ja maakleriühenduse loomiseks.

stat/mailbox/trigger {"vcc": 3050, "klapp": tõsi, "eelmine": 0, "RSSI": 29, "versioon": "005"}

Selle aja jooksul kasutas mikrokontroller umbes 70 mA. Kui see on tehtud, läheb see sügavasse unne ja minu puhul kasutas see alla 20uA. "klapp" on alati tõsi, "vcc" märgib aku pinget mV -s ja "prev" peaks olema 0. Kui see on 1 või 2, tähendab see, et postkast ei saanud sõnumit varem saata, kuna see ei saanud ühendust luua WiFi või kuna see ei saanud ühendust MQTT maakleriga. "RSSI" on WiFi -signaali tugevus. Mõlemad on probleemide diagnoosimisel väga käepärased.

Mõistlik on jälgida aku pinget paar päeva, et veenduda, et seade töötab ettenähtud viisil ega tühjenda seda mingil põhjusel.

Püsivara on võimeline ennast ka õhu kaudu värskendama (OTA), kuid see jääb natuke sellest juhendist välja. Huvilistele on OTA konfiguratsioon ka config.h.

6. samm: sõlme-punase kasutamine MQTT-sõnumil tegutsemiseks

Sõlme-PUNANE kasutamine MQTT-sõnumil tegutsemiseks
Sõlme-PUNANE kasutamine MQTT-sõnumil tegutsemiseks

Lõpuks lõin Node-RED-is lihtsa voo. Esimene sõlm tellib postkasti teema (stat/postbox/trigger). Kui sõnum on vastu võetud, vormindab teine sõlm e -kirja *). Viimane sõlm saadab selle minu gmaili aadressile, kasutades gmaili SMTP -serverina. Mu telefon teavitab mind uutest kirjadest.

Olen lisanud Node-RED voo gitlabi katkendisse, et saaksite selle oma Node-RED voogudesse importida.

Muidugi saate lisada veel mõned sõlmed, näiteks postkasti sündmuste logimiseks MariaDb või SqlLite'i või luua täiendavaid häireid, kui aku pinge langeb alla 2,7 volti.

Head postijahti!

*) Vt järgmist lehte, ma kasutan e -posti asemel praegu PushBulleti.

7. samm: järelmõtted

Alati on selline tunne, et asju oleks saanud paremini teha.

Lüliti

Oleksin eelistanud mõnevõrra kohmaka kolvikäsitluse asemel kasutada (super) magnetit ja pillirookontakti. Põhjusi oli kaks. Üks on see, et ma ei suutnud kuidagi seda tööd teha, kui kontakt avanes ja kui see oli alati suletud, tähendas see alati väikest voolu. Tagantjärele ei oleks 4M7 takisti kaudu voolav vähem kui 1uA aku kestvuse seisukohalt suur asi olnud. Teine oli praktilisem. Ma koostasin selle projekti laupäeval ja kirjutasin tarkvara, ehitage see kõik pühapäeval sellest, mis ümberringi oli. Mul lihtsalt polnud prügikastis pilliroo kontakti.

Märkus: nagu diy_bloke kommenteeris, on pilliroo kontaktidel kalduvus pikaks ajaks magnetiseerimisel kleepuvaks muutuda, nii et võib -olla polnud kolb üldse nii halb mõte. Eks me näe. *)

Sõnum tühjendamise kohta

Ka postkast saadab tühjendamisel sõnumi välja. See ei ole suur asi, kuid kui rohkem inimesi majas hoiatust saab, võib lõppeda silmus, mis kontrollib postkasti, trotsides selle kogu eesmärki! Selle vältimiseks on mitu võimalust, näiteks kontrollida, kas sisemine kaas on üles tõstetud ja kui jah, siis ärge saatke sõnumit. Või selle asemel, et kasutada kaane lülitit, paigaldage detektor postkasti alla. Või tühjendamisel vajutada väikest lähtestusnuppu. Kõik aga teeks asja keerulisemaks ja tõenäoliselt halvendaks töökindlust.

Sõnumid

E -kirjade saatmine on üsna tõhus, kuid ebaviisakas viis hoiatuse kustutamiseks. Elegantsem viis oleks telefonirakendus, kuid ma ei ole leidnud Androidi MQTT armatuurlauarakendust, mida saab konfigureerida käivitama operatsioonisüsteemi hoiatuse teatud sõnumi saabumisel. Kui see on ümberringi, lisage see kommentaaridesse. **)

*) Pärast enam kui aastast töötamist selgub, et minu kasutatud pulgakommipulgal, põhimõtteliselt kõvasti rullitud paberil, on kalduvus lülitusvedru pideva rõhu all lüheneda. Pärast mõningaid tõrkeotsinguid asendasin selle puupulgaga.

**) Ma kasutan PushBulletit nüüd tõukesõnumite jaoks, eraldi MQTT armatuurlaualt. Pisikesed Node-RED madalad liidesed API-ga leiate siit. Veenduge, et sisestate sõlmes "Valmistuge tõukeks" juurdepääsuloa ja sõlme "Proovi uuesti" jaoks oma e -posti aadressi varukoopiate tegemiseks.

Soovitan: