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

Միացված Letterbox Solar Powered: 12 քայլ (նկարներով)
Միացված Letterbox Solar Powered: 12 քայլ (նկարներով)

Video: Միացված Letterbox Solar Powered: 12 քայլ (նկարներով)

Video: Միացված Letterbox Solar Powered: 12 քայլ (նկարներով)
Video: 102-ամյա տիկնոջ լքված տունն ԱՄՆ-ում ~ Էլեկտրաէներգիա է աշխատում! 2024, Հուլիսի
Anonim
Միացված Letterbox Solar Powered
Միացված Letterbox Solar Powered
Միացված Letterbox Solar Powered
Միացված Letterbox Solar Powered

Իմ երկրորդ Ible- ի համար ես ձեզ կներկայացնեմ իմ կապված նամակագրության մասին իմ աշխատանքները:

Այս Instructable- ը (+ շատ ուրիշներ) կարդալուց հետո, և քանի որ իմ փոստարկղը իմ տան մոտ չէ, ես ուզում էի ոգեշնչել Open Green Energy- ի աշխատանքներից `իմ փոստարկղը Domoticz սերվերին միացնելու համար:

Գոլեր

  • Երբ նամակներ են գալիս, տեղեկացեք Telegram- ի կողմից.
  • Տեղեկացեք Telegram- ի կողմից, երբ ծանրոց է գալիս.
  • Ստուգեք, թե արդյոք տառերը / ծանրոցները վերցված են:

Իմ հիմնական սահմանափակումը

Փոստարկղը համեմատաբար հեռու է տնից, և անհնար էր էլեկտրական մալուխը ձգել մինչև այն `ինչ -որ բան սնուցելու համար:

Ես ստիպված էի այլ լուծում գտնել. Արևային էներգիան լավ լուծում էր:

BOM- ը

  • Raspberry Pi (MQTT և Domoticz մասեր հյուրընկալելու համար - այստեղ չի նշվում)
  • Telegram Bot հաշիվ
  • Lolin D1 mini (կամ Wemos…)
  • Plug-In Պտուտակային տերմինալի բլոկի միակցիչ
  • TP4056 Լիթիումի մարտկոցի լիցքավորման տախտակ
  • 6V 2W ֆոտովոլտային արևային վահանակ
  • Li-Ion 18650 մարտկոց
  • Li-Ion մարտկոցի կրիչ
  • PCB DIY oldոդման պղնձի նախատիպ տպագիր տպատախտակներ
  • Անալոգային Servo SG90
  • 3 եղեգի անջատիչ (մեկը ՝ տառերի, մեկը ՝ ծանրոցի և մեկը ՝ վճարման համար)
  • Մագնիսներ
  • Որոշ լարեր
  • Փայտե արկղ. Քանի որ 3D տպիչ չստացա, ես հասկացա, որ իմ փոքրիկ տունը փայտով է ՝ էլեկտրոնիկայի մասեր ստանալու համար…
  • Պահեստային Ethernet մալուխ
  • RJ45 Ethernet միակցիչ Breakout տախտակ

  • J-B Weld
  • Որոշ գնդիկավոր առանցքակալներ
  • Պտուտակներ, ընկույզներ, լվացարաններ

Քայլ 1: Գլոբալ սխեմա

Գլոբալ սխեմա
Գլոբալ սխեմա
Գլոբալ սխեմա
Գլոբալ սխեմա

Գեղեցիկ նկարները միշտ ավելի լավ են, քան երկար ելույթները;-)

Բայց MQTT- ի, Domoticz- ի և Telegram- ի վերաբերյալ մի քանի բացատրություն միշտ ողջունելի է:

MQTT (Message Queuing Telemetry Transport), հաղորդագրությունների արձանագրություն է, որն օգտագործվում է տվյալների փոխանցման համար IoT (իրերի ինտերնետ) աշխարհում սարքերի և այլ համակարգերի միջև:

Չխորանալով շատ մանրամասների մեջ, դրա աշխատանքը հիմնված է սերվերին միացող հաճախորդների սկզբունքի վրա: MQTT- ում հաճախորդները կոչվում են Բաժանորդ կամ Հրատարակիչ, իսկ սերվերը ՝ Բրոքեր:

Այս Ուղեցույցում ես օգտագործում եմ միայն մեկ հրատարակիչ ՝ Lolin- ը, որը միացված է իմ փոստարկղին. Երբ տառերը կամ ծանրոցը հայտնաբերվում են փոստարկղում տեղադրված եղեգի կոնտակտների միջոցով (քայլ 1 ՝ շեմային), այն MQTT հաղորդագրություն է ուղարկում WIFI- ով միջնորդին (Քայլ 2):

Բրոքերի մասը կատարվում է Mosquitto- ի կողմից, որը տեղադրված է Raspberry Pi- ի վրա (Քայլ 3):

Դոմոտիչի մասին.

Ինչպես նկարագրված է սկզբնաղբյուրում, Domoticz- ը «տան ավտոմատացման համակարգ» է, որը թույլ է տալիս կառավարել տարբեր սարքեր և մուտքագրել տարբեր արձանագրություններից. MQTT- ն աջակցվող արձանագրություններից մեկն է…

Հենց որ տեղեկատվությունը հասնի նրան (Քայլ 4), դուք կարող եք սահմանել իրադարձություններ. Նամակի տուփի դեպքում ես ընտրեցի ուղարկել Telegram- ի ծանուցում (Քայլ 5):

Վերջապես, Telegram- ի հաճախորդը կազմաձևված է իմ հեռախոսում (և իմ կնոջը նույնպես! - Քայլ 6). Վերջնական նպատակը հասել է…

Քայլ 2: Սեմալտիկ / էլեկտրամոնտաժ

Սեմաթիկ / Հաղորդալարեր
Սեմաթիկ / Հաղորդալարեր
Սեմաթիկ / Հաղորդալարեր
Սեմաթիկ / Հաղորդալարեր
Սեմաթիկ / Հաղորդալարեր
Սեմաթիկ / Հաղորդալարեր
Սեմաթիկ / Հաղորդալարեր
Սեմաթիկ / Հաղորդալարեր

Անալոգի մասին մեկ բառ կարդալ

Նախևառաջ, որոշ հետազոտություններից հետո նկատեցի, որ Lolin mini D1- ը (որպես հին Wemos), ներկառուցված է A0 կապի լարման բաժանարարի մեջ (հաշվի առնելով 220KΩ- ը R1- ի համար և 100KΩ- ը R2- ի համար, տես տվյալների թերթիկի աջ կողմում) `թույլ տալով 3.2 վոլտ: որպես առավելագույն անալոգային մուտքային լարման:

Հաշվի առնելով մարտկոցից առավելագույն ելքային լարումը 4, 2 վ (սահմանափակվում է լիցքավորման տախտակով), և տեսականորեն անհրաժեշտ է ավելացնել միայն արտաքին ռեզիստոր (շարքով R1- ով) `մուտքային լարման առավելագույն միջակայքը բարձրացնելու համար: Այնուհետև, եթե ավելացնեք 100K շարքով R1- ով, կունենաք այս արդյունքը.

Vin * R1/(R1+R2) = Vout

4, 2 * 320K/(320K+100K) = 3, 2

Իմ շրջագծում ես ընտրեցի, որ կարողանամ հարմարեցնել դրա արժեքը, այդ իսկ պատճառով ես նախընտրեցի օգտագործել կարգավորվող դիմադրություն իմ շղթայում. Գուցե դա ձեզ համար անօգուտ լինի, բայց իմ իրավիճակում դրա արժեքը սահմանեցի մոտ 10KΩ ներդաշնակ արժեք Domoticz- ում…

Նկատի ունեցեք, որ A0 փինն ունի 10 բիթ թույլատրելիություն. Սա նշանակում է, որ ձեր ուրվագծում ձեր անալոգային ընթերցումը կվերադարձնի 0 -ից 1024 արժեք:

Քանի որ ես ցանկանում եմ տոկոսային արժեք ուղարկել Domoticz- ին, ես պետք է անալոգային ընթերցված արդյունքը բաժանեմ 10 -ի, 24 -ի:

Քայլ 3: Էլեկտրաէներգիայի կառավարում

Էլեկտրաէներգիայի կառավարում
Էլեկտրաէներգիայի կառավարում
Էլեկտրաէներգիայի կառավարում
Էլեկտրաէներգիայի կառավարում

Իհարկե, ես ուզում եմ, որ նամակագրությունը լինի ինքնավար: Իմ նպատակին հասնելու համար ես օգտագործում եմ այս տարրերը.

  • Li-Ion 18650 մարտկոց ՝ 4000 mAh;
  • արևային վահանակ, որը կարող է ապահովել 6V / 2W;
  • TP4056 լիթիումի մարտկոցի լիցքավորման տախտակ:

Առավել հարմար արևային վահանակ ընտրելու համար ես նայեցի մի քանի օրինակների, այդ թվում ՝ այսին. Իմ դեպքում, և քանի որ ESP8266- ը պետք է միացված լինի ցերեկը և կարողանա աշխատել սերվո շարժիչով ՝ տունը դեպի արևը պահելու համար, ես ընտրեցի ավելի հզոր արևային վահանակի մոդել (6V / 2W). Դա նաև ինձ թույլ է տալիս կանխատեսել ձմռան մութ շրջաններն ու ամպամած օրերը;-)

Բացի այդ, և էներգիայի ծախսերը առավելագույնի հասցնելու համար ես ընտրել եմ հետևյալ սցենարները.

  • իմանալով, որ փոստատարը անցել է միայն առավոտյան 7 -ից երեկոյան 8 -ը, ESP- ն տեղադրվում է DeepSleep- ի մնացած գիշերվա ընթացքում.
  • Գործոնը չի անցնում շաբաթ կեսօրից երկուշաբթի առավոտյան. ESP- ն նույնպես այս ժամանակահատվածում տեղադրված է DeepSleep ռեժիմում:
  • Առավոտյան 7 -ից երեկոյան 8 -ն ընկած ժամանակահատվածում և էներգիայի սպառումը նվազեցնելու համար ես պարզապես անջատում եմ ESP- ի ցանցային միջերեսը. Domoticz. Ես կարիք չունեմ անմիջապես զգուշացնելու և ցանցի ինտերֆեյսը վերագործարկելու համար անհրաժեշտ մի քանի լրացուցիչ վայրկյանները վնասակար չեն:

Որոշ արժեքներ սպառման վերաբերյալ տարբեր ռեժիմներում, որոնք ես օգտագործում եմ Լոլինի համար - նայեք տվյալների թերթիկին, էջ 18:

  • Նորմալ ռեժիմում (ՌԴ -ի հետ աշխատելու դեպքում) էներգիայի սպառումը կարող է աճել մինչև 170 մԱ: Քանի որ իմ փոստարկղը գտնվում է իմ տնից մոտ 50 մետր հեռավորության վրա (և WIFI ազդանշանի սահմաններում …) ես ենթադրում եմ, որ կապը պահպանելու համար օգտագործվող հզորությունը առավելագույնն է…
  • Մոդեմ-քնում էներգիայի սպառումը նվազում է մինչև 15 մԱ: Բայց ինչպես կարող եք տեսնել տվյալների թերթիկում, այն ամբողջությամբ չի դադարեցրել մոդեմը, քանի որ ESP- ն «ապահովում է Wi-Fi կապ առանց տվյալների փոխանցման»:
  • Deep-sleep- ում էներգիան իջնում է մինչև 20uA:

Համոզված լինելու համար, որ wifi- ն անհարկի ակտիվ չի մնում, ես նախընտրեցի անջատել այն հետևյալ հրամաններով. Ուշադրություն դարձրեք բազմաթիվ () զանգերի հետաձգմանը … Առանց դրանց ESP- ի վթարը.

WiFi.d անջատել ();

ուշացում (1000); WiFi.mode (WIFI_OFF); ուշացում (1000); WiFi.forceSleepBegin (); ուշացում (1);

Ընդհանուր առմամբ, մի քանի օր աշխատելուց հետո, թվում է, այն աշխատում է և հատկապես ճիշտ է բեռնվում.

  • սա ինձ թույլ է տալիս ամեն ժամ վազել սերվոմոտորին ՝ տունը դեպի արևը դիրքի բերելու համար.
  • Կարող եմ նաև ինձ թույլ տալ ամեն ժամ նորից ակտիվացնել ցանցի ինտերֆեյսը ՝ Domoticz- ին մարտկոցի լիցքավորման մակարդակն ուղարկելու համար:

Քայլ 4: Մագնիսների և եղեգների կոնտակտների տեղադրում

Մագնիսների և եղեգների կոնտակտների տեղադրում
Մագնիսների և եղեգների կոնտակտների տեղադրում
Մագնիսների և եղեգների կոնտակտների տեղադրում
Մագնիսների և եղեգների կոնտակտների տեղադրում
Մագնիսների և եղեգների կոնտակտների տեղադրում
Մագնիսների և եղեգների կոնտակտների տեղադրում

Ինչպես միշտ, ես օգտագործեցի իմ Պրոքսոնը ՝ եղեգի տեղը փայտի կտորի մեջ ձևավորելու համար:

