İçindekiler:

Raspberry Pi-Arduino-SignalR Ev Otomasyon Merkezi: 11 Adım (Resimlerle)
Raspberry Pi-Arduino-SignalR Ev Otomasyon Merkezi: 11 Adım (Resimlerle)

Video: Raspberry Pi-Arduino-SignalR Ev Otomasyon Merkezi: 11 Adım (Resimlerle)

Video: Raspberry Pi-Arduino-SignalR Ev Otomasyon Merkezi: 11 Adım (Resimlerle)
Video: I love my Flipper Zero. 2024, Temmuz
Anonim
Raspberry Pi-Arduino-SignalR Ev Otomasyon Merkezi
Raspberry Pi-Arduino-SignalR Ev Otomasyon Merkezi

Burada ve burada yayınlanan birkaç başlangıç IBLE'ımın ardından, bu proje, işlevsel bir Ev Otomasyon Merkezi'nin temel bir sürümünü oluşturmaya yönelik ilk adımı atıyor.

Geçmişte öğrendiğim her şeyi ve gün geçtikçe öğrenmeye devam ettiğim yeni şeyleri nasıl kullanabileceğimi anlamak için birkaç farklı teknoloji kullandım.

Bu nedenle, bu Otomasyon Merkezi aşağıdaki bileşenlerden oluşur:

Aşağıdaki özelliklere sahip bir SQL Server 2012 veritabanı:

  • benzersiz bir "kod anahtarı" ile birlikte bir tabloda önceden belirlenmiş Kızılötesi (IR) kodlarının bir listesini saklar
  • kod tuşları, ilişkili IR kodlarının amacını tanımlamak için sezgisel olarak (kullanıcı tarafından) adlandırılır.

Gerçek Zamanlı ASP. NET SignalR Hub Web Uygulaması:

  • HTML istemcisine bakan bir kullanıcıdan komutlar olarak "kod anahtarlarını" bekler ve alır
  • alındığında, SQL veritabanına bağlanır ve sağlanan kod anahtarını kullanarak bir IR Kodu alır
  • alınan IR kodunu bir Python SignalR istemcisine iletir

Kullanıcının karşılaştığı HTML SignalR Dashboard istemcisi:

  • jQuery SignalR İstemci API'leri aracılığıyla Hub'a benzersiz bir kod anahtarı iletir
  • Gösterge Tablosundaki her düğme, SQL veritabanı tablosunda kaydedilen benzersiz bir kod anahtarını temsil edecektir.

Raspberry Pi 2.0 üzerinde çalışan bir Python SignalR arka plan hizmeti uygulaması:

  • IR kodlarını Hub'dan komut olarak alır
  • IR Kodundaki sınırlayıcıları arar ve çok uzun kodu segmentlere ayırır
  • Seri port üzerinden Arduino ile iletişim kurar ve her segmenti art arda yazar

Bir Arduino IR Verici Kroki:

  • Seri bağlantı noktası üzerinden IR kod bölümlerinin her birini bekler ve alır
  • kod parçalarını bir IR Kodu arabellek dizisine birleştirir
  • IRLib Arduino kitaplığını kullanarak arabelleği bir IR İletim komutuna paketler

Hedef cihaz IR Vericinin yakınındaysa, cihaz Arduino tarafından iletilen IR sinyaline tepki verebilir (verebilir).

NOT

Bu gösterimde kullandığım hedef cihaz IR sinyallerine tepki veriyor olsa da, cihazın IR sinyaline tepki verebileceğini söylememin nedenleri için diğer IBLE'ımın bu bölümünü okumak isteyebilirsiniz.

Yuvarlanma zamanı.

Adım 1: İhtiyacınız Olandan Önce, İhtiyacınız Olandan Önce

İhtiyacınız Olandan Önce, İhtiyacınız Olandan Önce
İhtiyacınız Olandan Önce, İhtiyacınız Olandan Önce
İhtiyacınız Olandan Önce, İhtiyacınız Olandan Önce
İhtiyacınız Olandan Önce, İhtiyacınız Olandan Önce
İhtiyacınız Olandan Önce, İhtiyacınız Olandan Önce
İhtiyacınız Olandan Önce, İhtiyacınız Olandan Önce

Bu talimat, daha önce yapılmış olan ve aynı zamanda son IBLE'm ile sonuçlanan bazı çalışmalarla yola çıkıyor.

Bu nedenle, bu IBLE için neye ihtiyacımız olduğuna adım atmadan önce, nasıl yapılacağına dair arka plan için bu talimatı okumanız önerilir:

  1. Arduino IRLib Kızılötesi Kütüphanesi kuruldu
  2. Bu IBLE'de kullanılan IR kodları, bir IR Alıcısı kullanılarak nasıl yakalandı?
  3. Yakalanan IR kodları, hedef cihazı bir IR Verici aracılığıyla kontrol etmek için nasıl kullanıldı?

Bu IBLE'nin tamamlanmasının ardından, aşağıdakileri yapacak bir ASP. NET IR Code Recorder web uygulaması kurdum:

  • Yakalanan IR Kodunu, sezgisel olarak adlandırılmış bir kod anahtarıyla birlikte bir web formu aracılığıyla girdi olarak kabul edin
  • Arduino Uno'nun Seri arabellek sınırının altında kalmak için çok uzun IR kodunu 64 karakterden daha kısa bölümlere ayırın
  • Kodların son bölümü, Arduino'ya son kod bölümünü aldığını belirten bir "E" ile önceden sabitlenecektir.
  • Her bölüm, uzun bir diziye geri monte edilmeden önce bir boru sınırlayıcı ile ayrılacaktır.
  • Son olarak, segmentlere ayrılmış IR Kodu, kod anahtarıyla birlikte bir SQL Server 2012 veritabanında depolandı.

Bu IBLE'de ayrıntılı olarak açıklanan Ev Otomasyon Merkezi bileşenlerinden birini oluşturan bu SQL veritabanıdır.

NOT

IR Kodu Kaydedici Web uygulaması, aşağıdaki nedenlerden dolayı buradaki tartışmanın bir parçasını oluşturmaz:

  • Arduino Sketch kullanarak kodları manuel olarak yakalayabilir, bunları boru ile ayrılmış bölümlere ayırabilir ve ayrıntılı bir Web Uygulaması oluşturmak zorunda kalmadan veritabanında saklayabilirsiniz.
  • Bu IBLE'den farklı olarak, IR Kaydedici Arduino'dan Raspberry Pi'ye ters iletişime odaklanır

Bu nedenle, bu projeyle ilgili ayrıntılar başka bir IBLE için bir konu olacaktır.

2. Adım: İhtiyacınız Olan - Donanım

İhtiyacınız Olan - Donanım
İhtiyacınız Olan - Donanım
İhtiyacınız Olan - Donanım
İhtiyacınız Olan - Donanım

Çalışan bir Raspberry Pi 2.0 - Ubuntu Mate'i yüklemenizi tavsiye ederim çünkü OpenLibre Office de dahil olmak üzere daha zengin özelliklere sahip, bu arada bu talimatın belgelenmesinde vazgeçilmez olan Raspberry Pi'de.

Ek olarak, Pi, aşağıdaki harici öğelere ihtiyacınız olacak:

  • Arduino Uno prototipleme platformu veya bir klonu
  • Bir IR verici LED'i - Amazon.com'dan Three Legs adlı bir marka kullandım
  • 330 veya 220 Ohm'luk bir direnç - 220'yi (Kırmızı-Kırmızı-Kahverengi renk kodu) kullandım çünkü birkaç kullanışlı
  • Normal ekmek tahtası, konektörler ve Arduino Ortamı kurulu bir PC
  • Bir test adayı - uzaktan kumandalı her yerde bulunan Samsung LED Monitör gibi

3. Adım: İhtiyacınız Olan - Yazılım

Tüm parçaları bir araya getirmek için aşağıdaki yazılım kurulumunun kurulu ve çalışıyor olması gerekir:

Raspberry Pi'de aşağıdakileri yüklemeniz gerekecek:

  • Arduino IDE - Sketch'i oluşturmak ve UNO'ya göndermek için kullanılır
  • Arduino için Python modülü - UNO ve Pi arasındaki seri iletişim için
  • Python SignalR istemci kitaplığı - Buraya ekli talimatlara başvurabilirsiniz

Aşağıdaki geliştirme ortamının kurulu olduğu bir Windows makinesi:

  • SignalR Hub ve Web istemci uygulamasını oluşturmak için Microsoft Visual Studio Express 2013'ün ücretsiz sürümü
  • Arka uç veritabanını tasarlamak ve oluşturmak için SQL Server 2012 Express'in ücretsiz sürümü

Bir Windows İnternet Bilgi Sunucusu (IIS) Barındırma ortamı:

  • SignalR Hub ve Web istemcisi oluşturulduktan ve test edildikten sonra yerel bir IIS Sunucusuna dağıtılması gerekecektir.
  • Benim durumumda, ev ağımda IIS ile Windows 7 çalıştıran eski bir dizüstü bilgisayar kullanmayı planlıyorum

NOT

Tüm talimatlar Python 2.7.x sürümü için geçerlidir. Sürüm 3.0 yeniden yazma gerektirebilir

Adım 4: SQL Server Veritabanı

SQL Sunucu Veritabanı
SQL Sunucu Veritabanı

Ekli şema, bu uygulamada kullanılan temel bir SQL Server veritabanının yapısını gösterir ve sadece iki tablo içerir.

Tablo AutoHubCode

Bu tablodaki iki önemli sütun şunlardır:

AutoCodeKey - Kod anahtarının kullanıcı dostu adını saklar

Kod anahtarlarının her biri bir otomasyon istemcisi tarafından iletilir - bizim durumumuzda, bir Web sayfasından bir HTML düğmesi

AutoCodeVal - ham IR Kodu sırasını saklar

Bu, SignalR Hub tarafından yanıt olarak istemciye geri iletilen gerçek IR kodudur

Bu durumda, Hub ile sürekli iletişim halinde olan bir Python istemcisi, IR kod dizisini alır ve Seri Port üzerinden Arduino UNO'ya iletir.

Tablo AutoHubLog

  • Otomasyon istemcisi tarafından istenen kodu günlüğe kaydeder.
  • Bu, sistemi kimin ve ne zaman kullandığını ve hangi kodun istendiğini takip etmek için bir önlemdir.

Belirtildiği gibi, veritabanı platform tercihim olarak SQL Server 2012 kullandım. Bu basit tasarımı MySQL, Oracle vb. gibi farklı bir veritabanı platformunda yeniden oluşturabilirsiniz.

Yine de, bu veritabanını oluşturmak için SQL Komut Dosyası buraya eklenmiştir

NOT

  1. SignalR Hub kodu, bir SQL Server 2012 veritabanına bağlanmak üzere tasarlanmıştır
  2. Farklı bir veritabanıyla çalışmak, Hub'ı farklı bir veritabanı sürücüsü kullanacak şekilde değiştirmek anlamına gelir.

Adım 5: ASP. NET SignalR Hub Web Uygulaması

ASP. NET SignalR Hub Web Uygulaması
ASP. NET SignalR Hub Web Uygulaması
ASP. NET SignalR Hub Web Uygulaması
ASP. NET SignalR Hub Web Uygulaması

ASP. NET SignalR Hub Web Uygulaması, ekteki şemada belirtildiği gibi, birlikte aşağıdaki bileşenlerden oluşur:

Bölüm 1 - İstemciden istek alan ve istemciye yanıt veren SignalR Hub

Bölüm 2, 4 - Toplu olarak Otomasyon sisteminin ön ucunu oluşturan ve Otomasyon Merkezi'ne komutlar veren HTML istemcisi web sayfası ve stil sayfası

Bölüm 3 - HTML istemcisi tarafından Otomasyon Merkezi ile iletişim kurmak için kullanılan jQuery SignalR API'leri

Bölüm 5 - SignalR Hub, veritabanıyla doğrudan iletişim kurmaz. Bunu Entity Framework kullanılarak oluşturulan ara sınıflar aracılığıyla yapar.

Bu sınıflar, veritabanı ayrıntılarını ön uç uygulamadan soyutlar.

Bölüm 6 - Entity Framework sınıflarını kullanarak SQL Veritabanında (daha önce açıklanan) Okuma-Yazma işlemlerinin gerçekleştirilmesine yardımcı olan Veritabanı hizmet sınıfı

ASP. NET ve SignalR, Microsoft teknolojileridir ve bu öğretici, basit bir SignalR uygulamasının nasıl oluşturulduğu ve dağıtıldığı konusunda size yol gösterecektir.

Burada oluşturduğum şey, bu eğitimden edinilen temel bilgilere dayanmaktadır. Dağıtıldığında, uygulama ikinci resimde gösterilen web sayfasına benzer görünmelidir.

KOD ÜZERİNE NOT

Kodun sadeleştirilmiş bir sürümünü içeren bir ZIP dosyası eklendi

Klasör yapısı görselde gösterildiği gibidir - ancak, ekin boyutunu azaltmak için tüm çerçeve sınıfları ve jQuery betikleri kaldırılmıştır.

Bu kodun kılavuz olarak kullanılması tavsiye edilir, çünkü yukarıdaki öğretici bağlantısını izleyerek yeni bir SignalR Web uygulaması oluşturduğunuzda, en son jQuery kitaplıkları ve ASP. NET çerçeve sınıfları otomatik olarak eklenecektir.

Ayrıca, index.html sayfasındaki jQuery komut dosyalarına yapılan referanslar, Web uygulamanızı oluşturduğunuzda otomatik olarak eklenecek olan jQuery SignalR istemci kitaplıklarının en son sürümünü yansıtacak şekilde değiştirilmelidir.

Son olarak, bağlantı dizesinin Web.config* gibi adlı dosyalarda veritabanınızla eşleşmesi için değiştirilmesi gerekecektir.

6. Adım: Python SignalR Hizmet İstemcisi

Python SignalR Hizmet İstemcisi
Python SignalR Hizmet İstemcisi

HTML SignalR İstemcisi öne bakan bir Kullanıcı Arayüzü iken, Python İstemcisi, ana işlevi Hub tarafından iletilen IR Kodunu almak ve onu Seri iletişim üzerinden Arduino UNO'ya yönlendirmek olan bir arka uç hizmet uygulamasıdır.

Ekli kod kendi kendini açıklayıcıdır ve işlevselliğini açıklamaya yetecek kadar belgelenmiştir

Birleşik ekran görüntüsünde gösterildiği gibi, HTML İstemcisi ve Python Hizmeti istemcisi SignalR Hub aracılığıyla aşağıdaki gibi iletişim kurar:

  1. Otomasyon sisteminin kullanıcısı, bir düğme tıklamasıyla Hub'a bir komut verir
  2. Her düğme IR Anahtar kodu ile ilişkilendirilir ve tıklandığında bu kod Hub'a iletilir.
  3. Hub bu kodu alır, veritabanına bağlanır ve ham IR Sinyal kodunu alır ve tüm bağlı istemcilere geri iletir.

    Aynı zamanda, Hub, AutoHubLog veritabanı tablosunda, kodu ve uzak istemciler tarafından talep edildiği tarih ve saati kaydeden bir girişi günlüğe kaydeder

  4. Python hizmet istemcisi IR Kodunu alır ve daha sonraki işlemler için Arduino UNO'ya iletir.

Adım 7: Arduino UNO IR İletim Kroki ve Kodu

Arduino UNO IR İletim Kroki ve Kodu
Arduino UNO IR İletim Kroki ve Kodu
Arduino UNO IR İletim Kroki ve Kodu
Arduino UNO IR İletim Kroki ve Kodu
Arduino UNO IR İletim Kroki ve Kodu
Arduino UNO IR İletim Kroki ve Kodu

Arduino devresi görsellerde gösterildiği gibi bu sistem için oldukça basittir ve bu nedenle kısaca açıklanmıştır:

  • Renksiz IR LED, UNO'daki Dijital PIN 3'e bağlanmalıdır - bu, IRLib Arduino kitaplığının bir gereğidir
  • Sebepler, IRLib kitaplığı ile ilgili bölümde bir uzaktan kumandayı klonlama konusundaki önceki IBLE'mde açıklanmıştır.
  • Dijital PIN 4'e bağlı Yeşil LED, UNO, Raspberry Pi üzerinde çalışan Python istemcisinden IR Kodunun tüm bölümlerini aldığında yanan görsel bir göstergedir.
  • Bu LED'in yanması, Raspberry Pi ile UNO arasındaki Seri iletişimin çalıştığını onaylayacaktır.
  • Seri iletişimi etkinleştirmek için UNO, USB Bağlantı Noktası üzerinden Raspberry Pi'ye bağlanır.
  • Ekli Arduino Sketch, işlevini açıklamak için yeterince yorumlanmıştır.
  • Kodun üst kısmındaki yorumlar, devrenin nasıl kablolanması gerektiğini de açıklar.

NOT

Pratikte, Arduino ve Pi, Pi'yi, Arduino'yu çalıştıracak ve ayrıca IR LED aracılığıyla güçlü bir sinyal iletecek kadar güçlü bir USB hub'ına birlikte bağlanabilir.

Adım 8: Sistemi Bağlama ve Test Etme

Sistemin Bağlanması ve Test Edilmesi
Sistemin Bağlanması ve Test Edilmesi
Sistemin Bağlanması ve Test Edilmesi
Sistemin Bağlanması ve Test Edilmesi
Sistemin Bağlanması ve Test Edilmesi
Sistemin Bağlanması ve Test Edilmesi
  1. SQL Server 2012 veritabanıyla birlikte HTML istemcisi olan ASP. NET SignalR Hub'ı oluşturun ve yerel ev ağınızdaki bir İnternet Bilgi Sunucusu'na (IIS) dağıtın
  2. HTTP üzerinden HTML SignalR istemcisini açarak web uygulamasına erişin

    bu sayfanın URL'si genellikle https://bilgisayarınız:port_number/ olur

  3. Kontrol panelindeki bir düğmeye tıklayın ve uygulama doğru bir şekilde dağıtıldıysa Hub, IR Kodunu döndürerek ve kontrol paneline bitişik Gri panelde görüntüleyerek yanıt verecektir.

    Unutma! IR alıcı kitaplığını ayarlayarak ve önceki IBLE'mde açıklandığı gibi kodları yakalayarak kodları veritabanınıza yüklemeniz gerekecek

  4. Arduino'yu USB üzerinden Raspberry Pi'ye bağlayın - Pi üzerinde Arduino IDE'yi açın ve UNO'nun Pi ile bağlantı kurabildiğinden emin olun

    Bu Arduino öğretici makaleleri, bunu oldukça hızlı bir şekilde anlamanıza yardımcı olacaktır

  5. Python kodunu açın ve ortamınıza uygun olarak aşağıdaki değişiklikleri yapın

    • Adım 4'ten alınan UNO'nuzun Seri Bağlantı Noktası adresi
    • 2. Adımdaki yerel URL'nizle eşleşecek SignalR hub'ının URL'si - bu örnekte, https://bilgisayarınız:port_number/signalr olacaktır
  6. Son olarak, Raspberry Pi üzerindeki Arduino IDE'deki Arduino Sketch'i açın ve UNO'ya flashlayın.
  7. Devreyi kontrol edilecek cihaza yakın olacak şekilde konumlandırın - IR LED'i, cihazın IR alıcı portu ile net bir görüş hattına sahip olmalıdır.
  8. Python IDLE araç çubuğundaki F5 düğmesine basarak Raspberry Pi üzerinde Python programını başlatın.
  9. HTML istemci programındaki Kontrol paneline dönün (2. Adım) ve bir düğmeye tıklayın (Güç Açma veya Sesi Açma gibi)

Sistem doğru kurulmuşsa, HTML istemci sayfasını telefonunuzda veya tabletinizde açabilmeli ve HTML istemci sayfanızdaki butonlarla cihazınızı kontrol edebilmelisiniz.

Adım 9: Sistem İş Başında

Sistem Eylemde
Sistem Eylemde
Sistem Eylemde
Sistem Eylemde
Sistem Eylemde
Sistem Eylemde
Sistem Eylemde
Sistem Eylemde

Yukarıdaki görseller, Ev Otomasyon Sistemini kurulduktan sonra çalışırken gösterir.

Bu IBLE'ı yayınladığımdan beri, VIZIO LED TV'mden birkaç IR Kodu yakalayarak arayüzü genişlettim.

İlk görselde fabrika TV Uzaktan Kumandası ile yan yana gösterildiği gibi, bu uzaktan kumandanın birkaç temel işlevi, tabletim aracılığıyla erişilen Web Kullanıcı Arayüzüne yerleştirilmiştir.

Sonraki görseller, Web arayüzünden verilen komutlara yanıt veren TV'nin arkada olduğu tableti ön planda gösterir:

  1. Kapatma komutu - TV kapanır
  2. Güç AÇIK komutu - TV açılır ve ekran açılırken "V" logosu görünür
  3. Sessiz AÇIK komutu - Hoparlörün sesi kapatıldığında yatay bir çubuk belirir

Tüm testlerde, tablet ekranındaki gösterge panosunun yanındaki Gri alan, istemci tarafından verilen komutu ve uzak SignalR Hub tarafından geri gönderilen yanıtı görüntüler.

Adım 10: Otomasyon Sistemini Geliştirme ve İlgili Düzeltmeler

Bu sistem, farklı sistemlerden yakalanan daha fazla kod eklenerek genişletilebilir. Bu kısım kolay olsa da, göz önünde bulundurmanız gereken iki faktör daha var.

Geliştirme 1 (Hızlı): Farklı uzunluklardaki IR Sinyalleriyle Çalışma

  1. Farklı sistemlerin IR Kodları, aynı üreticinin iki ürünü arasında bile farklı uzunluklarda gelir.

    Örneğin, bu durumda, LED TV için IR kod dizisi uzunluğu 67 iken Samsung Sound Bar'ınki 87 civarındadır

  2. Bu, önce Sound Bar'ı açarsam, Arduino çizimindeki IR Buffer dizisinin 87 kod içeren bir IR Kodu dizisiyle doldurulacağı anlamına gelir.
  3. Bunu takiben, LED TV'yi açarsam, IR Tampon dizisini sadece 67 kodla dolduracaktı, ancak önceki işlemden kalan 20 kod hala etrafta olacaktı.

Sonuç? LED TV açılmıyor çünkü IR Kodu Arabelleği, önceki işlemden temizlenmemiş fazladan 20 kod tarafından bozulmuş!

Düzeltme 1 (kolay çıkış, önerilmez)

Arduino Sketch'i aşağıdaki gibi değiştirin:

Döngü(){} işlevinde aşağıdaki işlev çağrılarını değiştirin

iletimIRCode();

IRCode(c) iletmek için;

Yukarıdaki işlevin imzasında değişiklik yapın:

void iletimIRCode(int codeLen){ //RAWBUF sabiti codeLen ile değiştirildi IRTransmitter. IRSendRaw::send(IRCodeBuffer, codeLen, 38); }

Bu kolay olsa da, dizi hiçbir zaman tamamen temizlenmez ve bu nedenle bu çok temiz bir çözüm değildir.

Düzeltme 2 (Zor değil, önerilir)

Yorumlar bölümünden sonra Arduino Sketch'in en üstünde ek bir değişken bildirin:

imzasız int EMPTY_INT_VALUE;

Bunu setup() fonksiyonunun en üstüne ekleyin:

//Boş bir işaretsiz tamsayı değişkeninin doğal durumunu yakalayınEMPTY_INT_VALUE = IRCodeBuffer[0];

Aşağı kaydırın ve taslağa yeni bir işlev ekleyin, transmitIRCode() işlevinden hemen sonra:

void clearIRCodeBuffer(int codeLen){//Dizideki tüm kodları temizle//NOT: dizi öğelerini 0'a ayarlamak çözüm değil!for(int i=1;i<=codeLen;i++){IRCodeBuffer[i-1]=BOŞ_INT_VALUE;}}

Son olarak, loop() işlevinde aşağıdaki konumda yukarıdaki yeni işlevi çağırın:

//Sıfırla - Seri PortclearIRCodeBuffer(c) okumaya devam et;…

Bu, IR Tampon dizisindeki en son IR Kodu sinyali tarafından doldurulmuş tüm konumları hiçbir şeyi şansa bırakmadan sıfırladığı için daha temiz bir yaklaşımdır.

Geliştirme 2 (Daha fazla dahil): Belirli cihazlar için IR Sinyal İletimini Tekrarlama

Bazı cihazlar yanıt verebilmek için aynı sinyalin birden çok kez iletilmesini gerektirir Örnek: Bu durumda, Samsung Sound Bar, aynı kodun 1 saniye aralıklarla iki kez gönderilmesini gerektirir

Fix in Concept, biraz daha ilgili olduğu ve test edilmesi gerekeceği için burada tartışıldı

Ardunio Sketch'e tekrarlama işlevini eklemek, Ev Otomasyon Sisteminize her yeni cihaz eklediğinizde Sketch'i flaş etmeniz gerekeceği anlamına gelir.

Bunun yerine, bu düzeltmeyi HTML SignalR istemcisine ve Python SignalR Hizmeti uygulamasına eklemek, çözümü çok daha esnek hale getirir. Ve bu prensipte şu şekilde başarılabilir:

Hub'a yinelenen bilgileri iletmek için SignalR HTML istemcisini değiştirin

index.html dosyasını açın ve tekrar değerini HTML düğmesine şu şekilde gömün:

value="SMSNG-SB-PWR-ON", value="SMSNG-SB-PWR-ON_2_1000" olur

Burada, 2 tekrar değeridir ve 1000, iki tekrar sinyali arasındaki milisaniye cinsinden gecikme değeridir.

Bu düğmeye tıkladığınızda, SignalR hub'ı Anahtar Kodu+Tekrar_Özelliğini alacaktır.

Yalnızca Anahtar Kodunu ayrıştırmak için SignalR Sunucusu tarafı yöntemlerini değiştirin:

  • IR Kodunu her zamanki gibi veritabanından almak için Anahtar Kodunu kullanın
  • Key Code+Repeat_Spec ve IRCode'u her zamanki gibi SingalR İstemcilerine iletin

Tekrar değerlerini kullanarak sinyalleri iletmek için Python SignalR Hizmet Uygulamasını değiştirin:

Python istemcisini açın ve aşağıdaki iki işlevi değiştirin:

def print_command_from_hub(buttonId, cmdSrc):

# buttonId değerinden tekrar kodunu ayrıştır

def transmitToArduino(IRSignalCode, delim, endPrefix):

# sinyali istenen frekansta iletmek için bir süre veya döngü için ayarlayın

  • Bu şekilde, Arduino'nun tekrar tekrar yanıp sönmesi gerekmez
  • Bu sisteme herhangi bir sayıda tekrarlama frekansı eklenebilir.
  • Ayrıca, UNO kullanıyorsanız, Sketch'inizin büyüyebileceği boyutun bir sınırı vardır!

11. Adım: Bilinen Sorunlar ve Güvenlik Endişeleri

İlk kez kurulan sistemlerde olduğu gibi, bunun da test sırasında ortaya çıkan birkaç sorunu var.

Sorun 1: Düğme tıklamaları arasında bir saniyeden daha kısa gecikmelerle hızlı bir şekilde komutları başlatmak, sistemin ilk birkaç kez yanıt verdikten sonra yanıt vermemesine neden oldu.

  • Python SignalR istemcisini yeniden başlatmak, sistemi normal işlemlere geri döndürür
  • Ani çözümler, hem Python SignalR İstemcisinde hem de Arduino Sketch'de istenmeyen Hata Ayıklama çıktılarını kaldırmak ve bu testleri tekrarlamak olabilir.
  • Bakılması gereken başka bir yer de Seri iletişimin kendisi olabilir - arabelleği hızlı bir şekilde temizlemek için kod eklemek mümkün müdür?

Bununla birlikte, televizyonumun fabrika uzaktan kumandasına iyi yanıt vermediğini fark ettim - bu nedenle televizyonumun IR iletişiminin doğası da katkıda bulunan bir faktör olabilir.

Sorun 2: HTML ekranı, uzun bir süre işlem yapılmadığında düğme tıklamalarına yanıt vermiyor

Genellikle sayfayı yenilemek bu davranışı çözer - ancak bu davranışın nedeni hala belirsizdir

GÜVENLİK ENDİŞELERİ

Bu sistem yalnızca yerel (ev) ağ kullanımı için tasarlanmıştır ve internet üzerinden kullanılmak üzere gerekli güvenlik önlemlerine sahip değildir

Bu nedenle SignalR Hub'ın yerel/ev ağınızdaki yerel bir makineye dağıtılması önerilir

IBLE'ımı okuduğunuz için teşekkürler ve umarım eğlenirsiniz!

Önerilen: