
Owen Little
0
3654
1035
Akıllı elektrik prizleri evinizi otomatik hale getirmenin en kolay yoludur, ancak Wi-Fi veya ZWave tabanlı bir soket için her biri yaklaşık 40 $ 'dan az birinden fazla satın almanız mümkün değildir.
Yine de bazı ucuz RF tabanlı soketlere sahip olabilirsiniz - kendi özel uzaktan kumandasıyla gelenler ve arkasında bazı kanal ve kimlik seçicileri var. Ne yazık ki, piyasada akıllı ev merkezleri yok Akıllı Ev Merkezleri'nin Savaşı: Neler Geliyor ve Neler Geliyor? Akıllı Ev Hub'larının Savaşı: Neler Var ve Neler Geliyor? Bu onlarla çalışmak. Bunları bir şekilde DIY akıllı ev sisteminize bağlamanız harika olmaz mıydı? Eh, aslında - oldukça kolay - parça başına yaklaşık 10 $ ile.
Biraz daha fazla çalışma ile, bu bütçe sinema ekranı gibi, ısmarlama RF tabanlı uzaktan bir donanım da entegre edebilirsiniz.
Neye ihtiyacın var:
- ESP8266 NodeMCU v12E geliştirme kartı (kesin model önemli değil, v1 veya v3 de iyi olmalı). NodeMCU anakart kullanmamızın nedeni, kolay Wi-Fi bağlantısını daha sonra istememizdir. Bağlantı, her biri 7 ABD Doları değerinde çalışan 2 paket içindir..
- 433 Mhz verici ve alıcı paketi (yaklaşık 3 $).
- RCSwitch ve MQTT kütüphaneleri ve kodumuz - hepsi Github'dan indirilebilir..
- Bir MQTT sunucusu, yerel veya uzak.
- 433 mHz bandında çalışan bazı RF kontrollü soketler (uzaktan kumandada söylenmesi gerekir). Benimki Maplin'den 20'lik bir paket için 3'lük bir paket olarak satın aldım (25.89 $).
Eğer NodeMCU kartını ilk kez programlıyorsanız, bunun için Arduino eklentilerini indirmeniz gerekir: Arduino Killer tanıtım kılavuzumuzun ilk bölümünü takip edin Arduino Killer ile tanışın: ESP8266 Arduino Killer ile tanışın: ESP8266 Peki ya ben Size, 10 $ 'dan daha az bir süre için yerleşik Wi-Fi özellikli Arduino uyumlu bir geliştirme kartı olduğunu mu söyledim? Eh, var. NodeMCU / ESP8266 yongası için. Ayrıca ihtiyacınız olacak CH430 için sürücüler. İmzalı macOS CH430 sürücüleri burada veya Windows burada bulabilirsiniz.
Arduino'nun v1.6.5'ini kullandım çünkü çözdüğünden daha fazla sorun ortaya çıktı. Henüz yapmadıysanız, düşürme.
İlerlemeden önce, Arduino programlama hakkında temel bilgiler edineceğim Yeni başlayanlar için Arduino Programlama: Trafik Işığı Kontrol Cihazı Projesi Eğitimi Yeni Başlayanlar için Arduino Programlama: Trafik Işığı Denetleyicisi Proje Eğitimi Bir Arduino trafik ışığı kontrolörü geliştirme temel kodlama becerilerini geliştirmenize yardımcı olur ! Seni başlattık. ve NodeMCU'nuzun kurul yöneticisinde kurulumuna sahip olduğunuzu ve bazı demo kodlarını doğru şekilde yükleyebildiğinizi Ayrıca indirmemizde yer alan kütüphaneleri telefonunuza eklemelisiniz. Arduino / kütüphaneler Klasör.
Eğer varsa PubSubClient veya MQTT kütüphanesi, yedekleyin ve kaldırın - indirmeye dahil ettiğim, NodeMCU'da güvenilir bir şekilde ileti alabileceğim tek kişidir ve denedim çok!
RF Koklama (İsteğe bağlı)
Yalnızca DIP-switch veya dial selektör fiş soketlerini kontrol etmek istiyorsanız - bunlar kutudan destekleniyorsa ve minimum kod modifikasyonuna ihtiyaç duyulacaksa bu adım gerekli değildir (yine de ilk olarak yapmanız ilginçtir. sahne arkasında neler olduğunu anlayacağım).
Eklemeye çalışmak istediğiniz başka RF uzaktan kumandalarınız varsa, önce bunu yapmanız gerekir. “koklamak” RF kodları iletiliyor. Bunu yapmak için ReceiveDemo_Advanced kroki Menü -> Örnekler -> RCSwitch klasöre gidin ve aşağıdaki satırı 0’dan değiştirin.
mySwitch.enableReceive (0); // 0 kesildiğinde alıcı => pim # 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üne bakarken (bu ikisinin daha uzundur, verici kare şeklindedir) - üzerinde bileşenlerin bulunduğu taraf:
- En sağdaki GND. NodeMCU kartındaki GND'ye bağlanın.
- En solda VCC var. NodeMCU kartındaki VIN'e bağlanın.
- Orta iki pim sinyaldir. NodeMCU’daki D4’tan birine bağlayın (birbirlerine bağlılar, hangisi olduğu önemli değil).
Şimdi değiştirilenleri yükle ReceiveDemo_Advanced, ve bittiğinde, 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 kullandığını buldum
- EKRAN YUKARI: 8694273 / 24bit; Darbe uzunluğu: 355 veya 356; Protokol: 1
- EKRAN AŞAĞI: Alınan 8694276 / 24bit, Darbe uzunluğu: 355 veya 356; Protokol: 1
İhtiyacınız kadar düğme için devam edin.
Vericiyi Test Etme
Daha sonra vericiyi kullanarak kod göndermeyi deneyeceğiz. Verici modülünü (kare olan) aşağıdaki gibi bağlayın. Dikkatli olun: bu pimlerin üzerindeki etiketler iğrenç.
VCC pimi aslında ortada, sol tarafta değil. Bunu çözme sürecinde bir modülü yok ettim. Yazan şey “ATAD” aslında “VERİ”, tersten okunmuş. Yine veri D4, VCC - VIN ve GND - GND'ye gidiyor (alıcı modülünü kaldırın, artık ihtiyacınız yok).
Yüklemek Örnekler -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, ve tekrar veri pinini değiştirin:
mySwitch.enableTransmit (10);
için
mySwitch.enableTransmit (2);
Not: Kütüphaneye dahil edilmiş çeşitli örnekler vardır ve hangisinin sizin için işe yaradığına, sahip olduğunuz anahtarın tipine bağlı olacaktır. Tip A (dip şalterler) ve B (kadranlar veya kaydırıcılar) en yaygın olanlardır - RCSwitch sayfasındaki resimlere bakın. B tipi için bir soketi açıp kapatmak:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
1 kanal kimliği (üst kadran) ve 4 soket kimliği (alt kadran). Bunlar prizlerimde romen rakamları ile yazılmıştır. Bu nedenle, maksimum 16 ayrı soket adreslenebilir, ancak aynı anda birden fazla cihazınız varsa birden fazla soket aynı adresi kullanabilir..
Ancak, projektör ekranım biraz farklıydı - farklı bir darbe uzunluğu kullandı. Böylece, bunları çalıştırmak için aşağıdaki çalıştı. Uzaktan kumandanız gerekiyorsa, 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ğu üzerine yazılır.
// Ekranımın aslında İKİ düğmeye basılmasını (uzun basma, ancak iki fiziksel basma) gerektirdiğini, bu yüzden biraz geciktirip aynı sinyali tekrar gönderdiğimi not 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 etme
Adlandırılmış Github'dan indirdiğiniz taslağı açın. mqtt_rcswitch.ino, ve eviniz için ağ SSID 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ü açın OpenHAB Başlangıç Kılavuzu Bölüm 2: ZWave, MQTT, Kurallar ve Grafik Açma OpenHAB Başlangıç Kılavuzu Bölüm 2: ZWave, MQTT, Kurallar ve Grafik Oluşturma Açık kaynak kodlu ev otomasyonu yazılımı OpenHAB, piyasadaki diğer ev otomasyon sistemlerinin yeteneklerini çok aşmaktadır - ancak kurulumu kolay değildir. Aslında, düpedüz sinir bozucu olabilir. . Kodumun B tipi (döner anahtar) soketler 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 cevap veren işlev. Bu fonksiyonda, önce ana anahtar sözcüğü kontrol ediyoruz - seçtim “şalter” ve “ekran”. Bu durumuda “şalter”, daha sonra kanalı ve fiş kimliğini ayrıştırırız; sonra komut için yük gövdesini kontrol edin.
void messageReceived (Dize konusu, Dize yükü, char * bayt, imzasız int uzunluğu) if (topic.indexOf ("switch")> = 0) // kontrolü değiştir, kanalı çözümle ve kimliği int int channel = getValue ( konu, '/', 3) .toInt (); int plug = getValue (konu, '/', 4) .toInt (); if (payload == "on") mySwitch.switchOn (kanal, fiş); else mySwitch.switchOff (kanal, fiş); else if (topic.indexOf ("screen")> = 0) // ekran kontrolü eğer (payload == "up") screenUp (); else if (payload == "down") screenDown (); / * burada daha fazla komut dinlemek için 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:
salon / kontrol / anahtar / X / Y (burada X kanaldır ve Y fiş kimliğidir; mesaj gövdesi açık veya kapalıdır)
oturma odası / 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 yaratmamız yeterli. Şimdilik aşağıdaki öğeleri tanımladım, ancak nasıl daha fazla ekleyeceğinizi çözebilmelisiniz:
/ * RF433mHz cihazlar * / CinemaScreen "Ekran" (Sinema) mqtt = "> değiştir [komisyoncu: oturma odası / kontrol / ekran: komut: AÇIK: aşağı],> [komisyoncu: oturma odası / kontrol / ekran: komut: KAPALI: yukarı ] " Anahtar41" Anahtar41 "(Sinema) mqtt ="> [broker: oturma odası / kontrol / anahtar / 4/1: komut: AÇIK: açık],> [komisyoncu: oturma odası / kontrol / anahtar / 4/1: komut: KAPALI: kapalı] " Anahtar42" Anahtar42 "(Sinema) mqtt ="> [komisyoncu: oturma odası / kontrol / anahtar / 4/2: komut: AÇIK: açık],> [komisyoncu: oturma / kontrol / anahtar / 4/2: komut: KAPALI: off] "
Artık RF cihazlarınızı OpenHAB'dan kontrol edebilmelisiniz! Hoş bir şekilde şaşırdığım bir şey menzildeydi - tek bir düğüm evimin çoğunu kapatabildi. Elbette, daha fazla kapsamaya ihtiyacınız olursa, sadece aynı komutları tekrarlayan aynı kanalı dinleyen başka bir düğüm ekleyebilirsiniz..
Akılda tutulması gereken tek sınırlama soketlerin kendi durumlarını bildirememeleridir, bu nedenle orijinal uzaktan kumandayı kullanırsanız, soketin durumunu kontrol etmek OpenHAB'a doğru şekilde yansıtılmayabilir. Sadece OpenHAB arayüzünü kullanmaya devam edin ve iyi olmalısınız.
Sorular veya sorunlar? Yorumlarda sor ve ben yardımcı olmak için elimden geleni yapacağım. Kodumu geliştirmek isterseniz, çekme isteği göndermekten çekinmeyin.