Բովանդակություն:
- Քայլ 1: Այն, ինչ ձեզ հարկավոր է, նախքան այն, ինչ ձեզ հարկավոր է
- Քայլ 2: Այն, ինչ ձեզ հարկավոր է `սարքավորում
- Քայլ 3. Այն, ինչ ձեզ հարկավոր է `ծրագրակազմ
- Քայլ 4: SQL Server տվյալների շտեմարան
- Քայլ 5. ASP.NET SignalR հանգույց վեբ ծրագիր
- Քայլ 6: Python SignalR ծառայության հաճախորդ
- Քայլ 7. Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը
- Քայլ 8: Միացեք և փորձարկեք համակարգը
- Քայլ 9. Գործող համակարգը
- Քայլ 10. Ավտոմատացման համակարգի և հարակից ուղղումների կատարելագործում
- Քայլ 11: Հայտնի խնդիրներ և անվտանգության մտահոգություններ
Video: Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
Հետևելով այստեղ և այստեղ հրապարակված իմ մի քանի նախածանցային IBLE- ներին, այս նախագիծը կատարում է առաջին քայլը `տան ավտոմատացման հանգույցի հիմնական տարբերակի կառուցման ուղղությամբ:
Ես օգտագործել եմ մի քանի տարբեր տեխնոլոգիաներ `փորձելով հասկանալ, թե ինչպես կարող եմ օգտագործել այն ամենը, ինչ սովորել եմ անցյալում և այն նորերը, որոնք ես շարունակում եմ սովորել օրերի ընթացքում:
Հետևաբար, այս ավտոմատացման հանգույցը բաղկացած է հետևյալ բաղադրիչներից.
SQL Server 2012 տվյալների բազա, որը
- պահում է նախապես որոշված ինֆրակարմիր (IR) կոդերի ցանկը աղյուսակում, ինչպես նաև եզակի «կոդի բանալի»
- կոդի ստեղները ինտուիտիվ կերպով անվանվում են (օգտագործողի կողմից), որպեսզի պարզվի դրանց հետ կապված IR կոդերի նպատակը
Իրական ժամանակում ASP. NET SignalR հանգույց վեբ ծրագիր, որը
- սպասում և ստանում է «կոդի բանալիներ» ՝ որպես հրամաններ օգտագործողից, որը դիմակայում է HTML հաճախորդին
- ստանալուց հետո միանում է SQL տվյալների շտեմարանին և վերցնում է IR ծածկագիրը ՝ օգտագործելով տրամադրված կոդի բանալին
- փոխանցում է ստացված IR կոդը Python SignalR հաճախորդին
Օգտագործողի առջև կանգնած է HTML SignalR Dashboard- ի հաճախորդ, որը
- jQuery SignalR Client API- ների միջոցով փոխանցում է Հաբին յուրահատուկ կոդի բանալին
- Գործիքի վահանակի յուրաքանչյուր կոճակ կներկայացնի SQL տվյալների բազայի աղյուսակում գրանցված յուրահատուկ կոդի բանալին
Raspberry Pi 2.0 -ով աշխատող Python SignalR ֆոնային ծառայության ծրագիր, որը
- ստանում է IR կոդեր ՝ որպես Hub- ի հրամաններ
- փնտրում է IR օրենսգրքի սահմանազատիչներ և շատ երկար ծածկագիրը բաժանում է հատվածների
- Սերիական նավահանգստի միջոցով հաղորդակցվում է Arduino- ի հետ և դուրս գրում յուրաքանչյուր հատված հաջորդաբար
Arduino IR հաղորդիչի ուրվագիծ, որը
- սպասում և ստանում է IR կոդի յուրաքանչյուր հատված Սերիական նավահանգստի վրայով
- հավաքում է կոդի հատվածները IR Code բուֆերային զանգվածի մեջ
- փաթեթավորում է բուֆերը IR փոխանցման հրամանի մեջ ՝ օգտագործելով IRLib Arduino գրադարանը
Եթե նպատակային սարքը գտնվում է IR հաղորդիչի հարևանությամբ, ապա սարքը (կարող է) արձագանքել Arduino- ի փոխանցած IR ազդանշանին
ՆՇՈՒՄ
Թեև թիրախային սարքը, որն ես օգտագործում եմ այս ցուցադրման ժամանակ, արձագանքում է IR ազդանշաններին, գուցե ցանկանաք կարդալ իմ մյուս IBLE- ի այս հատվածը այն պատճառներով, թե ինչու եմ ասում, որ սարքը (կարող է) արձագանքել IR ազդանշանին:
Timeամանակն է գլորվել:
Քայլ 1: Այն, ինչ ձեզ հարկավոր է, նախքան այն, ինչ ձեզ հարկավոր է
Այս խրատը տանում է նախկինում կատարված որոշ աշխատանքների արդյունքում, որոնք նույնպես հանգեցրին իմ վերջին IBLE- ին:
Այսպիսով, նախքան մենք կքննարկենք այն, ինչ մեզ պետք է այս IBLE- ի համար, խորհուրդ է տրվում, որ դուք կարդաք այս հրահանգը որոշ նախապատմությունների վերաբերյալ, թե ինչպես.
- Ստեղծվեց Arduino IRLib ինֆրակարմիր գրադարանը
- Այս IBLE- ում օգտագործվող IR կոդերը ինչպես են գրավվել IR ստացողի միջոցով
- Ինչպես են գրված IR կոդերն օգտագործվել թիրախային սարքը IR հաղորդիչի միջոցով վերահսկելու համար
Այս IBLE- ի ավարտից հետո ես տեղադրեցի ASP. NET IR Code Recorder վեբ ծրագիր, որը
- Ընդունեք գրավված IR կոդը, ինչպես նաև ինտուիտիվ կերպով անվանված կոդի բանալին, որպես մուտքագրումներ վեբ ձևի միջոցով
- Շատ երկար IR ծածկագիրը բաժանեք 64 նիշից պակաս հատվածների ՝ Arduino Uno- ի Serial buffer սահմանի տակ մնալու համար:
- Կոդերի վերջին հատվածը նախապես ամրագրված կլինի «E»-ով, որը Arduino- ին ցույց է տալիս, որ ստացել է ծածկագրի վերջին հատվածը
- Յուրաքանչյուր հատված պետք է առանձնացված լինի խողովակի սահմանազատիչով ՝ նախքան երկար լարի մեջ հավաքվելը
- Վերջապես, հատվածավորված IR Code- ը և դրա կոդի բանալին պահվեցին SQL Server 2012 տվյալների բազայում
Սա SQL տվյալների բազան է, որը կազմում է այս IBLE- ում մշակված Home Automation Hub- ի բաղադրիչներից մեկը:
ՆՇՈՒՄ
IR Code Recorder վեբ հավելվածն այստեղ քննարկման մաս չի կազմում հետևյալ պատճառներով.
- Դուք կարող եք ձեռքով գրառել ծածկագրերը Arduino Sketch- ի միջոցով, դրանք բաժանել խողովակներով սահմանափակ հատվածների և դրանք պահել տվյալների բազայում ՝ առանց մշակելու վեբ հավելված
- Ի տարբերություն այս IBLE- ի, IR Recorder- ը կենտրոնանում է Arduino- ից մինչև Raspberry Pi հակադարձ հաղորդակցության վրա
Հետևաբար, այս նախագծի մանրամասները կդառնան թեմա մեկ այլ IBLE- ի համար
Քայլ 2: Այն, ինչ ձեզ հարկավոր է `սարքավորում
Գործող Raspberry Pi 2.0 - Ես խորհուրդ եմ տալիս տեղադրել Ubuntu Mate- ը, քանի որ այն ունի ավելի հարուստ գործառույթներ, ներառյալ OpenLibre Office- ը, որն, ի դեպ, անփոխարինելի էր այս հրահանգելի փաստաթղթերը հենց Raspberry Pi- ի վրա:
Բացի այդ, Pi- ին ձեզ հարկավոր են հետևյալ արտաքին տեսակները.
- Arduino Uno նախատիպային հարթակ կամ կլոն
- IR հաղորդիչ LED - ես օգտագործել եմ Amazon.com- ի Three Legs անունով ապրանքանիշը
- 330 կամ 220 Օմ դիմադրողականներ. Ես օգտագործել եմ 220-ը (գույնի ծածկագիրը ՝ կարմիր-կարմիր-շագանակագույն), քանի որ ունեի մի քանի հարմար
- Տեղադրված են սովորական հացի տախտակ, միակցիչներ և համակարգիչ Arduino Environment- ով
- Թեստավորման թեկնածու, ինչպիսին է ամենուրեք Samsung LED մոնիտորը հեռակառավարմամբ
Քայլ 3. Այն, ինչ ձեզ հարկավոր է `ծրագրակազմ
Բոլոր մասերը միասին հավաքելու համար անհրաժեշտ է տեղադրել և գործարկել հետևյալ ծրագրաշարի կարգավորումը.
Raspberry Pi- ի վրա ձեզ հարկավոր է տեղադրել հետևյալը
- Arduino IDE - օգտագործվում է Էսքիզը կառուցելու և այն UNO հասցնելու համար
- Python մոդուլ Arduino- ի համար - ՄԱԿ -ի և Pi- ի միջև սերիական հաղորդակցության համար
- Python SignalR հաճախորդների գրադարան - կարող եք անդրադառնալ այստեղ կցված հրահանգներին
Տեղադրված է Windows մեքենա ՝ հետևյալ զարգացման միջավայրով
- Microsoft Visual Studio Express 2013 -ի անվճար հրատարակություն ՝ SignalR Hub և Web հաճախորդային հավելվածը կառուցելու համար
- SQL Server 2012 Express- ի անվճար հրատարակություն `հիմնական տվյալների բազայի նախագծման և կառուցման համար
Windows Internet Information Server (IIS) Հոսթինգի միջավայր
- SignalR Hub և Web հաճախորդը կառուցվելուց և փորձարկվելուց հետո այն պետք է տեղակայվի տեղական IIS սերվերի վրա
- Իմ դեպքում ես նախատեսում եմ օգտագործել հին Windows 7 -ով աշխատող հին նոութբուքը IIS- ով ՝ իմ տնային ցանցում
ՆՇՈՒՄ
Բոլոր հրահանգները կիրառելի են Python 2.7.x տարբերակի համար: 3.0 տարբերակը կարող է պահանջել վերաշարադրում
Քայլ 4: SQL Server տվյալների շտեմարան
Կցված սխեմատիկան ցույց է տալիս այս հավելվածում օգտագործվող հիմնական SQL Server տվյալների բազայի կառուցվածքը և պարունակում է ընդամենը երկու աղյուսակ:
Աղյուսակի AutoHubCode
Այս աղյուսակի երկու կարևոր սյունակներն են.
AutoCodeKey - պահում է կոդի բանալու օգտագործողի համար հարմար անունը
Կոդի բանալիներից յուրաքանչյուրը փոխանցվում է ավտոմատացման հաճախորդի կողմից. Մեր դեպքում ՝ վեբ էջից HTML կոճակ
AutoCodeVal - պահում է IR կոդի հումքի հաջորդականությունը
Սա իրական IR կոդն է, որը հետ է փոխանցվում հաճախորդին ի պատասխան SignalR Hub- ի
Այս դեպքում, Python- ի հաճախորդը, որը մշտական կապի մեջ է Hub- ի հետ, ստանում է IR ծածկագրի հաջորդականությունը և այն սերիական նավահանգստով փոխանցում է Arduino UNO- ին:
Աղյուսակ AutoHubLog
- Գրանցում է ավտոմատացման հաճախորդի պահանջած կոդը:
- Սա միջոց է ՝ հետևելու համար, թե ով և երբ է օգտագործել համակարգը և ինչ ծածկագիր է պահանջվել
Ինչպես նշվեց, ես օգտագործել եմ SQL Server 2012 -ը որպես իմ ընտրած տվյալների բազայի հարթակ: Դուք կարող եք վերստեղծել այս պարզ դիզայնը տվյալների բազայի այլ հարթակում, ինչպիսիք են MySQL- ը, Oracle- ը և այլն:
Այնուամենայնիվ, այս տվյալների բազան ստեղծելու SQL Script- ը կցվել է այստեղ:
ՆՇՈՒՄ
- SignalR Hub- ի ծածկագիրը նախատեսված է SQL Server 2012 տվյալների բազային միանալու համար
- Այլ տվյալների բազայի հետ աշխատելը կնշանակի փոխել Hub- ը `տվյալների բազայի այլ վարորդ օգտագործելու համար
Քայլ 5. ASP. NET SignalR հանգույց վեբ ծրագիր
ASP. NET SignalR հանգույցի վեբ ծրագիրը համատեղ բաղկացած է հետևյալ բաղադրիչներից, ինչպես նշված է կից սխեմատիկայում.
Բաժին 1 - SignalR Hub- ը, որը հաճախորդից ստանում է հարցումներ և պատասխանում
Բաժիններ 2, 4 - HTML հաճախորդի վեբ էջը և դրա ոճաթերթը, որոնք միասին կազմում են Ավտոմատացման համակարգի առջևի հատվածը և հրամաններ են տալիս Ավտոմատացման հանգույցին
Բաժին 3 - jQuery SignalR API- ները, որոնք օգտագործվում են HTML հաճախորդի կողմից ՝ ավտոմատացման հանգույցին հաղորդակցվելու համար
Բաժին 5 - SignalR Hub- ը ուղղակիորեն չի հաղորդակցվում տվյալների բազայի հետ: Դա անում է միջանկյալ դասերի միջոցով, որոնք ստեղծվում են Entity Framework- ի միջոցով
Այս դասերը վերացնում են տվյալների բազայի մանրամասները դիմային հավելվածից
Բաժին 6 - Տվյալների բազայի ծառայության դասը, որն օգնում է կատարել SQL տվյալների շտեմարանում Read -Write գործողությունները (նախկինում նկարագրված) ՝ օգտագործելով Entity Framework դասերը
ASP. NET- ը և SignalR- ը Microsoft- ի տեխնոլոգիաներն են, և այս ձեռնարկը կներկայացնի ձեզ, թե ինչպես է կառուցվում և տեղակայվում պարզ SignalR հավելվածը:
Այն, ինչ ես կառուցել եմ այստեղ, հիմնված է այս ձեռնարկից ձեռք բերված հիմունքների վրա: Տեղադրվելիս ծրագիրը պետք է նման լինի երկրորդ նկարում ցուցադրված վեբ էջին
NOTԱՆՈԹՈԹՅՈՆ ԿՈԴԻՆ
Կցված է ZIP ֆայլ, որը պարունակում է ծածկագրի հանված տարբերակ
Թղթապանակի կառուցվածքը պատկերված է տեսողականում, սակայն բոլոր շրջանակային դասերը և jQuery սցենարները հեռացվել են ՝ հավելվածի չափը նվազեցնելու համար:
Առաջարկությունն այն է, որ այս կոդը օգտագործվի որպես ուղեցույց, որովհետև երբ ստեղծեք նոր SignalR վեբ ծրագիր ՝ հետևելով վերը նշված ձեռնարկի հղմանը, ինքնաբերաբար կավելացվեն jQuery- ի վերջին գրադարանները և ASP. NET շրջանակային դասերը:
Բացի այդ, index.html էջում jQuery սցենարների հղումները պետք է փոխվեն, որպեսզի արտացոլեն jQuery SignalR հաճախորդների գրադարանների վերջին տարբերակը, որն ինքնաբերաբար կավելացվի ձեր վեբ հավելվածը կառուցելիս:
Վերջապես, կապի տողը պետք է փոխվի, որպեսզի համապատասխանի ձեր տվյալների շտեմարանին Web.config անունով ֆայլերում:
Քայլ 6: Python SignalR ծառայության հաճախորդ
Թեև HTML SignalR Հաճախորդը առջևի User Interface է, Python Client- ը ծառայություն է, որի հիմնական գործառույթն է ՝ ստանալ հանգույցի կողմից փոխանցված IR կոդը և այն սերիական հաղորդակցության միջոցով ուղղորդել դեպի Arduino UNO:
Կցված կոդը ինքնին բացատրելի է և բավականաչափ փաստաթղթավորված ՝ նկարագրելու դրա ֆունկցիոնալությունը:
Ինչպես ցույց է տրվում էկրանի կոմպոզիտային նկարում, HTML Հաճախորդը և Python Service հաճախորդը SignalR Hub- ի միջոցով շփվում են հետևյալ կերպ.
- Ավտոմատացման համակարգի օգտագործողը հրահանգ է տալիս Հաբին կոճակի սեղմման միջոցով
- Յուրաքանչյուր կոճակ կապված է IR բանալիի կոդի հետ և սեղմելիս այս կոդը փոխանցվում է Հաբին
-
Հաբը ստանում է այս ծածկագիրը, միանում է տվյալների բազային և առբերում է IR ազդանշանի չմշակված կոդը և այն հետ է փոխանցում բոլոր կապված հաճախորդներին
Միևնույն ժամանակ, Hub- ը մուտքագրում է մուտքը AutoHubLog տվյալների բազայի աղյուսակում ՝ գրանցելով ծածկագիրը և հեռավոր հաճախորդների պահանջած ամսաթիվը և ժամը
- Python ծառայության հաճախորդը ստանում է IR ծածկագիրը և այն փոխանցում է Arduino UNO- ին հետագա մշակման համար
Քայլ 7. Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը
Arduino- ի սխեման, ինչպես ցույց է տրված տեսողական պատկերներում, բավականին պարզ է այս համակարգի համար և, հետևաբար, կարճ նկարագրված է.
- Անգույն IR LED- ը պետք է միացված լինի ՄԱԿ -ի թվային PIN 3 -ին. Սա IRLib Arduino գրադարանի պահանջն է:
- Պատճառները նկարագրված են իմ ավելի վաղ IBLE- ում ՝ հեռակառավարման վահանակը IRLib գրադարանին վերաբերող բաժնում
- Թվային PIN 4 -ին միացված Կանաչ LED- ն տեսողական ցուցիչ է, որը լուսավորվում է, երբ ՄԱԿ -ը ստանում է Raspberry Pi- ով աշխատող Python հաճախորդից IR Code- ի բոլոր բաժինները:
- Այս LED լուսարձակի առկայությունը կհաստատի, որ Raspberry Pi- ի և UNO- ի միջև սերիական հաղորդակցությունն աշխատում է
- Սերիական հաղորդակցությունը միացնելու համար UNO- ն միացված է Raspberry Pi- ին USB պորտի միջոցով
- Կցված Arduino Sketch- ը բավականաչափ մեկնաբանվում է `նկարագրելու դրա գործառույթը
- Կոդի վերևում տրված մեկնաբանությունները նաև նկարագրում են, թե ինչպես է պետք միացնել սխեման
ՆՇՈՒՄ
Գործնականում, Arduino- ն և Pi- ն կարող են համատեղ միացվել սնուցվող USB հանգույցին, որը բավականաչափ հզոր է Pi- ն, Arduino- ն վարելու համար, ինչպես նաև հզոր ազդանշան փոխանցելու IR LED- ի միջոցով:
Քայլ 8: Միացեք և փորձարկեք համակարգը
- Կառուցեք և տեղակայեք ASP. NET SignalR Hub- ը ՝ HTML հաճախորդը SQL Server 2012 տվյալների բազայի հետ միասին, Տեղական տեղեկատվական սերվերին (IIS) ձեր տեղական տնային ցանցում
-
Մուտք գործեք վեբ ծրագիր ՝ HTML SignalR հաճախորդը բացելով HTTP- ով
այս էջի հասցեն սովորաբար կլինի https:// yourComputer: port_number/
-
Կտտացրեք կառավարման վահանակի կոճակին, և եթե ծրագիրը ճիշտ տեղադրված է, հանգույցը կպատասխանի ՝ վերադարձնելով IR ծածկագիրը և այն ցուցադրելով կառավարման վահանակին կից մոխրագույն վահանակում:
Հիշե! Դուք պետք է ծածկագրերը բեռնեք ձեր տվյալների բազայում ՝ ստեղծելով IR ստացողի գրադարանը և գրավելով ծածկագրերը, ինչպես նկարագրված է իմ նախորդ IBLE- ում:
-
Միացրեք Arduino- ն Raspberry Pi- ին USB- ով - բացեք Arduino IDE- ն Pi- ի վրա և համոզվեք, որ ՄԱԿ -ը կարող է կապ հաստատել Pi- ի հետ
Arduino- ի ձեռնարկի այս հոդվածները պետք է օգնեն ձեզ բավականին արագ հասնել դրան
-
Բացեք Python ծածկագիրը և կատարեք հետևյալ փոփոխությունները, որոնք կիրառելի են ձեր միջավայրի համար
- ձեր ՄԱԿ -ի սերիայի նավահանգստի հասցեն, որը ձեռք է բերվել Քայլ 4 -ից
- SignalR հանգույցի URL- ն ՝ համապատասխանեցնելու ձեր տեղական URL- ին Քայլ 2 -ից - այս օրինակում դա կլինի https:// yourComputer: port_number/signalr
- Վերջապես, բացեք Arduino Sketch- ը Arduino IDE- ում Raspberry Pi- ի վրա և նշեք UNO- ին
- Տեղադրեք հացի տախտակը, որը միացումն է պահում վերահսկվող սարքի հետ հարևանությամբ.
- Սկսեք Python ծրագիրը Raspberry Pi- ի վրա ՝ սեղմելով Python IDLE գործիքագոտու F5 կոճակը
- Վերադարձեք HTML հաճախորդի ծրագրի կառավարման վահանակ (Քայլ 2) և կտտացրեք կոճակին (օրինակ ՝ միացնելը կամ ձայնի բարձրացումը)
Եթե համակարգը ճիշտ է տեղադրված, ապա դուք պետք է կարողանաք ձեր հեռախոսի կամ պլանշետի HTML հաճախորդի էջը բացել և ձեր սարքը կառավարել ձեր HTML հաճախորդի էջի կոճակներով:
Քայլ 9. Գործող համակարգը
Վերևում ցուցադրվող պատկերները ցույց են տալիս, որ Տան ավտոմատացման համակարգը գործում է, երբ այն կարգաբերվի:
Այս IBLE- ի հրապարակումից ի վեր ես երկարացրել եմ ինտերֆեյսը ՝ մի քանի IR կոդեր գրավելով իմ VIZIO LED հեռուստացույցից
Ինչպես ցույց է տրված գործարանային հեռակառավարման վահանակի կողքին ՝ առաջին տեսողական հատվածում, այս հեռակառավարման վահանակի մի քանի հիմնական գործառույթներ ներկառուցված են վեբ ինտերֆեյսի մեջ, որը հասանելի է իմ պլանշետի միջոցով
Հետագա տեսարանները ցույց են տալիս, որ պլանշետը առաջին պլանում է, իսկ հետևում ՝ հեռուստացույցը, որն արձագանքում է վեբ ինտերֆեյսից տրված հրամաններին.
- Power OFF հրաման - հեռուստացույցն անջատվում է
- Power ON հրաման - հեռուստացույցը միանում է, և «V» պատկերանշանը հայտնվում է էկրանի հզորացմանը զուգընթաց
- Անջատել հրամանը - հորիզոնական սանդղակը բարձրանում է, եթե խոսնակը խլացված է
Բոլոր թեստերում մոխրագույն հատվածը պլանշետի էկրանի վահանակի կողքին ցուցադրում է հաճախորդի կողմից տրված հրամանը, իսկ պատասխանը ՝ ուղարկված հեռավոր SignalR Hub- ի կողմից:
Քայլ 10. Ավտոմատացման համակարգի և հարակից ուղղումների կատարելագործում
Այս համակարգը կարող է ընդլայնվել `ավելացնելով ավելի շատ կոդեր, որոնք վերցված են տարբեր համակարգերից: Թեև այս հատվածը հեշտ է, կան ևս երկու գործոն, որոնք դուք պետք է հաշվի առնեք:
Ընդլայնում 1 (Արագ). Տարբեր երկարությունների IR ազդանշանների հետ աշխատելը
-
Տարբեր համակարգերի IR կոդերը գալիս են տարբեր երկարություններով, նույնիսկ նույն արտադրողի երկու արտադրանքի միջև:
Օրինակ, այս դեպքում, LED կոդով զանգվածի երկարությունը LED հեռուստացույցի համար 67 է, մինչդեռ Samsung Sound Bar- ի երկարությունը `մոտ 87:
- Դա նշանակում է, որ եթե առաջինը միացնեի Ձայնի բարը, Արդուինոյի էսքիզում IR Buffer զանգվածը կլցվեր IR կոդի հաջորդականությամբ, որը պարունակում է 87 կոդ:
- Դրանից հետո, եթե ես միացնեի LED հեռուստացույցը, այն IR Buffer զանգվածը կլրացներ ընդամենը 67 կոդով, սակայն նախորդ գործողությունից մնացած 20 կոդերը դեռ մոտ կլինեին:
Արդյունքը? LED հեռուստացույցը չի միանում, քանի որ IR Code Buffer- ը վնասվել է նախորդ գործողությունից չջնջված լրացուցիչ 20 ծածկագրերի պատճառով:
Ուղղում 1 (հեշտ ելք, խորհուրդ չի տրվում)
Փոփոխեք Arduino էսքիզը հետևյալ կերպ.
Փոխեք հետևյալ գործառույթի կանչերը loop () {} գործառույթում
transmitIRCode ();
փոխանցել IRCode (գ);
Փոփոխություններ կատարեք վերը նշված գործառույթի ստորագրության մեջ.
void transmitIRCode (int codeLen) {// RAWBUF հաստատուն փոխարինված codeLen IRTransmitter. IRSendRaw:: send (IRCodeBuffer, codeLen, 38); }
Թեև դա հեշտ է, բայց զանգվածը երբեք իսկապես չի մաքրվում, և, հետևաբար, սա այնքան էլ մաքուր լուծում չէ
Ուղղում 2 (դժվար չէ, խորհուրդ է տրվում)
Հայտարարեք լրացուցիչ փոփոխական Arduino Sketch- ի վերևում ՝ մեկնաբանությունների բաժնից հետո.
անստորագիր EMPTY_INT_VALUE;
Ավելացրեք սա setup () գործառույթի վերևում.
// Գրավեք դատարկ անստորագիր ամբողջ փոփոխականի բնական վիճակը EMPTY_INT_VALUE = IRCodeBuffer [0];
Ոլորեք ներքև և նոր գործառույթ ավելացրեք էսքիզին transmitIRCode () գործառույթից անմիջապես հետո.
void clearIRCodeBuffer (int codeLen) {// Մաքրել զանգվածից բոլոր կոդերը // EԱՆՈԹՈ:ԹՅՈՆ. զանգվածի տարրերը 0-ի վրա լուծելը լուծում չէ: (int i = 1; i <= codeLen; i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE;}}
Վերջապես, զանգահարեք վերևում գտնվող նոր գործառույթ ՝ loop () գործառույթի հետևյալ վայրում.
// Վերագործարկեք - Վերսկսեք կարդալ Serial PortclearIRCodeBuffer (գ);…
Սա ավելի մաքուր մոտեցում է, քանի որ այն իրականում վերակայում է IR բուֆերային զանգվածի բոլոր այն վայրերը, որոնք բնակեցված էին IR Code կոդի վերջին ազդանշանով ՝ առանց որևէ բանի պատահականության թողնելու:
Ընդլայնում 2 (Առավել ներգրավված). Կրկնվող IR ազդանշանի փոխանցում որոշակի սարքերի համար
Որոշ սարքեր պահանջում են նույն ազդանշանը մի քանի անգամ փոխանցել `արձագանքելու համար: Օրինակ. Այս դեպքում, Samsung Sound Bar- ը պահանջում է, որ նույն ծածկագիրը երկու անգամ ուղարկվի 1 վայրկյան ընդմիջումով:
Հայեցակարգի ուղղումը քննարկվել է այստեղ, քանի որ այն մի փոքր ավելի ներգրավված է և փորձարկման կարիք կունենա:
Ardunio Sketch- ին կրկնվող գործառույթ ավելացնելը կնշանակի, որ դուք ստիպված կլինեք լուսավորել ուրվագիծը ամեն անգամ, երբ ձեր տան ավտոմատացման համակարգին նոր սարք ավելացնեք
Փոխարենը, այս ամրագրումն ավելացնելով HTML SignalR հաճախորդին և Python SignalR ծառայության ծրագրին լուծումը շատ ավելի ճկուն է դարձնում: Եվ դա սկզբունքորեն կարելի է հասնել հետևյալ կերպ.
Փոփոխեք SignalR HTML հաճախորդը ՝ կրկնվող տեղեկատվությունը Հաբ փոխանցելու համար
Բացեք index.html- ը և կրկնվող արժեքը տեղադրեք HTML կոճակում, այսպես.
արժեք = "SMSNG-SB-PWR-ON" կդառնա արժեք = "SMSNG-SB-PWR-ON_2_1000"
Որտեղ, 2 -ը կրկնվող արժեքն է, իսկ 1000 -ը `երկու կրկնող ազդանշանների միջև միլիվայրկյանների ուշացման արժեքը
Երբ կտտացնում եք այս կոճակին, SignalR հանգույցը կստանա Հիմնական ծածկագիրը+Repeat_Spec
Փոփոխեք SignalR Server- ի կողային մեթոդները ՝ միայն հիմնական կոդը վերլուծելու համար
- Օգտագործեք Բանալի կոդը ՝ սովորականից տվյալների բազայից IR կոդը ստանալու համար
- Սովորաբար փոխանցեք հիմնական կոդը+Repeat_Spec և IRCode SingalR հաճախորդներին
Փոփոխեք Python SignalR ծառայության դիմումը ՝ ազդանշաններ փոխանցելու համար ՝ օգտագործելով Կրկնել արժեքները
Բացեք Python հաճախորդը և փոփոխեք հետևյալ երկու գործառույթները.
def print_command_from_hub (buttonId, cmdSrc):
# վերլուծել կրկնվող ծածկագիրը կոճակի ID- ի արժեքից
def transmitToArduino (IRSignalCode, delim, endPrefix):
# կարգավորեք որոշ ժամանակ կամ օղակ ՝ ազդանշանը ցանկալի հաճախականությամբ փոխանցելու համար
- Այս կերպ, Arduino- ն պարտադիր չէ անընդհատ բռնկվել
- Այս համակարգում կարող են ներկառուցվել կրկնությունների հաճախականությունների ցանկացած քանակ
- Բացի այդ, եթե դուք օգտագործում եք UNO- ն, ձեր ուրվագծի չափի սահմանափակում կա:
Քայլ 11: Հայտնի խնդիրներ և անվտանգության մտահոգություններ
Ինչպես առաջին անգամ կառուցված համակարգերի դեպքում է, սա ունի մի քանի խնդիր, որոնք ի հայտ են եկել փորձարկման ընթացքում:
Հարց 1. Կոճակի սեղմումների միջև արագ հաջորդականությամբ հրահանգների արձակումը `մեկ վայրկյանից պակաս ուշացումներով, առաջին մի քանի անգամ արձագանքելուց հետո համակարգը դարձավ անարձագանք:
- Python SignalR հաճախորդի վերագործարկումը վերականգնում է համակարգը բնականոն գործունեությանը
- Անմիջական լուծումներ կարող են լինել ՝ հեռացնել Debug- ի անցանկալի ելքերը երկուսում ՝ Python SignalR Client- ում և Arduino Sketch- ում և կրկնել այս թեստերը
- Մեկ այլ վայր, որին պետք է ուշադրություն դարձնել, կլինի սերիական հաղորդակցությունն ինքնին. Հնարավո՞ր կլինի արդյոք կոդ ավելացնել բուֆերն արագորեն մաքրելու համար:
Ասածս այն է, որ ես նկատել եմ, որ իմ հեռուստացույցը լավ չի արձագանքում իր գործարանային հեռակառավարիչին, ուստի իմ հեռուստացույցի IR հաղորդակցության բնույթը կարող է նաև նպաստող գործոն լինել:
Թողարկում 2. HTML էկրանը դադարում է արձագանքել կոճակների կտտացումներին երկար անգործությունից հետո
Սովորաբար էջը թարմացնելը լուծում է այս վարքագիծը, սակայն այս վարքագծի պատճառը, սակայն, դեռ պարզ չէ
ԱՆՎՏԱՆԳՈԹՅԱՆ ՀԱՐCԵՐԸ
Այս համակարգը նախատեսված է միայն տեղական (տնային) ցանցի օգտագործման համար և չունի անհրաժեշտ անվտանգության երաշխիքներ ինտերնետում օգտագործելու համար:
Հետևաբար, խորհուրդ է տրվում, որ SignalR հանգույցը տեղակայվի ձեր տեղական/տնային ցանցի տեղական մեքենայի վրա:
Շնորհակալություն իմ IBLE- ը կարդալու համար և հուսով եմ, որ դուք զվարճացեք:
Խորհուրդ ենք տալիս:
DIY Home Automation Intruder Ահազանգ. 5 քայլ (նկարներով)
DIY Home Automation Intruder Alarm System !: Այս նախագծում ես ձեզ ցույց կտամ, թե ինչպես օգտագործել Home Assistant ծրագիրը `ձեր տան համար ներխուժողների ահազանգման համակարգ ստեղծելու համար: Համակարգը հիմնականում կբացահայտի, եթե դուռը բացվի առանց թույլտվության, այնուհետև այն կուղարկի ծանուցում
Sonoff B1 Firmware Home Automation Openhab Google Home: 3 քայլ
Sonoff B1 Firmware Home Automation Openhab Google Home. Ինձ իսկապես դուր է գալիս Tasmota- ի որոնվածը իմ Sonoff անջատիչների համար: Բայց a- ն իրականում գոհ չէր իմ Sonoff-B1- ի Tasmota- ի որոնվածից: Ինձ լիովին չհաջողվեց այն ներառել իմ Openhab- ում և վերահսկել այն Google Home- ի միջոցով: Հետևաբար ես գրեցի իմ սեփական ընկերությունը
ESP-NOW Home Automation Esp8266 Raspberry Pi MQTT ՝ 4 քայլ
ESP-NOW Home Automation Esp8266 Raspberry Pi MQTT. Այս հրահանգով ես ձեզ ցույց եմ տալիս, թե ինչպես եմ օգտագործել ESP-NOW- ը իմ տան ավտոմատացման մեջ: Սխեմատիկայում կարող եք տեսնել հաղորդակցության հոսքերը Ես ձեզ ցույց եմ տալիս. Ինչպես է ուղարկողը աշխատում ստացողի մոտ `սերիական հաղորդակցություն Raspberry Pi- ի հետ: Ես չեմ ցուցադրում այն
Bluetooth Control Home Automation: 7 քայլ (նկարներով)
Bluetooth Control Home Automation: Ողջույն, այս նախագիծը վերաբերում է արդուինոյի և bluetooth մոդուլի միջոցով տնային ավտոմատացման առավել պարզեցված սարքի ստեղծմանը: Այս մեկը շատ հեշտ է կառուցել և այն կարող է կառուցվել մի քանի ժամվա ընթացքում: Իմ տարբերակով, որը ես բացատրում եմ հենց այստեղ, կարող եմ խաբել
DIY Google Home Bluetooth բարձրախոսով Raspberry Pi Zero Docking Hub- ում ՝ 7 քայլ (նկարներով)
DIY Google Home ՝ Bluetooth բարձրախոսով Raspberry Pi Zero Docking Hub- ում. Մենք ունենք ուսանելի DIY Amazon Echo Alexa - Alexa ձայնային օգնական Raspberry Pi Zero Docking Hub- ում: Այս անգամ մենք ուզում ենք ձեզ ցույց տալ, թե ինչպես կարելի է ինքնուրույն կառուցել Google Home: Այս ձեռնարկում մենք ձեզ ցույց կտանք, թե ինչպես տեղադրել և կարգավորել Google Օգնականը