Բովանդակություն:

MQTT և Wifi էլեկտրոնային փոստարկղերի դրոշ ՝ 7 քայլ (նկարներով)
MQTT և Wifi էլեկտրոնային փոստարկղերի դրոշ ՝ 7 քայլ (նկարներով)

Video: MQTT և Wifi էլեկտրոնային փոստարկղերի դրոշ ՝ 7 քայլ (նկարներով)

Video: MQTT և Wifi էլեկտրոնային փոստարկղերի դրոշ ՝ 7 քայլ (նկարներով)
Video: Home Assistant. Դաս 9.4 ADD-ON - Xiaomi Gateway 3, zigbee2mqtt ինտեգրում 2024, Նոյեմբեր
Anonim
MQTT և Wifi էլեկտրոնային փոստարկղերի դրոշակ
MQTT և Wifi էլեկտրոնային փոստարկղերի դրոշակ

Նշում. Թարմացվել է նոր որոնվածով, սխեմայով և ծրագրավորողի խորհուրդներով:

Մի քանի տարի ես սկսեցի սեփական տան ավտոմատացման նախագիծը: Այն սկսվեց ՝ 433 ՄՀց հաճախականությամբ հաղորդիչ կառուցելով Arduino- ով, որը կառուցում է PT2262- ով էժան հեռավոր անջատիչներ: Ավելի ուշ ես ավելացրեցի Arduino- ի վրա հիմնված իմ օդերևութաբանական կայանի ընդունիչը, միացրեցի իմ EV լիցքավորիչի կառավարման կոնտակտը և այլն: Իրերն ավելի ու ավելի էին փոխկապակցված (և բարդ!): Այսպիսով, մի քանի ամիս առաջ ես որոշեցի ստանդարտացնել հաղորդագրությունների համար MQTT- ի հիման վրա, ավտոմատացման համար ՝ Node-RED- ը (երկուսն էլ աշխատում են մեկ Raspberry Pi B+-ով) և MariaDb- ը ՝ մուտք գործելու համար (աշխատում է իմ Synology NAS- ում): Հետագայում ես տեղափոխեցի MQTT բրոքերը (Mosquitto) և Node-RED- ը նաև ԳԱԱ:

Այս հրահանգը նկարագրում է մի զվարճալի հիմար նախագիծ, որը կողպում է իմ փողոցում տեղադրված փոստարկղը այս տան ենթակառուցվածքում: Գաղափարն այն է, որ եթե ինչ -որ մեկը բացում է ցանկապատի վրա տեղադրված փոստարկղը մուտքի դռնից մոտ 10 մ հեռավորության վրա, դա ազդանշան է տալիս իմ հեռախոսին և, հնարավոր է, այլ սարքերին:

Քայլ 1. Ուրվագիծ, նախադրյալներ և մասեր

Ուրվագիծ

Բարձր մակարդակով, փոստարկղը պետք է բացելիս բրոքերին ուղարկի յուրահատուկ MQTT հաղորդագրություն, որպեսզի այդ թեմայի բաժանորդները տեղեկացված լինեն: Node-RED- ը նույնպես բաժանորդագրվում է և կատարում է որոշակի ավտոմատացում, այս դեպքում էլ.

Փոստարկղը պետք է աշխատի մարտկոցներով և աշխատի առնվազն մեկ տարի, և դա պետք է անի ՝ օգտագործելով իմ WiFi ցանցը: Քանի որ միկրոհսկիչի արթնացումն ու WiFi ցանցին միանալը կարող է տևել մի քանի վայրկյան, ես չէի կարող օգտագործել ակտիվացման անջատիչը ՝ հոսանքը անջատելու համար: Փոխարենը, պրոցեսորին պետք է թույլ տալ ավարտել իր աշխատանքը փոստարկղի կափարիչը արդեն փակվելուց հետո:

Նախադրյալներ