Եղեգի կոնտակտն իր փոսում ամրացնելու համար ես օգտագործեցի մի փոքր J-B զոդում:

Celանրոցի և ելքի համար ՝ մի փոքր ժապավեն, մի փոքր սղոց, և նպատակը հասավ:

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

Քայլ 5: Միացեք Իմ Փոքրիկ Տանը

Միացեք Իմ փոքրիկ տանը
Միացեք Իմ փոքրիկ տանը
Միացեք Իմ փոքրիկ տանը
Միացեք Իմ փոքրիկ տանը

Որպեսզի կարողանամ հեշտությամբ միացնել և անջատել մալուխը, որը գնում է դեպի եղեգի կոնտակտները նամակից, դեպի տուն, ես ընտրեցի օգտագործել Ethernet միակցիչ:

Դուք կարող եք օգտագործել այս մոդելը կամ, ինչպես և ես, օգտագործել հին Arduino Ethernet վահանը, որը կախված է իմ գզրոցներում.

Մի խոսք այս Arduino Ethernet վահանի մասին. Մի ակնկալեք, որ կունենաք 8 առանձին վարորդ… Վահանի ներսում մալուխները զուգակցվում են 2 -ի հետ … Դա ինձ շատ երկար խելագարեցրեց !!!

Քայլ 6: Տանը…

Տանը …
Տանը …
Տանը …
Տանը …

Պարզապես բավականաչափ տեղ `մարտկոցի պահիչը ամրացնելու, սերվոյի և RJ45 կանացի միակցիչի ամրացման համար:

Քայլ 7: Թող այն պտտվի…

Թող այն պտտվի…
Թող այն պտտվի…
Թող այն պտտվի…
Թող այն պտտվի…
Թող այն պտտվի…
Թող այն պտտվի…
Թող այն պտտվի…
Թող այն պտտվի…

Նպատակը ՝ դեմքը դեպի արև պահելն է…

Որպեսզի շրջելի լինելու հնարավորությունը թույլ տամ, որպես առանցք երկար պտուտակ օգտագործեցի ՝ մի քանի ընկույզով և երկու գնդիկավոր առանցքակալներով…

Մինչ այժմ ես օգտագործում էի SG90 servo (ոլորող մոմենտ ՝ 1.8 կգ/սմ 4.8v- ի դեպքում):

Տունը (և դրա մի քանի գրամը) շրջելու համար բավական է: Մյուս կողմից, ես վստահ չեմ, որ դրա պլաստիկ շարժակները երկար ժամանակ դիմադրում են քամու հաճախակի պոռթկումներին, որոնք կան իմ տարածաշրջանում:

Ես պատվիրեցի ևս մեկը (MG995 ոլորող մոմենտ ՝ 9.4 կգ/սմ 4.8v- ով), նույնպես ոչ շատ թանկ, բայց մետաղական շարժակների հետ:

Դա կլինի հաջորդ բանը, որ պետք է անեմ, երբ այն ստանամ. Ես ապավինում եմ իմ կապված փոստարկղին `ինձ տեղեկացնելու իր ժամանման մասին:

Քայլ 8: Որոշ թեստեր

Image
Image

Մի քանի նշում

Այս ուրվագիծը պետք է ընդօրինակի օրվա ընթացքում ժամերի փոփոխությունները, որոնք թույլ են տալիս ինձ վերահսկել սերվոյի դիրքը:

  • SG90- ով. Լրացուցիչ կարիքներ չունեն, այն կարող է աշխատել մարտկոցի վերահսկիչից եկող OUT լարման հետ:
  • Բայց, MG 995- ի հետ.

    • Պտտման ընդհանուր անկյունը նույնը չէ (ավելի լայն). Ես ստիպված էի օգտագործել լրացուցիչ գործառույթ այն նվազեցնելու համար (Servo_Delta ()):
    • Պահանջվում է DC/DC Քայլ ՝ սերվոյին բավականաչափ լարման ապահովելու համար … շարունակելի…

/*

- ԹԵՍ SG90- ով. Լրացուցիչ կարիքներ չունեն, այն կարող է աշխատել մարտկոցի վերահսկիչից բխող OUT լարման հետ - MG 995 -ի համար. - օգտագործել Servo_Delta () գործառույթը… շարունակել ՝ */ #include bool Logs = true; Servo myservo; #սահմանեք PIN_SERVO D2 // servo դիրք ՝ 7 ժ, 8 ժ, 9 ժ, 10 ժ, 11 ժ, 12 ժ, 13 ժ, 14 ժ, 15 ժ, 16 ժ, 17 ժ, 18 ժ, 19 ժ, 20 ժ, 21 ժ // int Arr_Servo_Pos = {177, 173, 163, 148, 133, 118, 100, 80, 61, 41, 28, 15, 2, 2, 2}; int Arr_Servo_Pos = {180, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 0, 0, 0}; int հին; int pos; int i; void setup () {Serial.begin (115200); } void loop () {for (i = 7; i <= 22; i ++) {old = i; if (i == 7) {if (Logs) Serial.println ("Positionne le servo pour 7 Heure"); myservo.attach (PIN_SERVO); for (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; ցուցիչ 7 && i = Arr_Servo_Pos [i-7]; ցուցիչ-) {if (Logs) Serial.println (ցուցանիշ); if (Տեղեկամատյաններ) Serial.print ("Adշգրտված արժեք."); եթե (տեղեկամատյաններ) Serial.println (Servo_Delta (ինդեքս)); ուշացում (200); //myservo.write(Servo_Delta(index)); myservo.write (ցուցիչ); } ուշացում (15); myservo.write (Arr_Servo_Pos [i-7]); // նորից գրեք վերջին արժեքը, որպեսզի խուսափեք հուզիչ շարժումներից, երբ datach myservo.detach (); }}} ուշացում (2000); }} int Servo_Delta (int արժեքը) {int Temp_val; Temp_val = (արժեքը*0.80) +9; վերադարձ Temp_val; }

Քայլ 9: Փոքրիկ տունը

Փոքրիկ տունը
Փոքրիկ տունը
Փոքրիկ տունը
Փոքրիկ տունը
Փոքրիկ տունը
Փոքրիկ տունը

Ինչպես նախկինում ասացի, ես 3D տպիչ չեմ ստացել: Այսպիսով, ես որոշեցի օգտագործել հին բանջարեղենի վանդակը…

Միգուցե դա երկար չի տևի, բայց այդ ժամանակ ես ժամանակ կունենայի այլ լուծում դիտարկելու համար (կամ ընկեր, ով 3D տպիչ ունի) ՝ փայտը պաշտպանելու համար ամենուր շատ լաք եմ ավելացրել…

Դուք կարող եք տեսնել «գեղեցիկ վարագույրները» … Դա այն է, ինչ տեղի է ունենում, երբ դուք խնդրում եք ձեր կնոջը կատարել աշխատանքը ^^

Քայլ 10: Էսքիզ

Ընթացքի մեջ է … Բայց կարծես կայուն է:

Ես դեռ աշխատում եմ ծածկագրի վրա. Քանի որ սա վերջնական տարբերակ չէ, ձեր մեկնաբանությունները / խորհուրդները ողջունելի են;-)

Որոշ դիտողություններ.

  • Դրանք բազմաթիվ ուշացումներ են () ծածկագրում. Սա Լոլինի շատ վթարներից խուսափելու համար է, հատկապես սկսնակ ցանցը դադարեցնելիս…
  • Ես արևի ազիմուտ ստանալու հեշտ և հուսալի միջոց չեմ գտել. Այդ պատճառով ես ֆիքսել եմ սերվոյի արժեքը `իմ դիտարկածի ֆունկցիայով: այստեղ սովորելու ուղի, նույնիսկ եթե նախընտրում եմ առցանց API- ն ինձ տալիս է ազիմուտը անմիջապես ըստ ամսաթվի, ժամի և աշխարհագրական դիրքի …
  • Քնի տեխնիկայի մասին. Քանի որ Lolin- ը 32-բիթանոց Tensilica պրոցեսոր է, դրա առավելագույն արժեքը 32-բիթանոց անստորագիր ամբողջ թվաքանակի համար 4294967295 է … այնուհետև այն տալիս է մոտ 71 րոպե խոր քնի միջակայքի համար: Ահա թե ինչու ես շատ անգամ քնում եմ մոտ 60 րոպե…

Խմբագրել - 2018-10-08:

Ես հայտնաբերեցի, որ servo- ն շատ ցնցող շարժումներ ունի, հատկապես մինչ կցորդը (), անջատելը () և ամեն անգամ, երբ Լոլինը արթնանում է խոր քունից ():

Մի փոքր ավելի շատ տվյալների թերթ ուսումնասիրելիս ես հասկացա երկու բան.

  • Lolin- ի տվյալների թերթիկում D4 ելքն արդեն կապված է BUILTIN_LED- ի հետ…
  • ESP8266ex տվյալների թերթիկում մենք սովորում ենք, որ D4 ելքն օգտագործվում է որպես UART 1/U 1 TXD (ունիվերսալ ասինխրոն ընդունիչ հաղորդիչ): Նաև հստակեցված է, որ այս UART1- ն օգտագործվում է մատյան տպելու համար:

Կարդալով այս տեղեկությունները ՝ ես հասկացա, որ D4 ելքը լավ գաղափար չէ, հատկապես սերվո շարժիչ կառավարելու համար:

Այսպիսով, այժմ սերվոմոտորը վերահսկելու համար օգտագործվող ելքը D2 է, ստորև նշված ծածկագիրը համապատասխանաբար թարմացվել է:

//****************************************

Ամսաթիվ ստեղծում. LOLIN (WEMOS) D1 R2 & mini (https://www.amazon.fr/gp/product/B01ELFAF1S/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1) Pin գործառույթ ESP-8266 Pin Օգտագործման տեղայնացում ------- ------------------------------------------------------ ------------------------------------- TX TXD TXD RX RXD RXD A0 անալոգային մուտք, առավելագույնը 3.3V մուտք A0 Tension d'alimentaion D0 IO GPIO16 Connecté à RST (pour le deep.sleep) D1 IO, SCL GPIO5 D2 IO, SDA GPIO4 Servo moteur D3 IO, 10k Pull-up GPIO0 D4 IO, 10k pull-up, BUILTIN_LED GPIO2, SCK GPIO14 Reed relève D6 IO, MISO GPIO12 Reed lettre D7 IO, MOSI GPIO13 Reed colis D8 IO, 10k pull-down, SS GPIO15 G Ground GND 5V 5V-3V3 3.3V 3.3V 3.3V RST Reset RST Connecté à D0 (pour le deep.sleep) **************************************; // wifi const char* ssid = "LOL"; const char* գաղտնաբառ = "LOL"; IPAddress ip (192, 168, 000, 000); IPAddress dns (192, 168, 000, 000); IPAddress դարպաս (192, 168, 000, 000); IPAddress ենթահամակարգ (255, 255, 000, 000); WiFiClient հաճախորդ; // Servo #ներառել #սահմանել PIN_SERVO D2 Servo myservo; // սերվոյի դիրքը ՝ 7 ժ, 8 ժ, 9 ժ, 10 ժ, 11 ժ, 12 ժ, 13 ժ, 14 ժ, 15 ժ, 16 ժ, 17 ժ, 18 ժ, 19 ժ, 20 ժ, 21 ժ, Arr_Servo_Pos = {179, 175, 165, 150, 135, 120, 102, 82, 63, 43, 30, 15, 1, 1, 1}; // Reeds #սահմանել PIN_SWITCH_OUT D5 բայթ Old_Switch_State_OUT; բայթ Switch_State_OUT; #սահմանել PIN_SWITCH_IN_PARCEL D6 բայթ Old_Switch_State_IN_PARCEL; բայթ Switch_State_IN_PARCEL; #սահմանել PIN_SWITCH_IN_LETTER D7 բայթ Old_Switch_State_IN_LETTER; բայթ Switch_State_IN_LETTER; անստորագիր երկար անջատիչ PressTime; const անստորագիր երկար DEBOUCE_TIME = 200; // Անալոգային #սահմանել PIN_ANALOG A0 // MQTT #include const char* MQTT_Server_IP = "Ձեր MQTT հասցեն"; const int MQTT_Server_Port =; int IDX_Letter_Box =; int IDX_Parcel_Box =; int IDX_Letter_Box_Battery =; PubSubClient ClientMQTT (հաճախորդ); char MQTT_Message_Buff [70]; Լարային MQTT_Pub_String; // Լարվածության բոց vcc; // NTP #ներառել ժամանակը_ tnow; int Old_Time = 0; int Int_Heures = 0; int Int_Minutes = 0; int Int_Sleep_Duration = 63; void setup () {Serial.begin (115200); ցանց (ճշմարիտ); pinMode (PIN_SWITCH_OUT, INPUT_PULLUP); Old_Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); pinMode (PIN_SWITCH_IN_LETTER, INPUT_PULLUP); Old_Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); pinMode (PIN_SWITCH_IN_PARCEL, INPUT_PULLUP); Old_Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); SendBatteryLevel (); ցանց (կեղծ); // NTP սահմանել tnow = ժամանակ (nullptr); Int_Heures = String (ctime (& tnow)). Substring (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Substring (14, 16).toInt (); // Գիշերվա խոր քուն, եթե (! ((Int_Heures> = 7) && (Int_Heures <= 20))) {Serial.print ("Sleep pour la nuit ("); Serial.print (Int_Sleep_Duration - Int_Minutes); Serial. println («րոպե)»); քնել (Int_Sleep_Duration - Int_Minutes); }} void loop () {// NTP սահմանել tnow = ժամանակ (nullptr); Int_Heures = String (ctime (& tnow)). Substring (11, 13).toInt (); Int_Minutes = String (ctime (& tnow)). Substring (14, 16).toInt (); //Serial.println(String(ctime(&tnow))); //Serial.println ("Heure:" + String (ctime (& tnow)). Substring (11, 13)); //Serial.println (Լարային (ժամանակ (& tnow)). Ենթալար (11, 13).toInt ()); // Servo կառավարում, եթե (Old_Time! = Int_Heures) {Old_Time = Int_Heures; if (Int_Heures == 7) {if (Logs) Serial.println ("Positionne le servo pour 7 Heure"); myservo.attach (PIN_SERVO); for (int index = Arr_Servo_Pos [(sizeof (Arr_Servo_Pos) / sizeof (Arr_Servo_Pos [0])) -1]; index 7 && Int_Heures = Arr_Servo_Pos [Int_Heures-7]; index-) {if (Logs) Serial.println (ցուցանիշ); ուշացում (200); myservo.write (ցուցիչ); } ուշացում (15); myservo.write (Arr_Servo_Pos [Int_Heures-7]); // նորից գրեք վերջին արժեքը ՝ myservo.detach () ջոկելիս կտրուկ շարժումներից խուսափելու համար: } ցանց (ճշմարիտ); SendBatteryLevel (); ցանց (կեղծ); }}} // Deepsleep if Saturday 13h if if ((String (ctime (& tnow)). Substring (0, 3) == "Sat") && (Int_Heures> = 13)) {if (Logs) Serial.print ("Sleep pour le samedi aprés midi ("); եթե (տեղեկամատյաններ) Serial.print (Int_Sleep_Duration - Int_Minutes); եթե (Logs) Serial.println ("րոպե)"); քնել (Int_Sleep_Duration - Int_Minutes); } // Deepsleep if Sunday (եթե) Serial.print (Int_Sleep_Duration - Int_Minutes); if (Logs) Serial.println ("րոպե)"); քնել (Int_Sleep_Duration - Int_Minutes); } // Եղեգների կառավարում Switch_State_OUT = digitalRead (PIN_SWITCH_OUT); եթե (Switch_State_OUT! = Old_Switch_State_OUT) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_OUT == HIGH) {Serial.println ("courrier relevé!"); ցանց (ճշմարիտ); ուշացում (5000); MQTT_Pubilsh (IDX_Letter_Box, 0, "0"); ուշացում (5000); MQTT_Pubilsh (IDX_Parcel_Box, 0, "0"); ուշացում (5000); ցանց (կեղծ); }} Old_Switch_State_OUT = Switch_State_OUT; } Switch_State_IN_LETTER = digitalRead (PIN_SWITCH_IN_LETTER); եթե (Switch_State_IN_LETTER! = Old_Switch_State_IN_LETTER) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); եթե (Switch_State_IN_LETTER == HIGH) {Serial.println ("courrier arrivé!"); ցանց (ճշմարիտ); ուշացում (5000); MQTT_Pubilsh (IDX_Letter_Box, 1, «Courrier»); ուշացում (5000); ցանց (կեղծ); }} Old_Switch_State_IN_LETTER = Switch_State_IN_LETTER; } Switch_State_IN_PARCEL = digitalRead (PIN_SWITCH_IN_PARCEL); եթե (Switch_State_IN_PARCEL! = Old_Switch_State_IN_PARCEL) {if (millis () - switchPressTime> = DEBOUCE_TIME) {switchPressTime = millis (); if (Switch_State_IN_PARCEL == HIGH) {Serial.println ("colis arrivé!"); ցանց (ճշմարիտ); ուշացում (5000); MQTT_Pubilsh (IDX_Parcel_Box, 1, «Colis»); ուշացում (5000); ցանց (կեղծ); }} Old_Switch_State_IN_PARCEL = Switch_State_IN_PARCEL; }} void SendBatteryLevel () {հետաձգում (5000); vcc = analogRead (PIN_ANALOG) /10.24; if (Տեղեկամատյաններ) Serial.println ("\ t Լարվածություն." + Լար (vcc, 0)); MQTT_Pubilsh (IDX_Letter_Box_Battery, 0, լարային (vcc, 0)); ուշացում (5000); } դատարկ քուն (int Min_Duration) {ESP.deepSleep (Min_Duration * 60e6); } void network (bool UpDown) {if (UpDown) {Serial.print («Networkանցի մեկնարկ»); WiFi.forceSleepWake (); ուշացում (1); // init WIFI WiFi.config (ip, dns, gateway, subnet); WiFi.begin (ssid, գաղտնաբառ); while (WiFi.status ()! = WL_CONNECTED) {ուշացում (500); Serial.print ("."); } ուշացում (5000); Serial.println ("."); Serial.print ("\ tConnected - IP Address:"); Serial.println (WiFi.localIP ()); // init MQTT ClientMQTT.setServer (MQTT_Server_IP, MQTT_Server_Port); // Init NTP Serial.print ("\ t Syամանակի համաժամացում"); configTime (0, 0," fr.pool.ntp.org "); setenv (" TZ "," CET-1CEST, M3.5.0, M10.5.0/3 ", 0); while (time (nullptr) <= 100000) {Serial.print ("."); Ուշացում (100);} Serial.println (".");} Else {Serial.println ("Network stop."); WiFi.disconnect (); ուշացում (1000); WiFi.mode (WIFI_OFF); հետաձգում (1000); WiFi.forceSleepBegin (); հետաձգում (1);}} void նորից միացում () {մինչ (! ClientMQTT.connected ()) {Serial.print (" / t Փորձում է MQTT կապը … "); // Փորձեք կապել, եթե (ClientMQTT.connect (" ESP8266ClientBAL ")) {Serial.println (" կապված է ");} else {Serial.print (" ձախողվեց, rc = "); Սերիա.print (ClientMQTT.state ()); Serial.println («կրկին փորձեք 5 վայրկյանում»); // Սպասեք 5 վայրկյան ՝ նախքան հետաձգման փորձը (5000);}}}} անվավեր MQTT_Pubilsh (int Int_IDX, int N_Value, String S_Value) {if (! ClientMQTT.connected ()) նորից միանալ (); vcc = analogRead (PIN_ANALOG) /10.24; Serial.println ("\ t Ուղարկել տեղեկատվություն MQTT …"); MQTT_Pub_String = "{" idx / ":" + Լար (Int_IDX) + ", \" Մարտկոց / "." + Լար (vcc, 0) + ", \" nvalue / ":" + N_Value + ", \" svalue / ": \" " + S_Value +" / "}"; MQTT_Pub_String.toCharArray (MQTT_Message_Buff, MQTT_Pub_String.length ()+1); ClientMQTT.publish ("domoticz/in", MQTT_Message_Buff); ClientMQTT.d անջատել (); }

Քայլ 11: Դոմոտիկ

Դոմոտից
Դոմոտից
Դոմոտից
Դոմոտից
Դոմոտից
Դոմոտից

Դոմոտիկում ՝

Ընդհանուր օգտագործման համար.

  • Ստեղծեք երկու «Dummy (Ոչինչ չի անում, օգտագործեք վիրտուալ անջատիչների համար)».

    1. Առաջինը տառերի համար…
    2. Երկրորդը ծանրոցների համար…
  • Նրանցից յուրաքանչյուրի համար անհատականացրեք ծանուցումները.
  • Իհարկե, դուք պետք է կարգավորեք ձեր Tegegram նշանը:

Ընտրովի ՝

Մարտկոցի լիցքավորման մակարդակը վերահսկելու համար կարող եք ավելացնել «Կոմունալ սենսոր»:

Խորհուրդներ. Այստեղ կարող եք գտնել բազմաթիվ անվճար անհատականացված սրբապատկերներ…

Քայլ 12: Եզրակացություն

Եզրակացություն
Եզրակացություն
Եզրակացություն
Եզրակացություն

Հուսով եմ, որ այս հրահանգը կօգնի ձեզ.

  • արդյոք պատրաստել ձեր սեփական կապակցված letterlbox;
  • կամ պարզապես ձեր նախագծերի վերաբերյալ որոշ գաղափարներ տալու համար:

Եթե բարելավման գաղափարներ ունեք, ես լսում եմ:

Հ. Գ.

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