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

Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 քայլ (նկարներով)
Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 քայլ (նկարներով)

Video: Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 քայլ (նկարներով)

Video: Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 քայլ (նկարներով)
Video: 2018-11-20 Learning SignalR - Home Automation with .NET Core and Hubitat 2024, Հունիսի
Anonim
Raspberry Pi-Arduino-SignalR տնային ավտոմատացման հանգույց
Raspberry Pi-Arduino-SignalR տնային ավտոմատացման հանգույց

Հետևելով այստեղ և այստեղ հրապարակված իմ մի քանի նախածանցային 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- ի համար, խորհուրդ է տրվում, որ դուք կարդաք այս հրահանգը որոշ նախապատմությունների վերաբերյալ, թե ինչպես.

  1. Ստեղծվեց Arduino IRLib ինֆրակարմիր գրադարանը
  2. Այս IBLE- ում օգտագործվող IR կոդերը ինչպես են գրավվել IR ստացողի միջոցով
  3. Ինչպես են գրված 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 տվյալների շտեմարան
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- ը կցվել է այստեղ:

ՆՇՈՒՄ

  1. SignalR Hub- ի ծածկագիրը նախատեսված է SQL Server 2012 տվյալների բազային միանալու համար
  2. Այլ տվյալների բազայի հետ աշխատելը կնշանակի փոխել Hub- ը `տվյալների բազայի այլ վարորդ օգտագործելու համար

Քայլ 5. ASP. NET SignalR հանգույց վեբ ծրագիր

ASP. NET SignalR հանգույցի վեբ ծրագիր
ASP. NET SignalR հանգույցի վեբ ծրագիր
ASP. NET SignalR հանգույցի վեբ ծրագիր
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 ծառայության հաճախորդ

Python SignalR ծառայության հաճախորդը
Python SignalR ծառայության հաճախորդը

Թեև HTML SignalR Հաճախորդը առջևի User Interface է, Python Client- ը ծառայություն է, որի հիմնական գործառույթն է ՝ ստանալ հանգույցի կողմից փոխանցված IR կոդը և այն սերիական հաղորդակցության միջոցով ուղղորդել դեպի Arduino UNO:

Կցված կոդը ինքնին բացատրելի է և բավականաչափ փաստաթղթավորված ՝ նկարագրելու դրա ֆունկցիոնալությունը:

Ինչպես ցույց է տրվում էկրանի կոմպոզիտային նկարում, HTML Հաճախորդը և Python Service հաճախորդը SignalR Hub- ի միջոցով շփվում են հետևյալ կերպ.

  1. Ավտոմատացման համակարգի օգտագործողը հրահանգ է տալիս Հաբին կոճակի սեղմման միջոցով
  2. Յուրաքանչյուր կոճակ կապված է IR բանալիի կոդի հետ և սեղմելիս այս կոդը փոխանցվում է Հաբին
  3. Հաբը ստանում է այս ծածկագիրը, միանում է տվյալների բազային և առբերում է IR ազդանշանի չմշակված կոդը և այն հետ է փոխանցում բոլոր կապված հաճախորդներին

    Միևնույն ժամանակ, Hub- ը մուտքագրում է մուտքը AutoHubLog տվյալների բազայի աղյուսակում ՝ գրանցելով ծածկագիրը և հեռավոր հաճախորդների պահանջած ամսաթիվը և ժամը

  4. Python ծառայության հաճախորդը ստանում է IR ծածկագիրը և այն փոխանցում է Arduino UNO- ին հետագա մշակման համար

Քայլ 7. Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը

Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը
Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը
Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը
Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը
Arduino UNO IR փոխանցման ուրվագիծը և ծածկագիրը
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: Միացեք և փորձարկեք համակարգը

Կապվել և փորձարկել համակարգը
Կապվել և փորձարկել համակարգը
Կապվել և փորձարկել համակարգը
Կապվել և փորձարկել համակարգը
Կապվել և փորձարկել համակարգը
Կապվել և փորձարկել համակարգը
  1. Կառուցեք և տեղակայեք ASP. NET SignalR Hub- ը ՝ HTML հաճախորդը SQL Server 2012 տվյալների բազայի հետ միասին, Տեղական տեղեկատվական սերվերին (IIS) ձեր տեղական տնային ցանցում
  2. Մուտք գործեք վեբ ծրագիր ՝ HTML SignalR հաճախորդը բացելով HTTP- ով

    այս էջի հասցեն սովորաբար կլինի https:// yourComputer: port_number/

  3. Կտտացրեք կառավարման վահանակի կոճակին, և եթե ծրագիրը ճիշտ տեղադրված է, հանգույցը կպատասխանի ՝ վերադարձնելով IR ծածկագիրը և այն ցուցադրելով կառավարման վահանակին կից մոխրագույն վահանակում:

    Հիշե! Դուք պետք է ծածկագրերը բեռնեք ձեր տվյալների բազայում ՝ ստեղծելով IR ստացողի գրադարանը և գրավելով ծածկագրերը, ինչպես նկարագրված է իմ նախորդ IBLE- ում:

  4. Միացրեք Arduino- ն Raspberry Pi- ին USB- ով - բացեք Arduino IDE- ն Pi- ի վրա և համոզվեք, որ ՄԱԿ -ը կարող է կապ հաստատել Pi- ի հետ

    Arduino- ի ձեռնարկի այս հոդվածները պետք է օգնեն ձեզ բավականին արագ հասնել դրան

  5. Բացեք Python ծածկագիրը և կատարեք հետևյալ փոփոխությունները, որոնք կիրառելի են ձեր միջավայրի համար

    • ձեր ՄԱԿ -ի սերիայի նավահանգստի հասցեն, որը ձեռք է բերվել Քայլ 4 -ից
    • SignalR հանգույցի URL- ն ՝ համապատասխանեցնելու ձեր տեղական URL- ին Քայլ 2 -ից - այս օրինակում դա կլինի https:// yourComputer: port_number/signalr
  6. Վերջապես, բացեք Arduino Sketch- ը Arduino IDE- ում Raspberry Pi- ի վրա և նշեք UNO- ին
  7. Տեղադրեք հացի տախտակը, որը միացումն է պահում վերահսկվող սարքի հետ հարևանությամբ.
  8. Սկսեք Python ծրագիրը Raspberry Pi- ի վրա ՝ սեղմելով Python IDLE գործիքագոտու F5 կոճակը
  9. Վերադարձեք HTML հաճախորդի ծրագրի կառավարման վահանակ (Քայլ 2) և կտտացրեք կոճակին (օրինակ ՝ միացնելը կամ ձայնի բարձրացումը)

Եթե համակարգը ճիշտ է տեղադրված, ապա դուք պետք է կարողանաք ձեր հեռախոսի կամ պլանշետի HTML հաճախորդի էջը բացել և ձեր սարքը կառավարել ձեր HTML հաճախորդի էջի կոճակներով:

Քայլ 9. Գործող համակարգը

Գործող համակարգը
Գործող համակարգը
Գործող համակարգը
Գործող համակարգը
Գործող համակարգը
Գործող համակարգը
Գործող համակարգը
Գործող համակարգը

Վերևում ցուցադրվող պատկերները ցույց են տալիս, որ Տան ավտոմատացման համակարգը գործում է, երբ այն կարգաբերվի:

Այս IBLE- ի հրապարակումից ի վեր ես երկարացրել եմ ինտերֆեյսը ՝ մի քանի IR կոդեր գրավելով իմ VIZIO LED հեռուստացույցից

Ինչպես ցույց է տրված գործարանային հեռակառավարման վահանակի կողքին ՝ առաջին տեսողական հատվածում, այս հեռակառավարման վահանակի մի քանի հիմնական գործառույթներ ներկառուցված են վեբ ինտերֆեյսի մեջ, որը հասանելի է իմ պլանշետի միջոցով

Հետագա տեսարանները ցույց են տալիս, որ պլանշետը առաջին պլանում է, իսկ հետևում ՝ հեռուստացույցը, որն արձագանքում է վեբ ինտերֆեյսից տրված հրամաններին.

  1. Power OFF հրաման - հեռուստացույցն անջատվում է
  2. Power ON հրաման - հեռուստացույցը միանում է, և «V» պատկերանշանը հայտնվում է էկրանի հզորացմանը զուգընթաց
  3. Անջատել հրամանը - հորիզոնական սանդղակը բարձրանում է, եթե խոսնակը խլացված է

Բոլոր թեստերում մոխրագույն հատվածը պլանշետի էկրանի վահանակի կողքին ցուցադրում է հաճախորդի կողմից տրված հրամանը, իսկ պատասխանը ՝ ուղարկված հեռավոր SignalR Hub- ի կողմից:

Քայլ 10. Ավտոմատացման համակարգի և հարակից ուղղումների կատարելագործում

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

Ընդլայնում 1 (Արագ). Տարբեր երկարությունների IR ազդանշանների հետ աշխատելը

  1. Տարբեր համակարգերի IR կոդերը գալիս են տարբեր երկարություններով, նույնիսկ նույն արտադրողի երկու արտադրանքի միջև:

    Օրինակ, այս դեպքում, LED կոդով զանգվածի երկարությունը LED հեռուստացույցի համար 67 է, մինչդեռ Samsung Sound Bar- ի երկարությունը `մոտ 87:

  2. Դա նշանակում է, որ եթե առաջինը միացնեի Ձայնի բարը, Արդուինոյի էսքիզում IR Buffer զանգվածը կլցվեր IR կոդի հաջորդականությամբ, որը պարունակում է 87 կոդ:
  3. Դրանից հետո, եթե ես միացնեի 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- ը կարդալու համար և հուսով եմ, որ դուք զվարճացեք:

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