Ենթադրում եմ, որ դուք ունեք զոդման համեստ հմտություններ, մի փոքր աշխատել եք Arduino IDE- ի հետ և տեղադրել եք ESP8266 տախտակները ՝ օգտագործելով Տախտակների կառավարիչը: Միկրոհսկիչը ծրագրավորելու համար անհրաժեշտ է ունենալ նաև 3.3 վոլտ USB սերիայի ադապտեր:

Ես նաև ենթադրում եմ, որ դուք ունեք MQTT բրոքեր և աշխատում է Node-RED սերվեր: Եթե ոչ, ապա ինտերնետում շատ հրահանգներ կան, բայց ես խորհուրդ կտայի գնալ ծույլ ճանապարհով և օգտագործել Պիտեր Սկարգիլի հիանալի տեղադրման սցենարը, եթե ցանկանում եք այն գործարկել ցանկացած Pi- ով կամ Ubuntu- ով, կամ օգտագործել Անդրեաս Սփիեսի պատկերը Pi Zero W- ի համար (հղումներ այդ տեսանյութի նկարագրության մեջ), որը մի քանի ժամ կխնայի տեղադրման սցենարների աշխատանքը դիտելուց: Այլապես, կարող եք ստիպել որոնվածը ուղարկել նամակ ուղղակիորեն, բայց դա անելու համար դուք կկորցնեք մեծ ճկունություն:

Մասեր

  • 1 փակ, 3 AA մարտկոցի տուփ
  • 2 AA մարտկոց
  • 1 ESP8266 մոդուլ: Այս նախագծի համար ես օգտագործեցի ESP-01
  • 1 միկրո անջատիչ
  • 1 47K դիմադրություն
  • 1 4M7 ռեզիստոր
  • 1 2.2uF կոնդենսատոր
  • 1 բարակ պլաստիկ խողովակ: Ես գրիչ եմ օգտագործել
  • 1 հաստ, երկար լուցկի կամ շուշանի փայտ: Այն պետք է հեշտությամբ տեղավորվի և տեղափոխվի պլաստիկ խողովակի մեջ

Քայլ 2: Սարքաշար. Տուփ, անջատիչ և լարեր

Սարքավորումներ. Տուփը, անջատիչը և լարերը
Սարքավորումներ. Տուփը, անջատիչը և լարերը
Սարքավորումներ. Տուփը, անջատիչը և լարերը
Սարքավորումներ. Տուփը, անջատիչը և լարերը
Սարքավորումներ. Տուփը, անջատիչը և լարերը
Սարքավորումներ. Տուփը, անջատիչը և լարերը

Ես սկսեցի հին մարտկոցի տուփով ՝ այլասերված ամանորյա զարդարանքից: Այն նախատեսված էր երեք AA չափի մարտկոցների համար: Քանի որ ESP8266- ը լավ կաշխատի 3 վոլտ հզորությամբ, ես կարող եմ օգտագործել երկու մարտկոց և օգտագործել երրորդ դիրքը միկրոկառավարիչի համար: Ուշադրություն դարձրեք, թե ինչպես էր տուփը պարունակում փոքր լրացուցիչ խցիկ, որը ես կարող էի օգտագործել ակտիվացման անջատիչի համար: Ես օգտագործել եմ նկարներում ցուցադրված շատ տարածված անջատիչ, բայց հեռացրել եմ այն զսպանակը, որն ամրացնում է այն միացված կամ անջատված դիրքում: Ես երկու բարակ մետաղալարեր կպցրեցի NC կոնտակտներին և սոսնձեցի տուփի մեջ սուպեր սոսնձի մի փոքրիկ կաթիլով:

Հաջորդը, ես անցք բացեցի վերին ծածկում, որը համապատասխանում էր գնդիկավոր գրիչից վերցված պլաստմասե խողովակին: Փոսը ճշգրտորեն համընկնում է անջատիչի հետ և ուղղորդում է հաստ լուցկիի փայտից պատրաստված մխոցը:

Ի վերջո, ես ևս երկու լար լարեցի մարտկոցի կոնտակտներին և բոլոր չորս լարերը ուղղորդեցի դեպի երրորդ մարտկոցի դիրքը, որտեղ պետք է լիներ միկրոհսկիչը:

Քայլ 3: Սարքավորումներ. ESP-01

Սարքավորումներ ՝ ESP-01
Սարքավորումներ ՝ ESP-01
Սարքավորումներ ՝ ESP-01
Սարքավորումներ ՝ ESP-01
Սարքավորումներ ՝ ESP-01
Սարքավորումներ ՝ ESP-01

Հաշվի առնելով WiFi- ի պահանջը ՝ ամբողջ նախագիծը բղավում է ESP8266: WiFi- ի այս փոքր վերահսկիչը դարձել է չարորակ համայնքի ամենասիրված աշխատասեղանը `որպես մոդուլ, որը կարելի է գնել 2.50 եվրոյով և միավորում է լիարժեք WiFi և TCP/IP հավաքածու` ավելի քան բավարար հզորությամբ `ձեր սեփական ծրագրերը գործարկելու համար: Arduino IDE- ն (կամ Atom- ը PlatformIO հավելվածով) լիովին աջակցում է ESP8266- ին:

Ես սովորաբար վերցնում էի ESP-12F, բայց ես ունեի մի փոքրիկ ESP-01 տախտակ, որը դրված էր աշխատանքի համար և կատարյալ տեղավորվում էր մարտկոցի տուփի մեջ: Միակ խնդիրն այն է, որ բավականին բարդ է ESP-01- ում որոնվածը բռնկելը: Դրա մասին ավելին ՝ հաջորդ քայլին: Կա մեկ փոփոխություն. Դուք պետք է հեռացնեք կարմիր հոսանքի LED- ն տախտակից, քանի որ այն անընդհատ ձգում է 3 մԱ: LED- ի հեռացման դեպքում մոդուլը օգտագործում է ընդամենը մի քանի տասնյակ uA խոր քնի ռեժիմում, ինչը թույլ կտա մեկ տարուց ավելի աշխատել երկու որակյալ AA մարտկոցների վրա:

Պարզվեց, որ ես կարող եմ օգտագործել 4 շերտով 4 գլխիկով վերնագրեր և զոդել մի քանի լրացուցիչ բաղադրիչների վրա անվճար տեսքով, որպեսզի կարողանամ հեռացնել ESP-01- ը `որոնվածը թարմացնելու համար, մինչդեռ այն դեռ տեղավորվի մարտկոցի երրորդ խցիկում:

Շատ կարևոր է ESP- ի ճիշտ միացումը: Օգտագործելով վերը նշված խաբեության թերթիկը, լարեք այն հետևյալ կերպ.

  1. Մարտկոցի գումարած Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) և 47K ռեզիստոր:
  2. Մարտկոցը հանած GND (A1) և անջատիչի մեկ լար:
  3. Անջատիչի մյուս մետաղալարը 100nF կոնդենսատորի և 4M7 ռեզիստորի:
  4. Ինչպես դիմադրիչների, այնպես էլ կոնդենսատորի բաց ծայրերը դեպի RST (C2):
  5. TXD (A2) կարող է մնալ չկապված:

Խմբագրում. Ես ստիպված էի փոխարինել ESP-01- ը, քանի որ հիմար սխալ թույլ տվեցի և այն քանդեցի: Պարզվեց, որ ի զարմանս ինձ նոր ESP-01- ը չվերակայվեց սկզբնական 100nF կոնդենսատորով: Այն, հավանաբար, մի փոքր այլ դիզայն ունի: Ես այն փոխարինեցի 2.2 uF- ով և հիմա նորից աշխատում է:

Ավարտելուց հետո ամեն ինչ կարող է տեղադրվել վանդակում, բայց սպասեք, նախ մենք պետք է ծրագրավորենք մոդուլը:

Քայլ 4. ESP-01- ի ծրագրավորում

ESP-01- ի ծրագրավորում
ESP-01- ի ծրագրավորում
ESP-01- ի ծրագրավորում
ESP-01- ի ծրագրավորում
ESP-01- ի ծրագրավորում
ESP-01- ի ծրագրավորում

Ձեր ESP-01- ի որոնվածը բռնկելու համար կարող եք կամ կառուցել փոքր սարք, կամ գնել (գրեթե) ամբողջական ծրագրավորող `մոտ 1 եվրոյով:

Hardwareրագրավորման սարքավորումների սարք

Կառուցեք փոքրիկ սարք ՝ կրկին երկու կին վերնագրերով ESP-01- ի համար: Բացի այդ, ձեզ անհրաժեշտ է USB սերիական մոդուլ, որը կարող է ապահովել 3.3 վոլտ: Ուշադրություն դարձրեք, որ ESP8266 չիպը 5 վոլտով կարծրացված չէ, այնպես որ այստեղ կատարված սխալը կարող է սպանել ձեր մոդուլը: Ինչևէ, կրկին օգտագործելով խաբեության թերթիկը, ամրացրեք ձեր սարքավորումները հետևյալ կերպ.

  1. 3.3 Վ USBSerial մոդուլից մինչև Vcc, CH_PD, RST և GPIO2:
  2. USBSerial մոդուլի GND- ին GND և GPIO0:
  3. USBSerial մոդուլի TXD- ից RXD:
  4. USBSerial մոդուլի RDX- ից TXD:

Նախապես կառուցել ծրագրավորող

Որքան էլ զվարճալի է սեփական իրերը կառուցելը, ծույլ մոտեցումն է ESP-01- ից սերիական ինտերֆեյս ստանալ ձեր նախընտրած աճուրդի վայրից, տես վերևի նկարը: Սա շատ ավելի հեշտ է, ավելի կոմպակտ և ավելի հուսալի, քան սարքավորումը: Այնուամենայնիվ, նրանցից ոմանք ծրագրավորողներ չեն, այլ սերիական ինտերֆեյսեր: Դուք պետք է ամրացնեք մետաղալար կամուրջը GND (PIN A1) և GPIO0 (pin C1) միջև միջերեսի հետևի մասում, տես երկրորդ նկարը: Ուշադրություն դարձրեք, որ ESP-01- ը պետք է միացված լինի USB վարդակից նայող ալեհավաքով, այլ ոչ թե հակառակը:

Նշում. Դրանք գոյություն ունեն նաև անջատիչով, տես երրորդ նկարը, շատ գեղեցիկ:

Տեղադրեք որոնվածը

Ենթադրելով, որ Arduino IDE- ն 1.8.3 կամ ավելի նոր է, ընտրեք Գործիքներ> Տախտակ և ընտրեք ձեր ունեցած տախտակը: Իմ օգտագործած ESP-01- ի համար ընտրեք «Ընդհանուր ESP8266 մոդուլ» և սահմանեք հետևյալ ընտրանքները (սա պետք է լինի բոլոր կանխադրվածները).

  1. Ֆլեշ ռեժիմ ՝ DIO
  2. Ֆլեշ հաճախականությունը `40 ՄՀց
  3. Պրոցեսորի հաճախականությունը `80 ՄՀց
  4. Ֆլեշի չափը `512 ԿԲ (64 ԿԲ SPIFFS) Նշում. Եթե օգտագործում եք սև ESP-01 տախտակ, ընտրեք 1 ՄԲ (64 ԿԲ SPIFFS)
  5. Վրիպազերծման նավահանգիստ. Անջատված է
  6. Վրիպազերծման մակարդակ. Չկա
  7. Վերականգնելու մեթոդը `ck
  8. Վերբեռնման արագություն 115200
  9. Պորտ. Ընտրեք այն պորտը, որը միացված է ձեր USB սերիական ինտերֆեյսին: Իմ Ubuntu համակարգչի համար, որը /dev /ttyUSB0- ն էր

Միացրեք սարքավորումը/ծրագրավորողը, տեղադրեք ուրվագիծը, որը կարող եք գտնել այստեղ ՝ https://gitlab.com/jeroenmeijer/Mailbox.git: Մատուցեք ձեր WiFi և MQTT բրոքերի հավատարմագրերը և ձեր IP կոնֆիգուրացիան config.h- ում և ընտրեք Վերբեռնում:

Քայլ 5: Ամեն ինչ հավաքելը

Այդ ամենը հավաքելը
Այդ ամենը հավաքելը

Ես փոստարկղի ներքին կափարիչում պլաստիկ խողովակի համար անցք բացեցի, որքան հնարավոր է ծխնուն, այնուհետև մարտկոցի տուփը տաք սոսնձեցի այդ կափարիչի ներքևի մասում: Հաջորդը ես որպես լուցկի օգտագործեցի հաստ լուցկի: Ես դիպուկ օգնությամբ լուցկին երկարեցի, որպեսզի անջատիչը բացվի, եթե արտաքին կափարիչը փակվի: Ես ստուգեցի կապը ՝ փակելով կափարիչը mosquitto_sub- ը գործարկելիս ՝ MQTT հաղորդագրությունները վերահսկելու համար (փոխարինեք mqttbroker, օգտվող և գաղտնաբառ ձեր MQTT կազմաձևով):

$ mosquitto_sub -h mqttbroker -v -t "stat/#" -u օգտվող -P գաղտնաբառ

Արտաքին կափարիչը բացվելուց մոտ վեց վայրկյան հետո հրապարակվում է հետևյալ MQTT հաղորդագրությունը: Timeամանակն օգտագործվում է միկրոհսկիչն արթնացնելու և WiFi- ի և միջնորդի կապ հաստատելու համար:

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

Այս ընթացքում միկրոկառավարիչը օգտագործեց մոտավորապես 70 մԱ: Ավարտելուց հետո այն քնում է խոր քնի մեջ և իմ դեպքում այն օգտագործում էր 20uA- ից պակաս: «flap» - ը միշտ ճշմարիտ է, «vcc» - ն նշում է մարտկոցի լարումը mV- ում և «prev» - ն պետք է լինի 0. Եթե դա 1 կամ 2 է, նշանակում է, որ փոստարկղը չի կարողացել ավելի վաղ հաղորդագրություն ուղարկել, քանի որ չի կարող միանալ WiFi- ն, կամ այն պատճառով, որ այն չկարողացավ միանալ MQTT բրոքերին: «RSSI» - ը WiFi ազդանշանի ուժն է: Երկուսն էլ շատ հարմար են խնդիրները ախտորոշելու համար:

Լավ գաղափար է մի քանի օր վերահսկել մարտկոցի լարումը `ապահովելու համար, որ սարքն աշխատում է ըստ նախատեսվածի և ինչ -ինչ պատճառներով չի լիցքաթափում մարտկոցը:

Theրագիրը կարող է նաև ինքնաթարմացնել օդով (OTA), բայց դա մի փոքր դուրս է այս հրահանգի շրջանակներից: Հետաքրքրվողների համար OTA կոնֆիգուրացիան նույնպես config.h- ում է:

Քայլ 6. Օգտագործելով Node-RED ՝ MQTT հաղորդագրության վրա գործելու համար

Օգտագործելով Node-RED ՝ MQTT հաղորդագրության վրա գործելու համար
Օգտագործելով Node-RED ՝ MQTT հաղորդագրության վրա գործելու համար

Ի վերջո, ես ստեղծեցի մի պարզ հոսք Node-RED- ում: Առաջին հանգույցը բաժանորդագրվում է փոստարկղի թեմային (stat/postbox/trigger): Երբ հաղորդագրություն է ստացվում, երկրորդ հանգույցը ձևակերպում է նամակ *): Վերջնական հանգույցն այն ուղարկում է իմ gmail հասցեին ՝ օգտագործելով gmail- ը որպես SMTP սերվեր: Այնուհետև իմ հեռախոսը ինձ կտեղեկացնի նոր փոստի մասին:

Ես ավելացրել եմ Node-RED հոսքը gitlab հատվածին, որպեսզի կարողանաք ներմուծել այն ձեր Node-RED հոսքերի մեջ:

Իհարկե, կարող եք ավելացնել ևս մի քանի հանգույց, օրինակ ՝ փոստարկղի իրադարձությունները MariaDb կամ SqlLite մուտքագրելու համար կամ լրացուցիչ ահազանգեր ստեղծել, երբ մարտկոցի լարումը ցածր է 2.7 վոլտից:

Շնորհավոր փոստի որս:

*) Տես հաջորդ էջը, ես հիմա էլփոստի փոխարեն օգտագործում եմ PushBullet- ը:

Քայլ 7: Հետագա մտքեր

Միշտ կա այս զգացումը, որ ամեն ինչ կարող էր ավելի լավ արվել:

Անջատիչ

Ես կնախընտրեի օգտագործել (սուպեր) մագնիս և եղեգի կոնտակտ `մխրճիչի որոշ անշնորհք մոտեցման փոխարեն: Երկու պատճառ կար. Մեկն այն է, որ ոչ մի կերպ չէի կարող այս աշխատանքը կատարել կոնտակտի փակման դեպքում, երբ տուփը բացվում էր, և այն միշտ փակ լինելը նշանակում էր, որ փոքր հոսանք միշտ կհոսեր: Հետադարձ հայացքով, 1UA- ից պակաս հոսող 4M7 դիմադրիչով մարտկոցի ժամկետի առումով մեծ խնդիր չէր լինի: Մյուսը ավելի գործնական էր: Շաբաթ օրը ես կազմեցի այս նախագիծը և գրեցի ծրագրակազմը, կիրակի պատրաստեցի այն ամենից, ինչ դրված էր շուրջը: Ես պարզապես եղեգի կոնտակտ չունեի աղբարկղերում:

Նշում. Մենք կտեսնենք. *)

Հաղորդագրություն դատարկելու մասին

Փոստարկղը հաղորդագրություն է ուղարկում նաև այն դատարկելիս: Սա մեծ գործ չէ, բայց քանի որ տան մեջ ավելի շատ մարդիկ են նախազգուշացում ստանում, հնարավոր է, որ հայտնվես փոստարկղում ՝ անտեսելով դրա ամբողջ նպատակը: Դրա շուրջ կան մի քանի եղանակներ, օրինակ ՝ ստուգել, արդյոք ներքին կափարիչը բարձրացված է, և եթե այո, ապա հաղորդագրություն մի ուղարկեք: Կամ կափարիչի անջատիչն օգտագործելու փոխարեն փոստարկղի ներքևում տեղադրեք դետեկտոր: Կամ մի փոքր վերականգնման կոճակ, որը պետք է սեղմել այն դատարկելիս: Այնուամենայնիվ, ամեն ինչ կբարդացներ և հավանաբար կվատթարացներ հուսալիությունը:

Հաղորդագրությունների փոխանցում

Էլ. Փոստ ուղարկելը նախազգուշացումը չեղարկելու բավականին արդյունավետ, բայց կոպիտ միջոց է: Ավելի էլեգանտ միջոց կլինի հեռախոսի ծրագիրը, բայց ես չեմ գտել Android MQTT վահանակի ծրագիր, որը կարող է կազմաձևված լինել ՝ որոշակի հաղորդագրություն ստանալիս օպերացիոն համակարգի ահազանգի համար: Եթե կա մեկը, խնդրում ենք ավելացնել մեկնաբանություններին: **)

*) Մեկ տարուց ավելի աշխատելուց հետո պարզվում է, որ օգտագործածս բլիթի փայտը, հիմնականում կոշտ գլորված թուղթը, հակման աղբյուրի մշտական ճնշման տակ կարճացման միտում ունի: Որոշ անսարքություններից հետո ես այն փոխարինեցի փայտե փայտով:

**) Ես այժմ օգտագործում եմ PushBullet- ը push հաղորդագրությունների համար ՝ առանձին MQTT վահանակից: API- ի փոքր Node-RED ցածր ինտերֆեյսեր կարելի է գտնել այստեղ: Համոզվեք, որ մուտքի նշանը տրամադրում եք «Պատրաստվել pushbulletlet» հանգույցում և ձեր էլ.

Խորհուրդ ենք տալիս: