Mündəricat:

Raspberry Pi-Arduino-SignalR Ev Avtomatlaşdırma Mərkəzi: 11 addım (şəkillərlə)
Raspberry Pi-Arduino-SignalR Ev Avtomatlaşdırma Mərkəzi: 11 addım (şəkillərlə)

Video: Raspberry Pi-Arduino-SignalR Ev Avtomatlaşdırma Mərkəzi: 11 addım (şəkillərlə)

Video: Raspberry Pi-Arduino-SignalR Ev Avtomatlaşdırma Mərkəzi: 11 addım (şəkillərlə)
Video: I love my Flipper Zero. 2024, Iyul
Anonim
Raspberry Pi-Arduino-SignalR Ev Avtomatlaşdırma Mərkəzi
Raspberry Pi-Arduino-SignalR Ev Avtomatlaşdırma Mərkəzi

Burada və burada dərc edilmiş bir neçə IBLE -dən sonra bu layihə, funksional Ev Avtomatlaşdırma Qovşağının əsas versiyasını yaratmaq üçün ilk addımı atır.

Keçmişdə öyrəndiklərimi və günlər keçdikcə öyrənməyə davam etdiyim yeni şeyləri necə istifadə edə biləcəyimi anlamaq üçün bir neçə fərqli texnologiyadan istifadə etdim.

Buna görə də, bu Avtomatlaşdırma Mərkəzi aşağıdakı komponentlərdən ibarətdir:

SQL Server 2012 verilənlər bazası:

  • unikal bir "kod açarı" ilə birlikdə əvvəlcədən təyin edilmiş İnfraqırmızı (IR) kodlarının siyahısını bir cədvəldə saxlayır.
  • əlaqəli IR kodlarının məqsədini müəyyən etmək üçün kod düymələri intuitiv olaraq (istifadəçi tərəfindən) adlandırılmışdır

Real vaxt rejimində ASP. NET SignalR Hub Veb Tətbiqi:

  • HTML müştəri ilə qarşılaşan bir istifadəçidən əmr olaraq "kod açarlarını" gözləyir və alır
  • alındıqda, SQL verilənlər bazasına qoşulur və verilən kod düyməsini istifadə edərək İR Kodunu alır
  • alınan IR kodunu Python SignalR müştərisinə ötürür

HTML SignalR Dashboard müştəri ilə qarşılaşan bir istifadəçi:

  • jQuery SignalR Client API -ləri vasitəsi ilə unikal kod açarını Hub -a ötürür
  • Tablosundakı hər bir düymə, SQL verilənlər bazası cədvəlində qeyd olunan unikal bir kod açarını təmsil edəcək

Raspberry Pi 2.0 üzərində çalışan Python SignalR fon xidməti proqramı:

  • IR kodlarını Hub -dan əmr olaraq alır
  • IR kodunda ayırıcılar axtarır və çox uzun kodu seqmentlərə ayırır
  • Serial portu vasitəsilə Arduino ilə əlaqə qurur və hər seqmenti ardıcıl olaraq yazır

Arduino İQ Verici Eskizi:

  • Serial port üzərindəki hər bir IR kodu seqmentini gözləyir və alır
  • kod seqmentlərini IR Kodu tampon sırasına toplayır
  • tamponu IRLib Arduino kitabxanasından istifadə edərək IR Göndərmə əmrinə yığır

Hədəf cihazı İQ Vericisinin yaxınlığındadırsa, cihaz Arduino tərəfindən verilən İQ siqnalına reaksiya verə bilər.

QEYD

Bu nümayişdə istifadə etdiyim hədəf cihaz IR siqnallarına reaksiya versə də, cihazın İQ siqnalına reaksiya verdiyini söyləməyimin səbəbləri ilə digər IBLE -nin bu hissəsini oxumaq istəyə bilərsiniz.

Yuvarlanma vaxtı.

Addım 1: Ehtiyacınız olan şeydən əvvəl

Ehtiyac duyduğun şeydən əvvəl
Ehtiyac duyduğun şeydən əvvəl
Ehtiyac duyduğun şeydən əvvəl
Ehtiyac duyduğun şeydən əvvəl
Ehtiyac duyduğun şeydən əvvəl
Ehtiyac duyduğun şeydən əvvəl

Bu təlimat, son IBLE ilə nəticələnən əvvəllər görülən işlərin bir hissəsini götürür.

Beləliklə, bu IBLE üçün ehtiyac duyduğumuz şeyə girməzdən əvvəl, bu təlimatı oxuduğunuzu öyrənmək tövsiyə olunur:

  1. Arduino IRLib İnfraqırmızı Kitabxanası quruldu
  2. Bu IBLE -də istifadə olunan IR kodları İR Alıcısı ilə necə ələ keçirildi
  3. İQ ötürücü vasitəsilə hədəf cihazı idarə etmək üçün tutulan IR kodlarının necə istifadə edildiyi

Bu IBLE -nin tamamlanmasından sonra ASP. NET IR Code Recorder veb tətbiqini yerləşdirdim:

  • Tutulan IR Kodunu, intuitiv olaraq adlandırılmış bir kod açarı ilə birlikdə bir veb forması vasitəsi ilə qəbul edin
  • Arduino Uno -nun Serial tampon limiti altında qalmaq üçün çox uzunluqlu IR kodunu 64 simvoldan az olan hissələrə bölün.
  • Kodların son seqmenti, Arduinoya kodun son seqmentini aldığını göstərən "E" işarəsi ilə əvvəlcədən düzəldiləcəkdir.
  • Hər bir seqment uzun bir ipə yığılmadan əvvəl boru ayırıcı ilə ayrılacaqdı
  • Nəhayət, seqmentləşdirilmiş IR kodu, kod açarı ilə birlikdə SQL Server 2012 verilənlər bazasında saxlanıldı

Bu IBLE -də hazırlanmış Ev Avtomatlaşdırma Hubunun komponentlərindən birini təşkil edən bu SQL verilənlər bazasıdır.

QEYD

IR Code Recorder Web tətbiqi aşağıdakı səbəblərə görə burada müzakirənin bir hissəsini təşkil etmir:

  • Arduino Sketch istifadə edərək kodları əl ilə çəkə, boru ilə ayrılmış hissələrə ayıra və ətraflı bir Veb Tətbiqi yaratmadan məlumat bazasında saxlaya bilərsiniz.
  • Bu IBLE -dən fərqli olaraq, IR Recorder Arduino -dan Raspberry Pi -ə tərs ünsiyyətə diqqət yetirir

Buna görə də bu layihə ilə bağlı təfərrüatlar başqa bir IBLE üçün mövzu olacaq

Addım 2: Ehtiyacınız olan - Avadanlıq

Ehtiyacınız olan - Avadanlıq
Ehtiyacınız olan - Avadanlıq
Ehtiyacınız olan - Avadanlıq
Ehtiyacınız olan - Avadanlıq

İşləyən bir Raspberry Pi 2.0 - Ubuntu Mate -i yükləməyi məsləhət görürəm, çünki OpenLibre Office də daxil olmaqla daha zəngin xüsusiyyətlərə malikdir, bu arada Raspberry Pi -də bu təlimatı sənədləşdirməkdə əvəzolunmaz idi.

Əlavə olaraq Pi, aşağıdakı xarici xüsusiyyətlərə ehtiyacınız olacaq:

  • Arduino Uno prototipləşdirmə platforması və ya klon
  • Bir IR ötürücü LED - Amazon.com -dan Üç Ayaq adlı bir markadan istifadə etdim
  • 330 və ya 220 Ohm rezistorlar-bir neçə lazımlı olduğum üçün 220 (rəng kodu qırmızı-qırmızı-qəhvəyi) istifadə etdim.
  • Adi çörək taxtası, bağlayıcılar və Arduino Environment quraşdırılmış bir kompüter
  • Bir test namizədi - məsələn, uzaqdan idarə olunan Samsung LED Monitor

Addım 3: Ehtiyacınız olan - Proqram

Bütün parçaları bir araya gətirmək üçün aşağıdakı proqram təminatının quraşdırılması və işləməsi lazımdır:

Raspberry Pi -də aşağıdakıları quraşdırmalısınız:

  • Arduino IDE - eskizi qurmaq və UNO -ya göndərmək üçün istifadə olunur
  • Arduino üçün Python modulu - UNO ilə Pi arasında serial ünsiyyət üçün
  • Python SignalR müştəri kitabxanası - Burada əlavə olunan təlimatlara müraciət edə bilərsiniz

Aşağıdakı inkişaf mühiti quraşdırılmış bir Windows maşını:

  • SignalR Hub və Web müştəri tətbiqini qurmaq üçün Microsoft Visual Studio Express 2013 -ün pulsuz nəşri
  • SQL Server 2012 Express-in pulsuz versiyası, arxa tərəfdəki verilənlər bazasını tərtib etmək və qurmaq üçün

Windows İnternet Məlumat Serveri (IIS) Hosting mühiti:

  • SignalR Hub və Web müştəri qurulub sınaqdan keçirildikdən sonra onu yerli IIS Serverə yerləşdirmək lazımdır.
  • Mənim vəziyyətimdə ev şəbəkəmdə Windows 7 IIS ilə işləyən köhnə bir dizüstü kompüterdən istifadə etməyi planlaşdırıram

QEYD

Bütün təlimatlar Python 2.7.x versiyasına aiddir. 3.0 versiyası yenidən yazılmasını tələb edə bilər

Addım 4: SQL Server Veritabanı

SQL Server verilənlər bazası
SQL Server verilənlər bazası

Əlavə edilmiş sxem, bu tətbiqdə istifadə olunan əsas SQL Server verilənlər bazasının quruluşunu göstərir və yalnız iki cədvəldən ibarətdir.

AutoHubCode Cədvəli

Bu cədvəldəki iki vacib sütun:

AutoCodeKey - Kod açarının istifadəçi dostu adını saxlayır

Kod düymələrinin hər biri bir avtomatlaşdırma müştərisi tərəfindən ötürülür - bizim vəziyyətimizdə bir Web səhifəsindən HTML düyməsi

AutoCodeVal - xam IR Kodu ardıcıllığını saxlayır

Bu, SignalR Hub tərəfindən müştəriyə cavab olaraq göndərilən faktiki İR kodudur

Bu vəziyyətdə, Hub ilə davamlı ünsiyyətdə olan bir Python müştəri IR kodu ardıcıllığını alır və Serial Port üzərindən Arduino UNO -ya ötürür.

AutoHubLog cədvəli

  • Avtomatlaşdırma müştərisinin tələb etdiyi kodu qeyd edir.
  • Bu sistemin kim tərəfindən və nə vaxt istifadə edildiyini və hansı kodun tələb olunduğunu izləmək üçün bir ölçüdür

Qeyd etdiyim kimi, seçdiyim verilənlər bazası platforması olaraq SQL Server 2012 -dən istifadə etdim. Bu sadə dizaynı fərqli bir verilənlər bazası platformasında, məsələn, MySQL, Oracle və s.

Buna baxmayaraq, bu verilənlər bazasını yaratmaq üçün SQL Script burada əlavə edilmişdir

QEYD

  1. SignalR Hub kodu, SQL Server 2012 verilənlər bazasına qoşulmaq üçün hazırlanmışdır
  2. Fərqli bir verilənlər bazası ilə işləmək, Hub -ı fərqli bir verilənlər bazası sürücüsündən istifadə etmək üçün dəyişdirmək deməkdir

Addım 5: ASP. NET SignalR Hub Veb Tətbiqi

ASP. NET SignalR Hub Veb Tətbiqi
ASP. NET SignalR Hub Veb Tətbiqi
ASP. NET SignalR Hub Veb Tətbiqi
ASP. NET SignalR Hub Veb Tətbiqi

ASP. NET SignalR Hub Veb Tətbiqi birlikdə əlavə edilmiş sxemdə göstərildiyi kimi aşağıdakı komponentlərdən ibarətdir:

Bölmə 1 - Müştəridən sorğu alan və ona cavab verən SignalR Hub

Bölmələr 2, 4 - HTML müştəri veb səhifəsi və Avtomatlaşdırma sisteminin ön hissəsini kollektiv şəkildə meydana gətirən və Otomasiya Qovşuna əmr verən üslub cədvəli

Bölmə 3 - HTML müştəri tərəfindən Avtomatlaşdırma Qovşağı ilə əlaqə yaratmaq üçün istifadə olunan jQuery SignalR API -ləri

Bölmə 5 - SignalR Hub verilənlər bazası ilə birbaşa əlaqə qurmur. Bunu Entity Framework istifadə edərək yaradılan ara siniflər vasitəsilə edir

Bu siniflər, verilənlər bazası məlumatlarını cəbhə tətbiqindən soyutlayır

Bölmə 6 - Entity Framework siniflərindən istifadə etməklə SQL Verilənlər Bazasında Oxu -Yazma əməliyyatlarını (əvvəllər təsvir edilmiş) yerinə yetirməyə kömək edən Database xidmət sinfi

ASP. NET və SignalR, Microsoft texnologiyalarıdır və bu dərslik sizə sadə bir SignalR tətbiqinin necə qurulacağını və necə yerləşdiriləcəyini izah edəcək.

Burada qurduqlarım bu dərslikdən əldə edilən əsaslara əsaslanır. Tətbiq edildikdə, tətbiq ikinci şəkildə göstərilən veb səhifəsinə bənzəməlidir

KODDA QEYD

Kodun silinmiş versiyasını ehtiva edən bir ZIP faylı əlavə edildi

Qovluq quruluşu vizual olaraq göstərildiyi kimidir - lakin bütün çərçivə sinifləri və jQuery skriptləri əlavənin ölçüsünü azaltmaq üçün silinmişdir.

Tövsiyə, bu kodun bir bələdçi olaraq istifadə edilməsidir, çünki yuxarıdakı təlimat bağlantısını izləyərək yeni bir SignalR Web tətbiqi yaratdığınız zaman ən son jQuery kitabxanaları və ASP. NET çərçivə sinifləri avtomatik olaraq əlavə olunacaq.

Ayrıca, index.html səhifəsindəki jQuery skriptlərinə istinadlar, veb tətbiqinizi qurarkən avtomatik olaraq əlavə olunacaq jQuery SignalR müştəri kitabxanalarının son versiyasını əks etdirmək üçün dəyişdirilməlidir.

Nəhayət, Web.config* adlı fayllarda verilənlər bazanıza uyğun olaraq əlaqə simli dəyişdirilməlidir.

Addım 6: Python SignalR Xidmət Müştəri

Python SignalR Xidmət Müştəri
Python SignalR Xidmət Müştəri

HTML SignalR Müştəri ön tərəfə baxan bir İstifadəçi İnterfeysi olsa da, Python Müştəri, əsas funksiyası Hub tərəfindən ötürülən İK Kodunu almaq və Arduino UNO -ya Serial rabitə vasitəsi ilə yönləndirmək olan arxa tərəfli bir xidmət tətbiqidir.

Əlavə edilmiş kod özünü izah edir və funksionallığını təsvir etmək üçün kifayət qədər sənədləşdirilmişdir

Kompozit ekran görüntüsündə göstərildiyi kimi, HTML Müştəri və Python Xidməti müştərisi SignalR Hub vasitəsilə aşağıdakı kimi əlaqə qurur:

  1. Avtomatlaşdırma sisteminin istifadəçisi düyməni basmaqla Hub -a əmr verir
  2. Hər bir düymə IR Açar kodu ilə əlaqələndirilir və tıklandıqda bu kod Hub -a ötürülür
  3. Hub bu kodu alır, verilənlər bazasına qoşulur və xam IR Siqnal kodunu alır və bütün bağlı müştərilərə geri ötürür.

    Eyni zamanda, Hub, AutoHubLog verilənlər bazası cədvəlində kodu və uzaq müştərilər tərəfindən tələb olunduğu tarix və saatı qeyd edən bir giriş qeyd edir

  4. Python xidmət müştərisi IR kodunu alır və sonrakı emal üçün Arduino UNO -ya ötürür

Addım 7: Arduino UNO IR Şanzıman Sketch və Kod

Arduino UNO IR Transmissiya Sketch və Kodu
Arduino UNO IR Transmissiya Sketch və Kodu
Arduino UNO IR Transmissiya Sketch və Kodu
Arduino UNO IR Transmissiya Sketch və Kodu
Arduino UNO IR Transmissiya Sketch və Kodu
Arduino UNO IR Transmissiya Sketch və Kodu

Vizual olaraq göstərildiyi kimi Arduino dövrəsi bu sistem üçün olduqca sadədir və buna görə də qısaca təsvir edilmişdir:

  • Rəngsiz IR LED UNO -da Digital PIN 3 -ə bağlanmalıdır - bu IRLib Arduino kitabxanasının tələbidir
  • Səbəblər, IRLib kitabxanası ilə əlaqəli bölmədə uzaqdan idarəetmə klonlaşdırmaq haqqında əvvəlki IBLE -də təsvir edilmişdir
  • Rəqəmsal PIN 4 -ə qoşulmuş Yaşıl LED, UNO Raspberry Pi üzərində işləyən Python müştərisindən İR Kodunun bütün hissələrini aldıqda yanan vizual bir göstəricidir.
  • Bu LED işığının olması Raspberry Pi ilə UNO arasındakı Serial ünsiyyətin işlədiyini təsdiq edəcək
  • Serial ünsiyyəti təmin etmək üçün UNO, Raspberry Pi -yə USB Portu vasitəsilə qoşulur
  • Əlavə edilmiş Arduino Sketch funksiyasını təsvir etmək üçün kifayət qədər şərh edilmişdir
  • Kodun yuxarı hissəsindəki şərhlər, dövrənin necə bağlanması lazım olduğunu da izah edir

QEYD

Praktiki olaraq, Arduino və Pi birlikdə Pi, Arduino idarə etmək üçün kifayət qədər güclü bir USB mərkəzinə qoşula bilər və həmçinin IR LED vasitəsilə güclü bir siqnal ötürə bilər.

Addım 8: Sistemi bağlayın və sınayın

Sistemin Bağlanması və Test Edilməsi
Sistemin Bağlanması və Test Edilməsi
Sistemin Bağlanması və Test Edilməsi
Sistemin Bağlanması və Test Edilməsi
Sistemin Bağlanması və Test Edilməsi
Sistemin Bağlanması və Test Edilməsi
  1. HTML müştərisi olan ASP. NET SignalR Hub -ı, SQL Server 2012 verilənlər bazası ilə birlikdə yerli ev şəbəkənizdəki İnternet Məlumat Serverinə (IIS) qurun və yerləşdirin.
  2. HTML SignalR müştərisini HTTP üzərindən açaraq veb tətbiqinə daxil olun

    bu səhifənin URL adətən https:// yourComputer: port_number/

  3. İdarəetmə panelindəki bir düyməni basın və tətbiq düzgün yerləşdirilibsə, Hub İK Kodunu qaytararaq idarəetmə panelinə bitişik Boz paneldə göstərərək cavab verəcək.

    Unutma! IR qəbuledici kitabxanasını quraraq və əvvəlki IBLE -də göstərildiyi kimi kodları tutaraq kodları verilənlər bazanıza yükləməlisiniz

  4. Arduino -nu USB vasitəsilə Raspberry Pi -yə qoşun - Pi üzərindəki Arduino IDE -ni açın və UNO -nun Pi ilə əlaqə qura biləcəyinə əmin olun.

    bu Arduino dərs məqalələri buna olduqca tez çatmağınıza kömək etməlidir

  5. Python kodunu açın və mühitinizə uyğun olaraq aşağıdakı dəyişiklikləri edin

    • 4 -cü addımdan əldə etdiyiniz UNO -nun Serial Liman ünvanı
    • 2 -ci addımdakı yerli URL ilə uyğunlaşmaq üçün SignalR mərkəzinin URL'si - bu nümunədə, https:// yourComputer: port_number/signalr
  6. Nəhayət, Raspberry Pi üzərindəki Arduino IDE -də Arduino Sketchini açın və UNO -ya yandırın.
  7. Dövrə tutan çörək lövhəsini idarə ediləcək cihazla yaxın bir yerə qoyun - İQ LED cihazın IR qəbuledici portu ilə aydın bir görüş xəttinə malik olmalıdır.
  8. Python IDLE alətlər çubuğundakı F5 düyməsini basaraq Raspberry Pi üzərində Python proqramını başladın
  9. HTML müştəri proqramının İdarəetmə panelinə qayıdın (Addım 2) və bir düyməni basın (Gücün Açılması və ya Səsin Açılması kimi)

Sistem düzgün qurulubsa, telefonunuzda və ya planşetinizdə HTML müştəri səhifəsini aça və HTML müştəri səhifənizdəki düymələrlə cihazınızı idarə edə bilməlisiniz.

Addım 9: Sistem fəaliyyətdədir

Sistem fəaliyyətdədir
Sistem fəaliyyətdədir
Sistem fəaliyyətdədir
Sistem fəaliyyətdədir
Sistem fəaliyyətdədir
Sistem fəaliyyətdədir
Sistem fəaliyyətdədir
Sistem fəaliyyətdədir

Yuxarıdakı görseller, Ev Otomasyon Sisteminin qurulduqdan sonra hərəkətdə olduğunu göstərir.

Bu IBLE -ni dərc etdikdən sonra, VIZIO LED TV -dən bir neçə İK Kod çəkərək interfeysi genişləndirdim

İlk vizual olaraq fabrik TV Uzaqdan idarəetmə ilə yan -yana göstərildiyi kimi, bu uzaqdan idarəetmənin bir neçə əsas funksiyası planşetim vasitəsilə əldə edilən İnternet interfeysinə daxil edilmişdir.

Sonrakı vizuallar, planşetin arxa planda televizorun veb interfeysdən verilən əmrlərə cavab verdiyini göstərir:

  1. Power OFF əmri - TV sönür
  2. Power ON əmri - TV açılır və ekran gücləndikcə "V" loqotipi görünür
  3. Səs açma əmri - Dinamik səssiz olduqda üfüqi bir çubuq gəlir

Bütün testlərdə, tablet ekranındakı tablosunun yanında Boz bölgə, müştəri tərəfindən verilən əmri və uzaqdan gələn SignalR Hub tərəfindən göndərilən cavabı göstərir.

Addım 10: Avtomatlaşdırma sisteminin və əlaqəli düzəlişlərin gücləndirilməsi

Fərqli sistemlərdən alınan daha çox kod əlavə etməklə bu sistem uzadıla bilər. Bu hissə asan olsa da, nəzərə almalı olduğunuz digər iki amil var.

Gücləndirmə 1 (Tez): Fərqli uzunluqdakı IR Siqnalları ilə işləmək

  1. Fərqli sistemlərin İR Kodları, eyni istehsalçının iki məhsulu arasında belə fərqli uzunluqlarda gəlir.

    Məsələn, bu vəziyyətdə LED TV üçün IR kod dizisinin uzunluğu 67, Samsung Sound Barınki isə 87 civarındadır

  2. Bu o deməkdir ki, əvvəlcə Səs Çubuğunu açsaydım, Arduino eskizindəki İK Tampon serialı 87 koddan ibarət İK Kod ardıcıllığı ilə doldurulardı.
  3. Bunun ardınca, LED TV -ni açsaydım, IR Tampon dizisini cəmi 67 kodla doldurardı, amma əvvəlki əməliyyatdan qalan 20 kod hələ də ətrafında olacaqdı

Nəticə? İK Kod Tamponu əvvəlki əməliyyatdan təmizlənməmiş əlavə 20 kodla zədələndiyindən LED TV açılmır!

Düzəldin 1 (asan çıxış yolu, tövsiyə edilmir)

Arduino Sketchini aşağıdakı kimi dəyişdirin:

Aşağıdakı funksiya zənglərini loop () {} funksiyasında dəyişdirin

transmitIRCode ();

IRCode (c) ötürmək üçün;

Yuxarıdakı funksiyanın imzasında dəyişikliklər edin:

void transmitIRCode (int codeLen) {// RAWBUF sabit kodu codeLen IRTransmitter. IRSendRaw:: send (IRCodeBuffer, codeLen, 38) ilə əvəz olunur; }

Bu asan olsa da, serial heç vaxt tamamilə təmizlənmir və buna görə də bu çox təmiz bir həll deyil

Düzəldin 2 (çətin deyil, tövsiyə olunur)

Şərh bölməsindən sonra Arduino Sketch -in ən üst hissəsində əlavə bir dəyişən elan edin:

imzasız int EMPTY_INT_VALUE;

Bunu setup () funksiyasının üstünə əlavə edin:

// Boş işarəsiz tamsayı dəyişəninin təbii vəziyyətini çəkinEMPTY_INT_VALUE = IRCodeBuffer [0];

Aşağıya fırladın və transmitIRCode () funksiyasından dərhal sonra eskizə yeni bir funksiya əlavə edin:

void clearIRCodeBuffer (int codeLen) {// Dizidən bütün kodları sil // QEYD: sıra elementlərini 0 olaraq təyin etmək həll deyil! for (int i = 1; i <= codeLen; i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE;}}

Nəhayət, loop () funksiyasındakı aşağıdakı yerdə yuxarıdakı yeni funksiyanı çağırın:

// Sıfırla - Serial PortclearIRCodeBuffer (c) oxumağa davam edin;…

Bu daha təmiz bir yanaşmadır, çünki əslində heç bir şans buraxmadan ən son IR Kod siqnalı ilə doldurulmuş İK Tampon sistemindəki bütün yerləri sıfırlayır.

Gücləndirmə 2 (Daha çox cəlb olunur): Müəyyən cihazlar üçün təkrarlanan IR Siqnalının ötürülməsi

Bəzi cihazlarda cavab vermək üçün eyni siqnalın bir neçə dəfə ötürülməsi tələb olunur. Məsələn: Samsung Sound Bar eyni kodun 2 saniyəlik boşluqla iki dəfə göndərilməsini tələb edir

Konsepsiyada düzəliş burada müzakirə olundu, çünki bir az daha çox əlaqəlidir və testə ehtiyacı olacaq

Ardunio Sketch -ə təkrar funksiyanı əlavə etmək, ev avtomatlaşdırma sisteminizə hər dəfə yeni bir cihaz əlavə edərkən eskizi flaş etməli olacağınız deməkdir.

Bunun əvəzinə bu düzəlişin HTML SignalR müştərisinə və Python SignalR Service tətbiqinə əlavə edilməsi həlli daha çevik edir. Və buna prinsipcə aşağıdakı kimi nail olmaq olar:

Hub -a təkrar məlumat ötürmək üçün SignalR HTML müştərisini dəyişdirin

İndex.html açın və HTML dəyərinə təkrar dəyərini aşağıdakı kimi daxil edin:

dəyər = "SMSNG-SB-PWR-ON" dəyər = "SMSNG-SB-PWR-ON_2_1000" olacaq

Burada, 2 təkrar dəyəri və 1000, iki təkrar siqnalı arasındakı milisaniyələrdəki gecikmə dəyəridir

Bu düyməni tıkladığınızda, SignalR qovluğu Açar Kodu+Repeat_Spec alacaq

Yalnız Açar Kodu ayırmaq üçün SignalR Server yan metodlarını dəyişdirin:

  • IR kodunu hər zamanki kimi verilənlər bazasından çıxarmaq üçün Açar Koddan istifadə edin
  • Açar Kod+Repeat_Spec və IRCode -nu həmişəki kimi SingalR Müştərilərinə ötürün

Repeat dəyərlərindən istifadə edərək siqnal ötürmək üçün Python SignalR Service Tətbiqini dəyişdirin:

Python müştərisini açın və aşağıdakı iki funksiyanı dəyişdirin:

def print_command_from_hub (buttonId, cmdSrc):

# buttonId dəyərindən təkrar kodu təhlil edin

def transmitToArduino (IRSignalCode, delim, endPrefix):

# siqnalı istənilən tezlikdə ötürmək üçün bir müddət və ya döngə qurun

  • Bu şəkildə, Arduinonun dəfələrlə çırpılması lazım deyil
  • Bu sistemə istənilən sayda təkrar tezlik daxil edilə bilər
  • Bundan əlavə, UNO -dan istifadə edirsinizsə, Sketch -in böyüyə biləcəyi ölçülər var!

Addım 11: Bilinən Məsələlər və Təhlükəsizlik Məsələləri

İlk dəfə qurulan sistemlərdə olduğu kimi, test zamanı ortaya çıxan bir neçə problem var.

Məsələ 1: Düymə klikləri arasında bir saniyədən az gecikmələrlə əmrlərin sürətlə atılması sistemin ilk iki dəfə cavab verdikdən sonra cavab verməməsinə səbəb oldu.

  • Python SignalR müştərisini yenidən başlatmaq sistemi normal işlərinə qaytarır
  • Python SignalR Müştərisində və Arduino Sketch -də hər ikisindəki istenmeyen Hata Ayıklama çıxışlarını silmək və bu testləri təkrarlamaq dərhal həll edilə bilər.
  • Araşdırmaq üçün başqa bir yer Serial ünsiyyətinin özü olardı - tamponu sürətlə yuymaq üçün kod əlavə etmək olarmı?

Bununla birlikdə, televizorumun zavod uzaqdan idarəetmə cihazına yaxşı cavab vermədiyini gördüm - buna görə də televizorumun İR -ünsiyyətinin təbiəti də bir töhfə verə bilər.

Məsələ 2: HTML ekranı uzun müddət hərəkətsiz qaldıqdan sonra düymə kliklərinə cavab verməyi dayandırır

Adətən səhifəni yeniləmək bu davranışı həll edir - lakin bu davranışın səbəbi hələ də aydın deyil

TƏHLÜKƏSİZLİK TƏHLÜKƏSİZDİR

Bu sistem yalnız yerli (ev) şəbəkə istifadəsi üçün hazırlanmışdır və internet üzərindən istifadə üçün lazımi təhlükəsizlik tədbirləri yoxdur

Buna görə də SignalR Hub -un yerli/ev şəbəkənizdəki yerli bir maşına yerləşdirilməsi tövsiyə olunur

IBLE -ni oxuduğunuz üçün təşəkkür edirəm və ümid edirəm əylənəcəksiniz!

Tövsiyə: