Sisällysluettelo:

Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 vaihetta (kuvilla)
Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 vaihetta (kuvilla)

Video: Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 vaihetta (kuvilla)

Video: Raspberry Pi-Arduino-SignalR Home Automation Hub: 11 vaihetta (kuvilla)
Video: 2018-11-20 Learning SignalR - Home Automation with .NET Core and Hubitat 2024, Kesäkuu
Anonim
Raspberry Pi-Arduino-SignalR Home Automation Hub
Raspberry Pi-Arduino-SignalR Home Automation Hub

Muutaman täällä ja täällä julkaistun IBLE -esipuheeni jälkeen tämä projekti ottaa ensimmäisen askeleen kohti perusversion rakentamista toimivasta Home Automation Hubista.

Olen käyttänyt useita erilaisia tekniikoita pyrkiäkseni ymmärtämään, kuinka voin ehkä käyttää kaikkia aiemmin oppiani asioita ja uusia asioita, joita opin edelleen päivien edetessä.

Siksi tämä automaatiokeskus koostuu seuraavista osista:

SQL Server 2012 -tietokanta, joka:

  • tallentaa luettelon ennalta määritetyistä infrapuna (IR) koodeista taulukkoon yhdessä ainutlaatuisen "koodiavaimen" kanssa
  • koodiavaimet nimetään intuitiivisesti (käyttäjän toimesta), jotta voidaan tunnistaa niihin liittyvien IR -koodien tarkoitus

Reaaliaikainen ASP. NET SignalR Hub -sovellus, joka:

  • odottaa ja vastaanottaa "koodiavaimia" komentoina käyttäjältä, joka kohtaa HTML -asiakkaan
  • kun se vastaanotetaan, muodostaa yhteyden SQL -tietokantaan ja hakee IR -koodin mukana toimitetulla koodiavaimella
  • välittää haetun IR -koodin Python SignalR -asiakkaalle

Käyttäjä edessään HTML SignalR Dashboard -asiakas, joka:

  • välittää ainutlaatuisen koodiavaimen Hubille jQuery SignalR Client -sovellusliittymien kautta
  • jokainen hallintapaneelin painike edustaa ainutlaatuista koodiavainta, joka on tallennettu SQL -tietokantataulukkoon

Raspberry Pi 2.0: lla toimiva Python SignalR -taustapalvelusovellus, joka:

  • vastaanottaa IR -koodeja komennoina Hubilta
  • etsii erottimia IR -koodista ja jakaa erittäin pitkän koodin osiin
  • kommunikoi sarjaportin kautta Arduinolle ja kirjoittaa jokaisen segmentin ulos peräkkäin

Arduino IR -lähettimen luonnos, joka:

  • odottaa ja vastaanottaa jokaisen IR -koodisegmentin sarjaportin kautta
  • kokoaa koodisegmentit IR -koodipuskurimatriisiksi
  • pakkaa puskurin IR -lähetyskomentoon IRLib Arduino -kirjaston avulla

Jos kohdelaite on IR -lähettimen läheisyydessä, laite (voi) reagoida Arduinon lähettämään IR -signaaliin

HUOMAUTUS

Vaikka tässä esittelyssä käyttämäni kohdelaite reagoi IR -signaaleihin, saatat haluta lukea tämän toisen IBLE: n osion syistä, joiden vuoksi sanon, että laite (saattaa) reagoida IR -signaaliin.

Aika rullata.

Vaihe 1: Mitä tarvitset, ennen mitä tarvitset

Mitä tarvitset, ennen kuin tarvitset
Mitä tarvitset, ennen kuin tarvitset
Mitä tarvitset, ennen kuin tarvitset
Mitä tarvitset, ennen kuin tarvitset
Mitä tarvitset, ennen kuin tarvitset
Mitä tarvitset, ennen kuin tarvitset

Tämä opettavainen lähtee liikkeelle joistakin aiemmin tehdyistä töistä, jotka johtivat myös viimeiseen IBLEni.

Joten ennen kuin astumme siihen, mitä tarvitsemme tätä IBLE: tä varten, on suositeltavaa, että luet tämän ohjeen jonkin verran taustaa varten:

  1. Arduino IRLib -infrapunakirjasto perustettiin
  2. Tässä IBLE: ssä käytetyt IR -koodit kaapattiin IR -vastaanottimella
  3. Miten kaapattuja IR -koodeja käytettiin kohdelaitteen ohjaamiseen IR -lähettimen kautta

Tämän IBLE: n valmistumisen jälkeen otin käyttöön ASP. NET IR Code Recorder -sovelluksen, joka

  • Hyväksy kaapattu IR -koodi ja intuitiivisesti nimetty koodiavain verkkolomakkeen syötteinä
  • Jaa erittäin pitkä IR -koodi alle 64 merkin pituisiin segmentteihin, jotta pysyt Arduino Unon sarjapuskurirajan alapuolella
  • Koodien viimeinen segmentti on ennalta kiinnitetty kirjaimella "E", joka osoittaa Arduinolle, että se on vastaanottanut koodin viimeisen segmentin
  • Jokainen segmentti erotetaan putkierottimella ennen kuin se kootaan takaisin pitkäksi merkkijonoksi
  • Lopuksi segmentoitu IR -koodi ja sen koodiavain tallennettiin SQL Server 2012 -tietokantaan

Tämä SQL -tietokanta muodostaa yhden tässä IBLE: ssä kehitetyn Home Automation Hub -komponentin osista.

HUOMAUTUS

IR Code Recorder -sovellus ei ole osa keskustelua seuraavista syistä:

  • Voit kaapata koodit manuaalisesti Arduino Sketchin avulla, jakaa ne putkikohtaisesti erotettuihin osiin ja tallentaa ne tietokantaan ilman, että sinun tarvitsee rakentaa monimutkaista verkkosovellusta
  • Toisin kuin tämä IBLE, IR -tallennin keskittyy käänteiseen viestintään Arduinosta Raspberry Pi: hen

Siksi tämän hankkeen yksityiskohdat olisivat toisen IBLE: n aihe

Vaihe 2: Mitä tarvitset - laitteisto

Mitä tarvitset - laitteisto
Mitä tarvitset - laitteisto
Mitä tarvitset - laitteisto
Mitä tarvitset - laitteisto

Toimiva Raspberry Pi 2.0 - Suosittelen Ubuntu Mate -ohjelmiston asentamista, koska siinä on runsaasti ominaisuuksia, kuten OpenLibre Office, joka muuten oli välttämätön tämän ohjeen dokumentoinnissa, siellä Raspberry Pi -laitteessa.

Lisäksi, Pi, tarvitset seuraavat ulkoiset osat:

  • Arduino Unon prototyyppialusta tai klooni
  • IR -lähettimen LED - Käytin tuotemerkkiä nimeltä Three Legs Amazon.com -sivustolta
  • 330 tai 220 ohmin vastukset-käytin 220 (värikoodi punainen-punainen-ruskea), koska minulla oli useita käteviä
  • Tavallinen leipälevy, liittimet ja tietokone, johon on asennettu Arduino Environment
  • Testiehdokas - kuten kaikkialla läsnä oleva Samsungin LED -näyttö kauko -ohjaimella

Vaihe 3: Mitä tarvitset - ohjelmisto

Jotta kaikki osat saadaan yhteen, seuraava ohjelmistoasennus on asennettava ja suoritettava:

Raspberry Pi -laitteeseen sinun on asennettava seuraavat:

  • Arduino IDE - käytettiin luonnoksen rakentamiseen ja sen välittämiseen UNO: lle
  • Python -moduuli Arduinolle - sarjaliikenteelle UNO: n ja Pi: n välillä
  • Python SignalR -asiakaskirjasto - Voit katsoa ohjeita täältä

Windows -kone, johon on asennettu seuraava kehitysympäristö:

  • Ilmainen Microsoft Visual Studio Express 2013 -versio SignalR Hub- ja Web -asiakassovelluksen rakentamiseen
  • Ilmainen SQL Server 2012 Express -versio taustatietokannan suunnitteluun ja rakentamiseen

Windows Internet Information Server (IIS) -isäntäympäristö:

  • Kun SignalR Hub ja Web -asiakas on rakennettu ja testattu, se on otettava käyttöön paikallisessa IIS -palvelimessa
  • Minun tapauksessani aion käyttää kotiverkossani vanhaa kannettavaa tietokonetta, jossa on Windows 7 ja IIS

HUOMAUTUS

Kaikki ohjeet koskevat Python 2.7.x -versiota. Versio 3.0 saattaa vaatia uudelleenkirjoituksia

Vaihe 4: SQL Server -tietokanta

SQL Server -tietokanta
SQL Server -tietokanta

Liitteenä oleva kaavio esittää tässä sovelluksessa käytetyn perus SQL Server -tietokannan rakenteen ja sisältää vain kaksi taulukkoa.

Taulukko AutoHubCode

Tämän taulukon kaksi tärkeää saraketta ovat:

AutoCodeKey - tallentaa koodiavaimen käyttäjäystävällisen nimen

Jokainen koodiavain lähetetään automaatioasiakkaalta - meidän tapauksessamme HTML -painike verkkosivulta

AutoCodeVal - tallentaa raa'an IR -koodisekvenssin

Tämä on todellinen IR -koodi, jonka SignalR Hub lähettää takaisin asiakkaalle

Tässä tapauksessa Python -asiakas, joka on jatkuvasti yhteydessä Hubiin, vastaanottaa IR -koodisekvenssin ja lähettää sen sarjaportin kautta Arduinon UNO: lle

Taulukko AutoHubLog

  • Kirjaa automaatioasiakkaan pyytämän koodin.
  • Tämä on toimenpide, jolla seurataan kuka ja milloin käytti järjestelmää ja mitä koodia pyydettiin

Kuten mainitsin, olen käyttänyt SQL Server 2012: ta valittuna tietokanta -alustana. Voit luoda tämän yksinkertaisen mallin uudelleen eri tietokantaympäristössä, kuten MySQL, Oracle jne.

Siitä huolimatta SQL -komentosarja tämän tietokannan luomiseksi on liitetty tähän

HUOMAUTUS

  1. SignalR Hubin koodi on suunniteltu muodostamaan yhteys SQL Server 2012 -tietokantaan
  2. Toisen tietokannan käyttö merkitsisi Hubin muuttamista käyttämään eri tietokanta -ohjainta

Vaihe 5: ASP. NET SignalR Hub -sovellus

ASP. NET SignalR Hub -sovellus
ASP. NET SignalR Hub -sovellus
ASP. NET SignalR Hub -sovellus
ASP. NET SignalR Hub -sovellus

ASP. NET SignalR Hub -verkkosovellus koostuu yhdessä seuraavista osista, jotka on esitetty liitteenä olevassa kaaviossa:

Osa 1 - SignalR Hub, joka vastaanottaa asiakkaalta pyyntöjä ja vastaa niihin

Osat 2, 4 - HTML -asiakassivusto ja sen tyylitaulukko muodostavat yhdessä automaatiojärjestelmän käyttöliittymän ja antavat komentoja Automation Hubille

Osa 3 - jQuery SignalR -sovellusliittymät, joita HTML -asiakas käyttää kommunikoidakseen Automation Hubiin

Osa 5 - SignalR Hub ei kommunikoi suoraan tietokantaan. Se tekee sen väliluokkien avulla, jotka on luotu käyttämällä Entity Framework -kehystä

Nämä luokat abstraktoivat tietokannan tiedot käyttöliittymästä

Osa 6 - Tietokanta -palveluluokka, joka auttaa suorittamaan luku- ja kirjoitusoperaatioita SQL -tietokannassa (kuvattu aiemmin) käyttämällä Entity Framework -luokkia

ASP. NET ja SignalR ovat Microsoftin teknologioita, ja tämä opetusohjelma opastaa yksinkertaisen SignalR -sovelluksen rakentamisessa ja käyttöönotossa.

Se, mitä olen rakentanut tänne, perustuu opetusohjelmasta hankittuihin perusasioihin. Kun sovellus on otettu käyttöön, sen pitäisi näyttää samanlaiselta kuin toisessa kuvassa näkyvä verkkosivu

HUOMAUTUS KOODISTA

Liitteeseen on liitetty ZIP -tiedosto, joka sisältää koodin poistetun version

Kansiorakenne on visualisoinnin mukainen - kaikki kehysluokat ja jQuery -komentosarjat on kuitenkin poistettu liitteen koon pienentämiseksi

Suosittelemme, että tätä koodia käytetään oppaana, koska kun luot uuden SignalR -verkkosovelluksen yllä olevan opetuslinkin kautta, uusimmat jQuery -kirjastot ja ASP. NET -kehysluokat lisätään automaattisesti

Myös index.html -sivun viittaukset jQuery -komentosarjoihin on muutettava vastaamaan jQuery SignalR -asiakirjakirjastojen uusinta versiota, joka lisätään automaattisesti Web -sovellusta luotaessa.

Lopuksi yhteysmerkkijono on muutettava vastaamaan tietokantaa tiedostoissa, joiden nimi on Web.config*

Vaihe 6: Python SignalR Service Client

Python SignalR -palvelun asiakas
Python SignalR -palvelun asiakas

Vaikka HTML SignalR Client on käyttöliittymä edestä päin, Python Client on palvelusovellus, jonka päätehtävä on vastaanottaa Hubin lähettämä IR -koodi ja reitittää se Arduino UNO: lle sarjaliikenteen kautta.

Liitteenä oleva koodi on itsestään selvä ja se on dokumentoitu riittävän hyvin kuvaamaan sen toimivuutta

Kuten yhdistetystä ruutukaaviosta näkyy, HTML -asiakas ja Python Service -asiakas kommunikoivat SignalR Hubin kautta seuraavasti:

  1. Automaatiojärjestelmän käyttäjä antaa komennon Hubille painikkeen napsautuksella
  2. Jokainen painike liittyy IR -avainkoodiin, ja kun sitä napsautetaan, tämä koodi lähetetään Hubiin
  3. Hub vastaanottaa tämän koodin, muodostaa yhteyden tietokantaan ja hakee raa'an IR -signaalikoodin ja lähettää sen takaisin kaikille yhdistetyille asiakkaille

    Samanaikaisesti Hub kirjaa merkinnän AutoHubLog -tietokantataulukkoon, joka tallentaa koodin ja päivämäärän ja kellonajan, jolloin etäasiakkaat pyysivät sitä

  4. Python -palveluasiakas vastaanottaa IR -koodin ja välittää sen Arduino UNO: lle jatkokäsittelyä varten

Vaihe 7: Arduino UNO IR -lähetysluonnos ja koodi

Arduinon UNO IR -lähetysluonnos ja koodi
Arduinon UNO IR -lähetysluonnos ja koodi
Arduinon UNO IR -lähetysluonnos ja koodi
Arduinon UNO IR -lähetysluonnos ja koodi
Arduinon UNO IR -lähetysluonnos ja koodi
Arduinon UNO IR -lähetysluonnos ja koodi

Visuaalissa esitetty Arduino -piiri on melko yksinkertainen tälle järjestelmälle, ja siksi se kuvataan lyhyesti:

  • Väritön IR -LED on kytkettävä UNO: n digitaaliseen PIN 3: een - tämä on IRLib Arduino -kirjaston vaatimus
  • Syyt on kuvattu aikaisemmassa IBLE -kalenterini kloonauksessa IRLib -kirjastoon liittyvässä osiossa
  • Digitaaliseen PIN 4 -laitteeseen liitetty vihreä LED on visuaalinen ilmaisin, joka syttyy, kun UNO on vastaanottanut kaikki IR -koodin osat Raspberry Pi -laitteella toimivalta Python -asiakkaalta.
  • Tämän LED -valon syttyminen vahvistaa, että sarjaliikenne Raspberry Pi: n ja UNO: n välillä toimii
  • Jotta sarjaliikenne voidaan ottaa käyttöön, UNO on kytketty Raspberry Pi -laitteeseen USB -portin kautta
  • Liitteenä oleva Arduino -luonnos on kommentoitu riittävästi kuvaamaan sen toimintaa
  • Koodin yläosassa olevat kommentit kuvaavat myös, kuinka piiri on kytkettävä

HUOMAUTUS

Käytännössä Arduino ja Pi voitaisiin yhdistää yhdessä USB -keskittimeen, joka on tarpeeksi vahva ajamaan Pi: tä, Arduinoa ja lähettämään myös voimakkaan signaalin IR -LED -valon kautta

Vaihe 8: Järjestelmän kytkeminen ja testaus

Järjestelmän kytkeminen ja testaaminen
Järjestelmän kytkeminen ja testaaminen
Järjestelmän kytkeminen ja testaaminen
Järjestelmän kytkeminen ja testaaminen
Järjestelmän kytkeminen ja testaaminen
Järjestelmän kytkeminen ja testaaminen
  1. Luo ja ota käyttöön ASP. NET SignalR Hub, HTML -asiakas yhdessä SQL Server 2012 -tietokannan kanssa paikallisen kotiverkon Internet Information Server (IIS) -palvelimeen
  2. Pääset verkkosovellukseen avaamalla HTML SignalR -asiakas HTTP: n kautta

    Tämän sivun URL -osoite olisi tyypillisesti https:// tietokoneesi: portin_numero/

  3. Napsauta ohjauspaneelin painiketta, ja jos sovellus on otettu käyttöön oikein, Hub vastaa palauttamalla IR -koodin ja näyttämällä sen ohjauspaneelin vieressä olevassa harmaassa paneelissa

    Muistaa! Sinun on ladattava koodit tietokantaasi määrittämällä infrapunavastaanotinkirjasto ja tallentamalla koodit edellisen IBLE: n mukaisesti

  4. Liitä Arduino Raspberry Pi: hen USB: n kautta - avaa Arduino IDE Pi: llä ja varmista, että UNO voi muodostaa yhteyden Pi: hen

    näiden Arduino -opetusartikkelien pitäisi auttaa sinua pääsemään tähän melko nopeasti

  5. Avaa Python -koodi ja tee seuraavat muutokset ympäristösi mukaan

    • UNO: n sarjaporttiosoite, joka on saatu vaiheessa 4
    • SignalR -keskittimen URL -osoite, joka vastaa paikallista URL -osoitettasi vaiheessa 2 - tässä esimerkissä se olisi https:// yourComputer: port_number/signalr
  6. Avaa lopuksi Arduino -luonnos Raspberry Pi: n Arduino IDE -laitteessa ja välitä se UNO: lle
  7. Aseta leipälauta, joka pitää piirin lähellä ohjattavaa laitetta - IR -LEDillä on oltava selkeä näkökenttä laitteen IR -vastaanottimen portin kanssa
  8. Käynnistä Python -ohjelma Raspberry Pi -laitteella painamalla F5 -painiketta Python IDLE -työkalurivillä
  9. Palaa HTML -asiakasohjelman Ohjauspaneeliin (vaihe 2) ja napsauta painiketta (kuten virta päälle tai äänenvoimakkuuden lisäys)

Jos järjestelmä on asennettu oikein, sinun pitäisi pystyä avaamaan puhelimen tai tabletin HTML -asiakassivu ja ohjaamaan laitettasi HTML -asiakassivusi painikkeilla.

Vaihe 9: Järjestelmä toiminnassa

Järjestelmä toiminnassa
Järjestelmä toiminnassa
Järjestelmä toiminnassa
Järjestelmä toiminnassa
Järjestelmä toiminnassa
Järjestelmä toiminnassa
Järjestelmä toiminnassa
Järjestelmä toiminnassa

Yllä olevat grafiikat osoittavat kodin automaatiojärjestelmän toiminnassa asennuksen jälkeen.

Tämän IBLE: n julkaisemisen jälkeen olen laajentanut käyttöliittymää kaappaamalla muutamia IR -koodeja VIZIO LED -televisiostani

Kuten tehtaan TV Remote -kaukosäätimen vieressä näkyy ensimmäisessä visualisoinnissa, muutamia tämän kauko -ohjaimen olennaisia toimintoja on sisäänrakennettu tabletin kautta käytettävään Web -käyttöliittymään

Myöhemmissä kuvissa tabletti näkyy etualalla ja televisio takana vastaa Web -käyttöliittymän antamiin komentoihin:

  1. Virta POIS -komento - TV sammuu
  2. Virtakytkin - TV käynnistyy ja "V" -logo tulee näkyviin, kun näyttö käynnistyy
  3. Mykistys ON -komento - Vaakasuora palkki tulee kaiuttimen mykistyksen kohdalle

Kaikissa testeissä tabletin näytön kojelaudan vieressä olevalla harmaalla alueella näkyy asiakkaan antama komento ja etäsignaalikeskuksen lähettämä vastaus.

Vaihe 10: Automaatiojärjestelmän ja siihen liittyvien korjausten parantaminen

Tätä järjestelmää voidaan laajentaa lisäämällä lisää eri järjestelmistä kaapattuja koodeja. Vaikka tämä osa on helppo, sinun on otettava huomioon kaksi muuta tekijää.

Parannus 1 (nopea): Eripituisten IR -signaalien kanssa työskentely

  1. Eri järjestelmien IR -koodeja on eripituisia, jopa kahden saman valmistajan tuotteen välillä.

    Esimerkiksi tässä tapauksessa LED -TV: n IR -koodimatriisin pituus on 67 ja Samsungin äänipalkin noin 87

  2. Tämä tarkoittaa, että jos otan Soundbarin ensin käyttöön, Arduino -luonnoksen IR -puskuriryhmä täytetään 87 koodia sisältävällä IR -koodisekvenssillä
  3. Tämän jälkeen jos otan LED -television käyttöön, se täyttää IR -puskuriryhmän vain 67 koodilla, mutta jäljellä olevat 20 koodia edellisestä toiminnosta ovat edelleen

Lopputulos? LED -TV ei käynnisty, koska IR -koodipuskuri on korruptoitunut 20 ylimääräisen koodin takia, joita ei ole puhdistettu edellisestä toiminnosta!

Korjaa 1 (helppo tie, ei suositella)

Muuta Arduino -luonnosta seuraavasti:

Muuta seuraavia funktiokutsuja silmukan () {} -funktiossa

lähetysIRCode ();

lähettääIRCode (c);

Tee muutokset yllä olevan toiminnon allekirjoitukseen:

void lähetysIRCode (int -koodiLen) {// RAWBUF -vakio korvataan koodillaLen IRTransmitter. IRSendRaw:: lähetä (IRCodeBuffer, codeLen, 38); }

Vaikka tämä on helppoa, ryhmä ei koskaan todellakaan tyhjene kokonaan, joten tämä ei ole kovin puhdas ratkaisu

Korjaa 2 (ei kovaa, suositellaan)

Ilmoita lisämuuttuja Arduino -luonnoksen yläosassa kommenttien jälkeen:

unsigned int EMPTY_INT_VALUE;

Lisää tämä setup () -toiminnon alkuun:

// Kaappaa tyhjän allekirjoittamattoman kokonaislukumuuttujan luonnollinen tilaEMPTY_INT_VALUE = IRCodeBuffer [0];

Vieritä alas ja lisää luonnokseen uusi toiminto heti lähetyksenIRCode () -toiminnon jälkeen:

void clearIRCodeBuffer (int codeLen) {// Tyhjennä kaikki koodit taulukosta // HUOMAUTUS: taulukkoelementtien asettaminen arvoon 0 ei ole ratkaisu! for (int i = 1; i <= codeLen; i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE;}}

Kutsu lopuksi uusi toiminto yllä olevaan silmukka () -funktion seuraavaan paikkaan:

// Nollaa - Jatka lukemista Serial PortclearIRCodeBuffer (c);…

Tämä on puhtaampi lähestymistapa, koska se itse asiassa nollaa kaikki IR -puskuriryhmän sijainnit, jotka on täytetty viimeisimmällä IR -koodisignaalilla jättämättä mitään sattuman varaan.

Parannus 2 (enemmän mukana): Toistuva IR -signaalin lähetys tietyille laitteille

Jotkin laitteet tarvitsevat saman signaalin lähettämisen useita kertoja vastatakseen Esimerkki: Tässä tapauksessa Samsung Sound Bar vaatii saman koodin lähettämisen kahdesti 1 sekunnin välein

Fix in Concept on käsitelty täällä, koska se on hieman enemmän mukana ja vaatii testausta

Toistotoiminnon lisääminen Ardunio Sketchiin tarkoittaa, että sinun täytyy vilkuttaa luonnos aina, kun lisäät uuden laitteen kodin automaatiojärjestelmään

Sen sijaan tämän korjauksen lisääminen HTML SignalR -asiakkaaseen ja Python SignalR Service -sovellukseen tekee ratkaisusta paljon joustavamman. Ja tämä voidaan saavuttaa periaatteessa seuraavasti:

Muokkaa SignalR HTML -asiakasohjelmaa välittääksesi toistotietoja Hubille

Avaa index.html ja upota toistoarvo HTML -painikkeeseen seuraavasti:

value = "SMSNG-SB-PWR-ON" muuttuisi value = "SMSNG-SB-PWR-ON_2_1000"

Missä 2 on toistoarvo ja 1000 on viivearvo millisekunteina kahden toistosignaalin välillä

Kun napsautat tätä painiketta, SignalR -keskus saa avainkoodin+Repeat_Spec

Muokkaa SignalR -palvelinpuolen menetelmiä jäsentääksesi vain avainkoodin:

  • Nouda IR -koodi tietokannasta tavallisesti avainkoodilla
  • Lähetä avainkoodi+Repeat_Spec ja IRCode SingalR -asiakkaille tavalliseen tapaan

Muokkaa Python SignalR Service -sovellusta lähettämään signaaleja uusinta -arvoja käyttäen:

Avaa Python -asiakas ja muokkaa seuraavia kahta toimintoa:

def print_command_from_hub (buttonId, cmdSrc):

# jäsentää toistokoodin buttonId -arvosta

def sendToArduino (IRSignalCode, delim, endPrefix):

# Aseta hetki tai silmukka signaalin lähettämiseksi halutulla taajuudella

  • Tällä tavalla Arduinoa ei tarvitse vilkuttaa toistuvasti
  • Tähän järjestelmään voitaisiin rakentaa mikä tahansa määrä toistotaajuuksia
  • Sitä paitsi, jos käytät UNO: ta, luonnoksesi koko voi kasvaa!

Vaihe 11: Tunnetut ongelmat ja turvallisuusongelmat

Kuten ensimmäistä kertaa rakennettujen järjestelmien tapauksessa, tässä on pari ongelmaa, jotka ilmenivät testauksen aikana.

Ongelma 1: Kun komennot käynnistetään nopeasti peräkkäin ja alle sekunnin viive painikkeiden napsautusten välillä, järjestelmä ei reagoi muutaman ensimmäisen kerran vastaamisen jälkeen.

  • Python SignalR -asiakasohjelman uudelleenkäynnistys palauttaa järjestelmän normaaliin toimintaan
  • Välittömät ratkaisut voivat olla poistaa ei -toivotut virheenkorjausulostulot molemmista, Python SignalR Clientista ja myös Arduino Sketchistä, ja toistaa nämä testit
  • Toinen paikka tarkastella olisi itse sarjaliikenne - olisiko mahdollista lisätä koodia puskurin nopeaan huuhtelemiseen?

Olen kuitenkin huomannut, että televisioni ei reagoi hyvin tehtaan kaukosäätimeen - siksi televisioni IR -viestinnän luonne voi olla myös vaikuttava tekijä.

Ongelma 2: HTML -näyttö lakkaa vastaamasta painikkeiden napsautuksiin pitkän käyttämättömyyden jälkeen

Yleensä sivun päivittäminen ratkaisee tämän ongelman - syy tähän on kuitenkin edelleen epäselvä

TURVALLISUUSHUOLTA

Tämä järjestelmä on suunniteltu vain paikalliseen (koti) verkkokäyttöön, eikä sillä ole tarvittavia turvatoimia Internetin käyttöä varten

Siksi on suositeltavaa, että SignalR Hub asennetaan paikalliseen tietokoneeseen paikallisessa/kotiverkossa

Kiitos IBLEn lukemisesta ja toivon, että pidät hauskaa!

Suositeltava: