Turinys:

„Raspberry Pi-Arduino-SignalR“namų automatikos centras: 11 žingsnių (su nuotraukomis)
„Raspberry Pi-Arduino-SignalR“namų automatikos centras: 11 žingsnių (su nuotraukomis)

Video: „Raspberry Pi-Arduino-SignalR“namų automatikos centras: 11 žingsnių (su nuotraukomis)

Video: „Raspberry Pi-Arduino-SignalR“namų automatikos centras: 11 žingsnių (su nuotraukomis)
Video: Raspberry Pi - Что можно сделать? Готовые проекты. Есть ли смысл? Как научиться? 2024, Liepa
Anonim
„Raspberry Pi-Arduino-SignalR“namų automatikos centras
„Raspberry Pi-Arduino-SignalR“namų automatikos centras

Po kelių čia ir čia paskelbtų mano įžanginių IBLE, šis projektas žengia pirmąjį žingsnį kuriant pagrindinę funkcinio namų automatizavimo centro versiją.

Aš panaudojau kelias skirtingas technologijas, siekdamas suvokti, kaip galėčiau panaudoti visus dalykus, kuriuos išmokau praeityje, ir naujus dalykus, kurių aš ir toliau mokuosi eidamas į priekį.

Todėl šį automatikos centrą sudaro šie komponentai:

„SQL Server 2012“duomenų bazė, kurioje:

  • lentelėje kartu su unikaliu „kodo raktu“saugo iš anksto nustatytų infraraudonųjų spindulių (IR) kodų sąrašą
  • kodo raktai intuityviai įvardijami (vartotojo), kad būtų galima nustatyti su jais susijusių IR kodų paskirtį

Realaus laiko ASP. NET „SignalR Hub“žiniatinklio programa, kuri:

  • laukia ir gauna „kodo raktus“kaip komandas iš vartotojo, susiduriančio su HTML klientu
  • kai gaunamas, prisijungia prie SQL duomenų bazės ir nuskaito IR kodą naudodamas pateiktą kodo raktą
  • perduoda gautą IR kodą „Python SignalR“klientui

Vartotojas, susidūręs su „HTML SignalR“informacijos suvestinės klientu, kuris:

  • perduoda „Hub“unikalų kodo raktą per „jQuery SignalR Client“API
  • kiekvienas mygtukas prietaisų skydelyje parodys unikalų kodo raktą, įrašytą SQL duomenų bazės lentelėje

„Python SignalR“foninės paslaugos programa, veikianti „Raspberry Pi 2.0“, kuri:

  • gauna IR kodus kaip komandas iš koncentratoriaus
  • ieško ribų IR kodekse ir suskaido labai ilgą kodą į segmentus
  • per serijinį prievadą bendrauja su „Arduino“ir išrašo kiekvieną segmentą iš eilės

„Arduino“IR siųstuvo eskizas, kuriame:

  • laukia ir gauna kiekvieną IR kodo segmentą per nuoseklųjį prievadą
  • surenka kodo segmentus į IR kodo buferio masyvą
  • naudojant IRLib Arduino biblioteką buferį supakuoja į IR perdavimo komandą

Jei tikslinis prietaisas yra šalia IR siųstuvo, prietaisas (gali) reaguoti į „Arduino“perduodamą IR signalą

PASTABA

Nors tikslinis prietaisas, kurį naudoju šioje demonstracijoje, reaguoja į IR signalus, galbūt norėsite perskaityti šį mano IBLE skyrių dėl priežasčių, kodėl sakau, kad prietaisas (gali) reaguoti į IR signalą.

Laikas riedėti.

1 žingsnis: ko jums reikia, prieš tai, ko jums reikia

Ko jums reikia, prieš tai, ko jums reikia
Ko jums reikia, prieš tai, ko jums reikia
Ko jums reikia, prieš tai, ko jums reikia
Ko jums reikia, prieš tai, ko jums reikia
Ko jums reikia, prieš tai, ko jums reikia
Ko jums reikia, prieš tai, ko jums reikia

Šis pamokomas darbas prasideda nuo kai kurių anksčiau atliktų darbų, kurie taip pat lėmė mano paskutinį IBLE.

Taigi, prieš imdamiesi to, ko mums reikia šiam IBLE, rekomenduojama perskaityti šią instrukciją, kad sužinotumėte, kaip:

  1. Buvo įkurta „Arduino IRLib“infraraudonųjų spindulių biblioteka
  2. Kaip šiame IBLE naudojami IR kodai buvo užfiksuoti naudojant IR imtuvą
  3. Kaip užfiksuoti IR kodai buvo naudojami tikslinio prietaiso valdymui per IR siųstuvą

Baigęs šį IBLE, aš įdiegiau ASP. NET IR kodų įrašymo žiniatinklio programą, kuri:

  • Priimkite užfiksuotą IR kodą kartu su intuityviai įvardytu kodo raktu kaip įvestį per žiniatinklio formą
  • Padalinkite labai ilgą IR kodą į trumpesnius nei 64 simbolių segmentus, kad neviršytumėte „Arduino Uno“serijos buferio ribos
  • Paskutinis kodų segmentas būtų iš anksto pritvirtintas „E“, kuris „Arduino“nurodo, kad jis gavo paskutinį kodo segmentą
  • Kiekvienas segmentas būtų atskirtas vamzdžių ribotuvu, prieš jį surenkant į ilgą eilutę
  • Galiausiai segmentuotas IR kodas kartu su jo kodo raktu buvo išsaugotas „SQL Server 2012“duomenų bazėje

Būtent ši SQL duomenų bazė yra vienas iš namų automatizavimo centro komponentų, sukurtų šiame IBLE.

PASTABA

IR kodo įrašymo žiniatinklio programa čia nėra diskusijos dalis dėl šių priežasčių:

  • Galite rankiniu būdu užfiksuoti kodus naudodami „Arduino Sketch“, padalyti juos į vamzdžiais atskirtus skyrius ir išsaugoti juos duomenų bazėje, nesukurdami sudėtingos žiniatinklio programos
  • Skirtingai nuo šio IBLE, IR įrašymo įrenginys sutelkia dėmesį į atvirkštinį ryšį iš „Arduino“į „Raspberry Pi“

Todėl išsami informacija apie šį projektą būtų kito IBLE tema

2 žingsnis: ko jums reikia - aparatinė įranga

Ko jums reikia - aparatūra
Ko jums reikia - aparatūra
Ko jums reikia - aparatūra
Ko jums reikia - aparatūra

Veikiantis „Raspberry Pi 2.0“- rekomenduoju įdiegti „Ubuntu Mate“, nes jis turi turtingesnį funkcijų rinkinį, įskaitant „OpenLibre Office“, kuris, beje, buvo būtinas dokumentuojant šį pamokomą dokumentą „Raspberry Pi“.

Be to, „Pi“jums reikės šių išorinių elementų:

  • „Arduino Uno“prototipų platforma arba klonas
  • IR siųstuvų šviesos diodas - naudojau prekės ženklą „Three Legs“iš „Amazon.com“
  • 330 arba 220 omų rezistoriai-aš naudoju 220 (spalvos kodas raudona-raudona-ruda), nes turėjau kelis patogius
  • Įprasta duonos lenta, jungtys ir kompiuteris su įdiegta „Arduino Environment“
  • Bandomasis kandidatas - pavyzdžiui, visur esantis „Samsung“LED monitorius su nuotolinio valdymo pultu

3 žingsnis: ko jums reikia - programinė įranga

Norėdami sujungti visas dalis, turėsite įdiegti ir paleisti šią programinės įrangos sąranką:

„Raspberry Pi“turėsite įdiegti šiuos dalykus:

  • „Arduino IDE“- naudojamas eskizui sukurti ir perduoti UNO
  • „Python“modulis „Arduino“- skirtas serijiniam ryšiui tarp UNO ir „Pi“
  • „Python SignalR“klientų biblioteka - galite vadovautis čia pateiktomis instrukcijomis

„Windows“mašina, kurioje įdiegta ši kūrimo aplinka:

  • Nemokamas „Microsoft Visual Studio Express 2013“leidimas „SignalR Hub“ir žiniatinklio kliento programai kurti
  • Nemokamas „SQL Server 2012 Express“leidimas, skirtas suplanuoti ir sukurti užpakalinę duomenų bazę

„Windows“interneto informacijos serverio (IIS) prieglobos aplinka:

  • Sukūrus ir išbandžius „SignalR Hub“ir žiniatinklio klientą, juos reikės įdiegti į vietinį IIS serverį
  • Mano atveju namų tinkle planuoju naudoti seną nešiojamąjį kompiuterį, kuriame veikia „Windows 7“su IIS

PASTABA

Visos instrukcijos taikomos „Python 2.7.x“versijai. 3.0 versiją gali reikėti perrašyti

4 veiksmas: SQL serverio duomenų bazė

SQL serverio duomenų bazė
SQL serverio duomenų bazė

Pridedama schema rodo pagrindinės SQL serverio duomenų bazės struktūrą, naudojamą šioje programoje, ir yra tik dvi lentelės.

Lentelė AutoHubCode

Du svarbūs šios lentelės stulpeliai yra šie:

„AutoCodeKey“- saugo patogų kodo rakto pavadinimą

Kiekvieną kodo raktą perduoda automatikos klientas - mūsų atveju HTML mygtukas iš tinklalapio

„AutoCodeVal“- saugo neapdorotą IR kodo seką

Tai yra tikrasis IR kodas, kurį „SignalR Hub“atsako atgal klientui

Šiuo atveju „Python“klientas, nuolat palaikantis ryšį su centru, gauna IR kodo seką ir perduoda ją per nuoseklųjį prievadą „Arduino UNO“

Lentelė AutoHubLog

  • Įregistruoja automatizavimo kliento prašomą kodą.
  • Tai priemonė, skirta stebėti, kas ir kada naudojo sistemą ir kokio kodo buvo paprašyta

Kaip minėta, kaip pasirinktą duomenų bazės platformą naudojau „SQL Server 2012“. Galite atkurti šį paprastą dizainą kitoje duomenų bazės platformoje, pvz., „MySQL“, „Oracle“ir kt.

Nepaisant to, čia pridėtas SQL scenarijus šiai duomenų bazei sukurti

PASTABA

  1. „SignalR Hub“kodas skirtas prisijungti prie „SQL Server 2012“duomenų bazės
  2. Darbas su kita duomenų baze reikštų „Hub“pakeitimą, kad būtų galima naudoti kitą duomenų bazės tvarkyklę

5 veiksmas: žiniatinklio programa „ASP. NET SignalR Hub“

„ASP. NET SignalR Hub“žiniatinklio programa
„ASP. NET SignalR Hub“žiniatinklio programa
„ASP. NET SignalR Hub“žiniatinklio programa
„ASP. NET SignalR Hub“žiniatinklio programa

„ASP. NET SignalR Hub“žiniatinklio programą kartu sudaro šie komponentai, kaip nurodyta pridedamoje schemoje:

1 skyrius - „SignalR Hub“, gaunantis kliento užklausas ir atsakantis į jį

2, 4 skyriai - HTML kliento tinklalapis ir jo stiliaus lapas, kurie kartu sudaro automatikos sistemos priekinę dalį ir išduoda komandas automatikos centrui

3 skyrius - „jQuery SignalR“API, kurias naudoja HTML klientas, norėdamas susisiekti su automatikos centru

5 skyrius - „SignalR Hub“tiesiogiai nesusisiekia su duomenų baze. Tai daroma per tarpines klases, sukurtas naudojant „Entity Framework“

Šios klasės surenka duomenų bazės informaciją iš priekinės programos

6 skyrius - Duomenų bazės paslaugų klasė, padedanti atlikti skaitymo ir rašymo operacijas SQL duomenų bazėje (aprašyta anksčiau) naudojant „Entity Framework“klases

ASP. NET ir „SignalR“yra „Microsoft“technologijos ir ši pamoka padės jums sužinoti, kaip kuriama ir diegiama paprasta „SignalR“programa.

Tai, ką aš čia sukūriau, grindžiama pagrindais, įgytais iš šios pamokos. Įdiegus programą, ji turėtų atrodyti panaši į tinklalapį, parodytą antrame paveikslėlyje

PASTABA KODE

Pridėtas ZIP failas, kuriame yra pašalinta kodo versija

Aplanko struktūra yra tokia, kaip parodyta vaizdinėje medžiagoje, tačiau visos pagrindų klasės ir „jQuery“scenarijai buvo pašalinti, kad sumažėtų priedo dydis

Rekomenduojama šį kodą naudoti kaip vadovą, nes kai sukuriate naują „SignalR“žiniatinklio programą, vadovaudamiesi aukščiau pateikta mokymo nuoroda, naujausios „jQuery“bibliotekos ir ASP. NET sistemos klasės bus pridėtos automatiškai

Be to, nuorodos į „jQuery“scenarijus puslapyje index.html turės būti pakeistos, kad atspindėtų naujausią „jQuery SignalR“klientų bibliotekų versiją, kuri bus automatiškai pridėta kuriant žiniatinklio programą.

Galiausiai ryšio eilutė turės būti pakeista, kad atitiktų jūsų duomenų bazę failuose, pavadintuose kaip Web.config*

6 veiksmas: „Python SignalR“paslaugų klientas

„Python SignalR“paslaugų klientas
„Python SignalR“paslaugų klientas

Nors „HTML SignalR“klientas yra priekinė vartotojo sąsaja, „Python“klientas yra užpakalinė paslaugų programa, kurios pagrindinė funkcija yra gauti koncentratoriaus perduotą IR kodą ir nukreipti jį į „Arduino UNO“serijiniu ryšiu.

Pridėtas kodas yra savaime suprantamas ir pakankamai dokumentuotas, kad apibūdintų jo funkcionalumą

Kaip parodyta sudėtiniame ekrano vaizde, HTML klientas ir „Python Service“klientas per „SignalR Hub“bendrauja taip:

  1. Automatikos sistemos vartotojas, paspausdamas mygtuką, duoda komandą Hubui
  2. Kiekvienas mygtukas yra susietas su IR rakto kodu ir paspaudus, šis kodas perduodamas į koncentratorių
  3. Centras gauna šį kodą, prisijungia prie duomenų bazės ir gauna neapdorotą IR signalo kodą ir perduoda jį atgal visiems prijungtiems klientams

    Tuo pačiu metu „Hub“registruoja įrašą „AutoHubLog“duomenų bazės lentelėje, kuriame įrašomas kodas ir data bei laikas, kai to paprašė nuotoliniai klientai

  4. „Python“paslaugų klientas gauna IR kodą ir perduoda jį „Arduino UNO“tolesniam apdorojimui

7 žingsnis: „Arduino UNO“IR perdavimo eskizas ir kodas

„Arduino UNO“IR perdavimo eskizas ir kodas
„Arduino UNO“IR perdavimo eskizas ir kodas
„Arduino UNO“IR perdavimo eskizas ir kodas
„Arduino UNO“IR perdavimo eskizas ir kodas
„Arduino UNO“IR perdavimo eskizas ir kodas
„Arduino UNO“IR perdavimo eskizas ir kodas

„Arduino“grandinė, kaip parodyta vaizdinėje medžiagoje, yra gana paprasta šiai sistemai, todėl trumpai aprašyta:

  • Bespalvis IR šviesos diodas turi būti prijungtas prie „Digital PIN 3“UNO - to reikalauja IRLib Arduino biblioteka
  • Priežastys aprašytos mano ankstesniame IBLE dėl nuotolinio valdymo pulto klonavimo skyriuje, susijusiame su IRLib biblioteka
  • Žalias šviesos diodas, prijungtas prie „Digital PIN 4“, yra vizualus indikatorius, kuris užsidega, kai UNO iš „Raspberry Pi“veikiančio „Python“kliento gauna visas IR kodo dalis.
  • Jei užsidegs šis šviesos diodas, patvirtinsite, kad serijinis ryšys tarp „Raspberry Pi“ir UNO veikia
  • Norėdami įjungti serijinį ryšį, UNO prie „Raspberry Pi“prijungtas per USB prievadą
  • Pridedamas „Arduino“eskizas yra pakankamai pakomentuotas, kad apibūdintų jo funkciją
  • Kodo viršuje esančiose pastabose taip pat aprašoma, kaip reikia prijungti grandinę

PASTABA

Praktiškai „Arduino“ir „Pi“gali būti kartu prijungti prie pakankamai maitinamo USB šakotuvo, kad būtų galima valdyti „Pi“, „Arduino“ir taip pat perduoti stiprų signalą per IR šviesos diodą

8 veiksmas: sistemos prijungimas ir bandymas

Sistemos prijungimas ir bandymas
Sistemos prijungimas ir bandymas
Sistemos prijungimas ir bandymas
Sistemos prijungimas ir bandymas
Sistemos prijungimas ir bandymas
Sistemos prijungimas ir bandymas
  1. Sukurkite ir įdiekite „ASP. NET SignalR Hub“, HTML klientą kartu su „SQL Server 2012“duomenų baze, į vietinio namų tinklo interneto informacijos serverį (IIS)
  2. Pasiekite žiniatinklio programą atidarydami HTML „SignalR“klientą per

    šio puslapio URL paprastai yra https:// yourComputer: port_number/

  3. Spustelėkite mygtuką valdymo skydelyje ir, jei programa buvo tinkamai įdiegta, koncentratorius atsakys grąžindamas IR kodą ir rodydamas jį pilkame skydelyje greta valdymo skydelio

    Prisiminti! Turėsite įkelti kodus į savo duomenų bazę, sukurdami IR imtuvų biblioteką ir užfiksuodami kodus, kaip aprašyta mano ankstesniame IBLE

  4. Prijunkite „Arduino“prie „Raspberry Pi“per USB - atidarykite „Arduino IDE“„Pi“ir įsitikinkite, kad UNO gali užmegzti ryšį su „Pi“

    šie „Arduino“mokymo straipsniai turėtų padėti jums tai pasiekti gana greitai

  5. Atidarykite „Python“kodą ir atlikite šiuos pakeitimus, kurie tinka jūsų aplinkai

    • JT serijinio prievado adresą, gautą atlikus 4 veiksmą
    • „SignalR“koncentratoriaus URL, atitinkantis jūsų vietinį URL, atliktą 2 veiksme - šiame pavyzdyje tai būtų https:// yourComputer: port_number/signalr
  6. Galiausiai atidarykite „Arduino“eskizą „Arduino IDE“, esančiame „Raspberry Pi“, ir atsiųskite jį UNO
  7. Padėkite duonos lentą, kurioje grandinė yra arti valdomo prietaiso - IR šviesos diodas turi aiškiai matyti prietaiso IR imtuvo prievadą
  8. Paleiskite „Python“programą „Raspberry Pi“paspausdami F5 mygtuką „Python IDLE“įrankių juostoje
  9. Grįžkite į HTML kliento programos valdymo skydelį (2 veiksmas) ir spustelėkite mygtuką (pvz., Įjungti arba padidinti garsumą)

Jei sistema nustatyta teisingai, turėtumėte turėti galimybę savo telefone ar planšetiniame kompiuteryje atverti HTML kliento puslapį ir valdyti savo prietaisą mygtukais, esančiais HTML kliento puslapyje.

9 žingsnis: Sistema veikia

Veikianti sistema
Veikianti sistema
Veikianti sistema
Veikianti sistema
Veikianti sistema
Veikianti sistema
Veikianti sistema
Veikianti sistema

Aukščiau pateiktuose vaizduose parodyta, kaip namų automatikos sistema veikia, kai ji yra sukonfigūruota.

Nuo tada, kai paskelbiau šį IBLE, išplėtiau sąsają, užfiksuodamas keletą IR kodų iš savo VIZIO LED televizoriaus

Kaip parodyta kartu su gamykliniu televizoriaus nuotolinio valdymo pultu pirmoje vaizdo medžiagoje, keletas pagrindinių šio nuotolinio valdymo pulto funkcijų buvo integruotos į žiniatinklio vartotojo sąsają, prieinamą per mano planšetinį kompiuterį

Vėlesniuose vaizduose planšetinis kompiuteris rodomas pirmame plane, o televizorius gale reaguoja į komandas, išduotas iš žiniatinklio sąsajos:

  1. Maitinimo išjungimo komanda - televizorius išsijungia
  2. Įjungimo komanda - televizorius įsijungia ir įjungus ekraną pasirodo „V“logotipas
  3. Komanda „Nutildyti įjungta“- horizontali juosta pasirodo išjungus garsiakalbį

Visuose bandymuose pilka sritis šalia prietaisų skydelio planšetinio kompiuterio ekrane rodo kliento išduotą komandą ir nuotolinio „SignalR Hub“atsiųstą atsakymą

10 veiksmas: patobulinkite automatikos sistemą ir susijusias pataisas

Šią sistemą galima išplėsti pridedant daugiau kodų, užfiksuotų iš skirtingų sistemų. Nors ši dalis yra lengva, yra dar du veiksniai, į kuriuos turėsite atsižvelgti.

1 patobulinimas (greitas): darbas su skirtingo ilgio IR signalais

  1. Skirtingų sistemų IR kodai yra skirtingo ilgio, net tarp dviejų to paties gamintojo produktų.

    Pavyzdžiui, šiuo atveju LED televizoriaus IR kodo masyvo ilgis yra 67, o „Samsung Sound Bar“- apie 87

  2. Tai reiškia, kad jei pirmiausia įjungčiau garso juostą, „Arduino“eskizo IR buferio masyvas būtų užpildytas IR kodų seka, kurioje yra 87 kodai
  3. Po to, jei įjungčiau LED televizorių, jis užpildytų IR buferio masyvą tik 67 kodais, tačiau likę 20 ankstesnės operacijos kodų vis tiek išliks

Rezultatas? LED televizorius neįsijungia, nes IR kodo buferis buvo sugadintas dėl papildomų 20 kodų, kurie nebuvo išvalyti nuo ankstesnės operacijos!

Ištaisykite 1 (lengva išeitis, nerekomenduojama)

Pakeiskite „Arduino“eskizą taip:

Pakeiskite toliau nurodytus funkcijos iškvietimus ciklo () {} funkcijoje

sendIRCode ();

perduotiIRCode (c);

Pakeiskite pirmiau nurodytos funkcijos parašą:

void transferIRCode (int codeLen) {// RAWBUF konstanta pakeista codeLen IRTransmitter. IRSendRaw:: send (IRCodeBuffer, codeLen, 38); }

Nors tai lengva, masyvas iš tikrųjų niekada nėra visiškai išvalytas, todėl tai nėra labai švarus sprendimas

2 pataisymas (nėra sunku, rekomenduojama)

Paskelbkite papildomą kintamąjį pačiame „Arduino“eskizo viršuje, po komentarų skyriaus:

unsigned int EMPTY_INT_VALUE;

Pridėkite tai prie sąrankos () funkcijos viršaus:

// Užfiksuoti tuščią nepasirašytą sveikų skaičių kintamojo natūralią būsenąEMPTY_INT_VALUE = IRCodeBuffer [0];

Slinkite žemyn ir pridėkite naują funkciją prie eskizo iškart po funkcijos „sendIRCode ()“:

void clearIRCodeBuffer (int codeLen) {// Išvalyti visus kodus iš masyvo // PASTABA: masyvo elementų nustatymas į 0 nėra sprendimas! for (int i = 1; i <= codeLen; i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE;}}

Galiausiai iškvieskite naują funkciją aukščiau šioje kilpos () funkcijos vietoje:

// Atstatyti - tęsti skaitymą „Serial PortclearIRCodeBuffer“(c);…

Tai yra švaresnis metodas, nes iš tikrųjų iš naujo nustatomos visos IR buferio masyvo vietos, kuriose buvo įrašytas naujausias IR kodo signalas, nieko nepaliekant atsitiktinumui.

2 patobulinimas (daugiau dalyvauja): pakartotinis IR signalo perdavimas tam tikriems įrenginiams

Norint atsakyti į kai kuriuos įrenginius, tas pats signalas turi būti perduodamas kelis kartus Pavyzdys: Tokiu atveju „Samsung Sound Bar“reikalauja, kad tas pats kodas būtų siunčiamas du kartus su 1 sekundės pertrauka

„Fix in Concept“čia buvo aptartas, nes jis yra šiek tiek daugiau įtrauktas ir jį reikės išbandyti

Jei pridėsite pakartojimo funkciją prie „Ardunio“eskizo, turėsite blykstelėti eskizą kiekvieną kartą, kai prie savo namų automatizavimo sistemos pridedate naują įrenginį

Vietoj to, pridėjus šį pataisą prie „HTML SignalR“kliento ir „Python SignalR Service“programos, sprendimas tampa daug lankstesnis. Ir tai iš esmės būtų galima pasiekti taip:

Pakeiskite „SignalR“HTML klientą, kad „Hub“perduotų pakartotinę informaciją

Atidarykite index.html ir įterpkite pakartojimo reikšmę į HTML mygtuką taip:

value = "SMSNG-SB-PWR-ON" taptų value = "SMSNG-SB-PWR-ON_2_1000"

Kur 2 yra pakartojimo vertė, o 1000 yra delsos vertė milisekundėmis tarp dviejų pakartojimo signalų

Kai spustelėsite šį mygtuką, „SignalR“koncentratorius gaus rakto kodą+„Repeat_Spec“

Pakeiskite „SignalR“serverio metodus, kad išanalizuotumėte tik pagrindinį kodą:

  • Naudokite rakto kodą, kad gautumėte IR kodą iš duomenų bazės, kaip įprasta
  • Kaip įprasta, perduokite „SingalR“klientams raktinį kodą+„Repeat_Spec“ir IRCode

Pakeiskite „Python SignalR Service“programą, kad perduotumėte signalus naudodami kartojimo vertes:

Atidarykite „Python“klientą ir pakeiskite šias dvi funkcijas:

def print_command_from_hub (buttonId, cmdSrc):

# analizuokite kartojimo kodą iš „buttonId“vertės

def sendToArduino (IRSignalCode, delim, endPrefix):

# nustatykite tam tikrą laiką arba kad ciklas perduotų signalą norimu dažniu

  • Tokiu būdu „Arduino“nereikia pakartotinai blykstelėti
  • Į šią sistemą gali būti įtrauktas bet koks kartotinių dažnių skaičius
  • Be to, jei naudojate UNO, eskizo dydis gali būti ribotas!

11 veiksmas: žinomos problemos ir saugumo problemos

Kaip ir sistemų, sukurtų pirmą kartą, atveju, ši turi keletą problemų, kurios išryškėjo bandymo metu.

1 problema. Greitai paleidus komandas, kai tarp mygtukų paspaudimų vėluojama mažiau nei sekundę, sistema nereagavo, kai atsakė pirmuosius porą kartų.

  • Iš naujo paleidus „Python SignalR“klientą, sistema vėl tampa įprasta
  • Neatidėliotinas sprendimas gali būti pašalinti nepageidaujamus derinimo išėjimus abiejuose „Python SignalR Client“ir „Arduino Sketch“ir pakartoti šiuos testus
  • Kita vieta, į kurią reikia atkreipti dėmesį, būtų pati serijinė komunikacija - ar būtų galima pridėti kodą, kad greitai išplautų buferį?

Tačiau pastebėjau, kad mano televizorius blogai reaguoja į gamyklinį nuotolinio valdymo pultą - todėl pats televizoriaus IR ryšio pobūdis taip pat gali būti svarbus veiksnys.

2 problema: HTML ekranas nustoja reaguoti į mygtukų paspaudimus po ilgo neveiklumo

Paprastai atnaujinus puslapį šis elgesys išsprendžiamas, tačiau tokio elgesio priežastis vis dar neaiški

SAUGUMO RŪPES

Ši sistema sukurta naudoti tik vietiniame (namų) tinkle ir neturi tinkamų apsaugos priemonių, kuriomis būtų galima naudotis internetu

Todėl rekomenduojama, kad „SignalR Hub“būtų įdiegtas į vietinį kompiuterį jūsų vietiniame/namų tinkle

Dėkojame, kad perskaitėte mano IBLE ir tikiuosi, kad jums bus smagu!

Rekomenduojamas: