İlan
Akıllı prizler evinizi otomatikleştirmenin en basit yoludur, ancak Wi-Fi veya ZWave tabanlı bir soket için her biri yaklaşık 40 $ 'dan bir kaç taneden fazla satın almanız olası değildir.
Zaten bazı ucuz RF tabanlı soketlere sahip olabilirsiniz - kendi özel uzaktan kumandalarıyla birlikte gelen ve arkada bazı kanal ve kimlik seçicileri olan tür. Maalesef yok piyasadaki akıllı ev merkezleri Akıllı Ev Merkezleri Savaşı: Dışarıda Neler Var ve Neler Geliyor? Daha fazla oku onlarla çalışır. Bunları bir şekilde DIY akıllı ev sisteminize bağlayabilmeniz harika olmaz mıydı? Aslında - oldukça kolay - yaklaşık 10 $ parça ile yapabilirsiniz.
Biraz daha fazla çalışma ile, diğer ısmarlama RF tabanlı uzak donanımları da entegre edebilirsiniz. bu bütçe sinema ekranı.
Neye ihtiyacın var:
- ESP8266 NodeMCU v12E geliştirme kartı (modelin önemi yoktur, v1 veya v3 de iyi olmalıdır). NodeMCU kartı kullanmamızın nedeni, daha sonra kolay Wi-Fi bağlantısı istememizdir. Bağlantı, her biri $ 7 olan 2 kişilik bir paket içindir.
- Paketi 433 Mhz verici ve alıcı (yaklaşık 3 $).
- RCSwitch ve MQTT kütüphaneleri ve kodumuz - hepsi Github'dan indirilebilir.
- Yerel veya uzak bir MQTT sunucusu.
- 433 mHz bantta çalışan bazı RF kontrollü prizler (uzaktan kumandada söylenmelidir). Maplin'den yaklaşık 20 £ (25.89 $) karşılığında 3 paket olarak benimkini aldım.
NodeMCU kartını ilk kez programlarsanız, bunun için Arduino eklentilerini indirmeniz gerekir: Arduino Killer tanıtım kılavuzu Arduino Katili ile Tanışın: ESP8266Size, 10 dolardan daha düşük bir fiyata yerleşik Wi-Fi'ye sahip Arduino uyumlu bir geliştirme kartı olduğunu söylersem ne olur? Peki, var. Daha fazla oku NodeMCU / ESP8266 yongası için. Ayrıca ihtiyacınız olacak CH430 için sürücüler. Bulabilirsin imzalı macOS CH430 sürücüleriveya Windows burada.
Arduino'nun v1.6.5 sürümünü kullandım çünkü daha yüksek bir şey çözdüğünden daha fazla sorun getiriyor. Henüz yapmadıysanız eski sürüme geçin.
Devam etmeden önce hakkında temel düzeyde bir bilgi sahibi olacağım. Arduino programlama Yeni Başlayanlar İçin Arduino Programlama: Trafik Işığı Kontrolörü Proje EğitimiBir Arduino trafik ışığı kontrolörü oluşturmak, temel kodlama becerilerini geliştirmenize yardımcı olur! Başlatırız. Daha fazla oku , yönetim kurulu yöneticisinde NodeMCU kurulumuna sahip olduğunuzu ve bazı demo kodlarını doğru şekilde yükleyebildiğinizi unutmayın. Ayrıca, indirmemize dahil olan kütüphaneleri Arduino / kütüphaneler Klasör.
Eğer var ise PubSubClient veya MQTT kütüphanesi, yedekleyin ve kaldırın - indirmeye dahil ettiğim, NodeMCU'da güvenilir bir şekilde mesaj alabileceğim tek şey ve denedim çok!
RF Koklama (Opsiyonel)
Yalnızca DIP anahtarını veya kadran seçici fiş soketlerini kontrol etmek istiyorsanız bu adıma gerek yoktur - bunlar kutunun dışında desteklenir ve minimum kod değişikliği gerekli olacaktır (yine de ilk önce bunu yapmak ilginçtir, bu yüzden arkasında neler olduğunu anlayacaksınız sahneler).
Eklemeyi denemek istediğiniz başka RF uzaktan kumandalarınız varsa, önce iletilen RF kodlarını “koklamanız” gerekir. Bunu yapmak için, ReceiveDemo_Advanced taslak Menü -> Örnekler -> RCSwitch ve aşağıdaki satırı 0'dan değiştirin
mySwitch.enableReceive (0); // Kesmede alıcı 0 => bu pin # 2
2'ye.
mySwitch.enableReceive (2); // GPIO 2 / D4'te alıcı.
Alıcı modülünü aşağıdaki gibi bağlayın. Alıcı kartının ön tarafına bakarken (ikisinden daha uzun, verici kare) - bileşenlerin bulunduğu taraf:
- En sağ GND. NodeMCU kartındaki GND'ye bağlayın.
- En solda VCC var. NodeMCU kartındaki VIN'e bağlayın.
- Ortadaki iki pim sinyaldir. Bunlardan birini NodeMCU üzerindeki D4'e bağlayın (birbirine bağlı olduğundan hangisi önemli değil).
Şimdi değiştirileni yükle ReceiveDemo_Advancedtamamlandığında seri monitörü açın ve uzaktan kumandalarınızdaki düğmelere basmaya başlayın. Bir düğmeye bastığınızda ondalık (bit uzunluğu dahil), darbe uzunluğu ve protokolü kopyalayın.
Bunu yaptıktan sonra projektör ekranımın
- SCREEN UP: Alınan 8694273 / 24bit; Darbe uzunluğu: 355 veya 356; Protokol: 1
- EKRAN AŞAĞI: 8694276 / 24bit;Darbe uzunluğu: 355 veya 356; Protokol: 1
İhtiyacınız olduğu kadar düğme için devam edin.
Vericinin Test Edilmesi
Ardından, vericiyi kullanarak kod göndermeyi deneyeceğiz. Verici modülünü (kare olanı) aşağıdaki gibi bağlayın. Dikkatli olun: Bu pimlerdeki etiket iğrençtir.
VCC pimi aslında solda değil, ortadadır. Bunu çözme sürecinde bir modülü yok ettim. “ATAD” diyen şey aslında “VERİ” dir, geriye doğru yazılmıştır. Yine, veriler D4, VCC'den VIN'e ve GND'den GND'ye gider (alıcı modülünü çıkarın, artık ihtiyacınız yoktur).
Yükleme Örnekler -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchesve tekrar veri pinini değiştirin:
mySwitch.enableTransmit (10);
için
mySwitch.enableTransmit (2);
Kütüphaneye çeşitli örneklerin dahil edildiğini ve hangisinin sizin için geçerli olduğunu, sahip olduğunuz anahtar türüne bağlı olacağını unutmayın. Tip A (dip anahtarları) ve B (kadranlar veya sürgüler) en yaygın olanlardır - RCSwitch sayfasındaki resimlere bakın. B tipi için, bir soketi açmak ve kapatmak şu kadar basittir:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
burada 1, kanal kimliğidir (üst kadran) ve 4, soket kimliğidir (alt kadran). Bunlar soketlerime romen rakamları ile yazılmıştı. Bu nedenle, maksimum 16 ayrı yuva adreslenebilir, ancak aynı anda birden fazla aygıtınız varsa birden çok yuva aynı adresi kullanabilir.
Ancak, projektör ekranım biraz farklıydı - farklı bir darbe uzunluğu kullandı. Yani, bunları çalıştırmak için aşağıdakiler işe yaradı. Uzaktan kumandanızın ihtiyacı varsa farklı bir protokol de tanımlayabileceğinizi unutmayın, ancak protokolü darbe uzunluğundan ÖNCE tanımladığınızdan emin olun. Protokol değiştirilirken darbe uzunluğunun üzerine yazılır.
// Ekranımın aslında İKİ düğmesine basılması gerektiğini unutmayın (uzun bir basış değil, iki fiziksel basar), bu yüzden biraz gecikiyorum ve aynı sinyali tekrar void screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (ondalık kod, bit sayısı) gecikme (2000); mySwitch.send (8694273,24); } void screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); gecikme (2000); mySwitch.send (8694276,24); }
Bir sonraki adıma geçmeden önce tüm kodlarınızın çalışıp çalışmadığını test edin.
MQTT ile kontrol
Adlı Github'dan indirdiğiniz çizimi açın mqtt_rcswitch.inove eviniz için ağ SSID'sini ve şifresini değiştirerek başlayın. Ardından, isterseniz kanal adını değiştirin ve MQTT sunucusunu ayarlayın. OpenHAB kurulumunuzda çalışan bir MQTT sunucunuz yoksa, OpenHAB başlangıç kılavuzumuzun 2. bölümünü okuyun OpenHAB Başlangıç Kılavuzu Bölüm 2: ZWave, MQTT, Kurallar ve GrafikAçık kaynaklı ev otomasyon yazılımı OpenHAB, piyasadaki diğer ev otomasyon sistemlerinin yeteneklerini fazlasıyla aşar - ancak kurulumu kolay değildir. Aslında, düpedüz sinir bozucu olabilir. Daha fazla oku . Kodumun tip B (döner anahtar) soketleri için tasarlandığını unutmayın, ancak DIP anahtarları için de kolayca değiştirebilirsiniz.
Kodun en önemli kısmı mesaj alındı() gelen MQTT komutlarına yanıt veren işlev. Bu işlevde, önce ana anahtar kelimeyi kontrol ediyoruz - “değiştir” ve “ekran” ı seçtim. “Geçiş” durumunda, kanal ve fiş kimliğini ayrıştırırız; sonra komut için faydalı yük gövdesini kontrol edin.
void messageReceived (Dize konusu, Dize yükü, karakter * bayt, işaretsiz int uzunluk) {if (topic.indexOf ("switch")> = 0) {// denetimi değiştir, kanalı ayrıştır ve plug id int channel = getValue (Konu, '/', 3) .toInt (); int plug = getValue (konu, '/', 4) .toInt (); if (payload == "açık") {mySwitch.switchOn (kanal, fiş); } else {mySwitch.switchOff (kanal, fiş); }} else if (topic.indexOf ("ekran")> = 0) {// ekran kontrolü eğer (payload == "yukarı") {screenUp (); } else if (payload == "aşağı") {screenDown (); }} / * daha fazla komut dinlemek için buraya başka bir tane ekleyin (veya ekran istemiyorsanız yukarıdaki komutu değiştirin) * / }
Varsayılan olarak, aşağıdaki MQTT komutları çalışır:
oturma odası / kontrol / anahtar / X / Y (burada X kanal ve Y fiş kimliği; mesaj gövdesi açık veya kapalı)
salon / kontrol / ekran (mesaj gövdesi yukarı veya aşağı)
OpenHAB'a eklemeden önce cihazlarınızı test etmek için komut satırını veya bir GUI MQTT istemcisini kullanın.
OpenHAB'a Ekleme
Son adım olarak, OpenHAB'da bu anahtarlar için bazı öğeler oluşturmamız gerekiyor. Şimdilik aşağıdaki öğeleri tanımladım, ancak daha fazlasını nasıl ekleyebileceğinizi anlayabilmeniz gerekir:
/ * RF433mHz cihazlar * / CinemaScreen "Screen" (Sinema) {mqtt = "> [aracı: oturma odası / kontrol / ekran: komut: AÇIK: aşağı],> [aracı: oturma odası / kontrol / ekran: komut: KAPALI: yukarı]"} Anahtar Switch41 "Switch41" (Sinema) {mqtt = "> [aracı: oturma odası / kontrol / anahtar / 4/1: komut: AÇIK: açık],> [aracı: oturma odası / kontrol / anahtar / 4/1: komut: KAPALI: kapalı] "} Anahtar Switch42 "Switch42" (Sinema) {mqtt = "> [broker: livingroom / kontrol / anahtar / 4/2: komut: AÇIK: açık],> [broker: livingroom / kontrol / anahtar / 4/2: komut: KAPALI: kapalı] "}
Artık RF cihazlarınızı OpenHAB'dan kontrol edebilmelisiniz! Hoş bir sürpriz tarafından bir şey aralığı - tek bir düğüm evimin çoğunu kapsayabiliyordu. Elbette, daha fazla kapsama ihtiyacınız varsa, aynı kanalı dinleyen aynı düğümü tekrarlayan başka bir düğüm ekleyebilirsiniz.
Akılda tutulması gereken tek sınırlama, soketlerin durumlarını bildirememesidir, bu nedenle orijinal uzaktan kumandayı kullanın, soketin durumunu kontrol edin Openhab. Sadece OpenHAB arayüzünü kullanmaya devam edin ve iyi olmalısınız.
Sorularınız mı var? Yorumlarda sorun, yardım etmek için elimden geleni yapacağım. Kodumu geliştirmek istiyorsanız, çekme isteği göndermekten çekinmeyin.
James Yapay Zeka alanında lisans derecesine sahiptir ve CompTIA A + ve Network + sertifikalıdır. MakeUseOf'un baş geliştiricisi ve boş zamanlarını VR paintball ve boardgames oynayarak geçiriyor. Çocukluğundan beri bilgisayar inşa ediyor.