İçindekiler:

Alexa Raspberry Pi Röle Kontrol Cihazı: 6 Adım
Alexa Raspberry Pi Röle Kontrol Cihazı: 6 Adım

Video: Alexa Raspberry Pi Röle Kontrol Cihazı: 6 Adım

Video: Alexa Raspberry Pi Röle Kontrol Cihazı: 6 Adım
Video: AKILLI CİHAZLARINIZI TEK YERDEN YÖNETİN | Home Assistant (Hassio) kurulumu 2024, Temmuz
Anonim
Alexa Raspberry Pi Röle Kontrolörü
Alexa Raspberry Pi Röle Kontrolörü
Alexa Raspberry Pi Röle Kontrolörü
Alexa Raspberry Pi Röle Kontrolörü
Alexa Raspberry Pi Röle Kontrolörü
Alexa Raspberry Pi Röle Kontrolörü

Bu Eğitilebilir Yazıyı, IOT cihazlarını Amazon'un Alexa'sıyla entegre etme konusundaki deneyimlerimi paylaşmak için oluşturdum.

Bu proje, bir ahududu pi'ye bağlı bir röle kartının akıllı ev denetleyicisinden kontrol edilmesini sağlar.

Alexa ile test edildi, ancak bir dizi Belkin Wemo soketini taklit ettiği için Samsung Smartthings ve diğer kontrol arayüzleriyle de iyi çalışıyor gibi görünüyor.

Mükemmel FAUXMO koduna dayanan bir sürü örnek var ama bu python öğrenmek anlamına geliyordu ve bana cihazlarım için gereken ayrıntılı kontrolü vermedi ve bu yüzden temel kodlama dili olarak C kullanarak sıfırdan bir tane oluşturmaya karar verdim.

Ayrıca Amazon.com'da lambda kodunun derinliklerine inmek zorunda kalmak istemedim, bu yüzden gerçekten basit tuttum.

Kaynağı ve notları Github'a gönderdim:

github.com/Switchdoctorstu/StuPiMo

Öğretici, gerçekten nasıl çalıştırılacağını ele almak ve başkalarına yardımcı olması durumunda notlarımı yayınlamak içindir.

1. Adım: Sarf Malzemeleri ve Bağlantılar

Sarf Malzemeleri ve Bağlantılar
Sarf Malzemeleri ve Bağlantılar
Sarf Malzemeleri ve Bağlantılar
Sarf Malzemeleri ve Bağlantılar
Sarf Malzemeleri ve Bağlantılar
Sarf Malzemeleri ve Bağlantılar

İhtiyacınız olan şeyler Amazon / EBay'de hazır:

  • Ahududu PI *
  • Pi güç kaynağı
  • Dupont konektörleri
  • Röle Kurulu
  • Eski mikro USB kablosu (röle kartının gücünü yarıya indirmek için)

Herhangi bir ahududu Pi çalışacak, bunu bir Model B ve Sıfır üzerinde test ettim.

*Pi Zero kullanıyorsanız bir OTG Ağ Adaptörüne ihtiyacınız olacaktır (WiFi'da yerleşik 'W' sürümünü satın almadığınız sürece)

Pi'yi ağa bağlamanız gerekecek.

Röle kartını Pi'ye bağlamak için dupont konektörlerini kullanın.

Röle kartının harici güç kullanması gerektiğini unutmayın (bağlantıyı kaldırın ve harici 5v'ye bağlayın). PI'den güç alarak çalışacak, ancak üretim çalışması için tavsiye edilmiyor.

Kurulumum için harici olarak çalışan bir USB HUB kullandım. Bu, PI'ye güç sağlar.

Ayrıca eski bir USB kablosunun ucunu kestim ve güvende kalmak için rölelere 2. USB bağlantısından hub'a güç verdim. 'Üretim' versiyonum küçük bir 5V 5A anahtar modlu güç kaynağı kullanıyor. Yine, Pi'yi Micro-USB aracılığıyla çalıştırmak için bir USB kablosunu yarıya indirdim ve röle kartına güç sağlamak için iki dupont konektörü kestim. USB kablosunda 4 kablo vardır, çoğu 5v beslemesini belirtmek için kırmızı/siyah kullanır, ancak şüpheniz varsa doğru kabloları aldığınızdan emin olmak için bir ölçüm cihazı kullanın.

Kart üzerindeki röle pinleri PI başlığındaki ilgili GPIO pinlerine bağlanır.

Kod, GPIO pinlerini seçmenize izin veriyor ancak kullandığım varsayılan şuydu:

  1. Röle Pimi 1 - Toprak
  2. Röle Pimi 2 - Röle 1 - GPIO 0
  3. Röle Pimi 3 - Röle 2 - GPIO 1
  4. Röle Pimi 4 - Röle 3 - GPIO 2
  5. Röle Pimi 5 - Röle 4 - GPIO 3
  6. Röle Pimi 6 - Röle 5 - GPIO 4
  7. Röle Pimi 7 - Röle 6 - GPIO 5
  8. Röle Pimi 8 - Röle 7 - GPIO 6
  9. Röle Pimi 9 - Röle 8 - GPIO 7
  10. Röle Pimi 10 - mantık için +5v

Adım 2: PI Kurulumu

PI'nizi nasıl çalıştırıp ağa bağlayacağınıza dair bir öğreticiyi yeniden oluşturmayacağım.

Mükemmel bir talimat içeren birçok kılavuz vardır:

www.instructables.com/id/Ultimate-Raspberr…

Kendinizi PI'nin ağda göründüğü noktaya getirmeniz gerekecek ve ona bağlanabilirsiniz.

Bunun Ethernet veya Kablosuz üzerinden olması önemli değil.

Bu proje Geany Programmers Editor kullanılarak yalnızca Raspberry PI ile tamamlanabilir, ancak ben şahsen Visual Studio veya Eclipse (veya hatta Notepad++) kullanarak bir PC'de kod hazırlığımı yapmayı daha kolay buluyorum ve ardından bir kullanarak hata ayıklamak için PI'ye yükleyin. VNC bağlantısı. Bir RPi'de VNC kurma konusunda birçok mükemmel talimat olduğu için yine burada ele almayacağım.

Tek ihtiyacınız olan, kodu yükleyip derleyebileceğiniz noktaya gelmek.

Önemli olan bir not, UPNP işleyicisi UDP çok noktaya yayın gerektirdiğinden, kullanılan arabirimlerin 'Karmaşık' moda ayarlanması gerektiğidir.

Bu komut satırında yapılabilir:

pi@raspberrypi:~ $ ifconfig eth0 söz

ve / veya

pi@raspberrypi:~ $ ifconfig wlan0 söz

Bunun kalıcı hale getirilmesi gerekiyor, bu yüzden /etc/rc.local dosyasını düzenledim

sudo nano \etc\rc.local

satırı dahil etmek için:

sudo ifconfig eth0 söz

arabirimlerin başlangıçta ayarlandığından emin olmak için ilk başlık satırı # satırından sonra.

Adım 3: Kodu İndirme ve Derleme

Kodun kendisi Github depomda bulunur;

github.com/Switchdoctorstu/StuPiMo/blob/ma…

depoyu klonlamanın 'doğru' yolları varken. Pi masaüstünde Geany editörünü açıp kodu yapıştırmayı daha kolay buldum.

Benzer şekilde, komut satırını kullanıyorsanız;

Yeni bir dizin oluştur

mkdir Stu

değiştir

cd Stu

Yeni bir metin dosyası oluşturun

nano StuPiMo.c

Kodu Github ham dosyasından kopyalayın ve yeni dosyaya yapıştırın

Kaydet ve çık.

Dosyayı bir C kaynak kodu nesnesi olarak aldıktan sonra, onu kullanarak derleyebilirsiniz.

gcc -o StuPiMo StuPiMo.c -l kablolamaPi

Gerekli kablolamaPi kitaplığındaki compliler bağlantılarını sağlamak için "-l kablolamaPi" gerekli olduğuna dikkat edin.

Kod daha sonra kullanılarak çalıştırılabilir

./StuPiMo

Yine, bunun başlangıçta çalışmasını istiyorsanız, şu komutu kullanın:

sudo nano /etc/rc.local

aşağıdaki satırı eklemek için

sudo /home/pi/Stu/StuPiMo &

/etc/rc.local dosyanıza. Çıkışta dosyanızı kaydetmeyi unutmayın.

Komut dosyasının bu noktada engellenmediğinden emin olmak için bir alt işlemin oluşturulmasını sağlamak için '&' işaretinin gerekli olduğunu unutmayın.

Adım 4: Kullanmak

Kodu çalıştırdıktan sonra, alexa'dan 'Cihazları Keşfet' yapmasını isteyin ve o, sanal Wemo cihazlarının 8'ini de bulmalıdır.

O zaman sadece "Alexa soket 1'i aç" veya "Alexa soketi 6 kapat" vb. Deme durumu olur ve ilgili röle değiştirilir.

Adım 5: Kod Nasıl Çalışır?

Kod, bir dizi Belkin Wemo soket cihazını taklit ederek çalışır.

Bunu başarmak için 2 ana işlevi yerine getirmesi gerekir.

  • bir UPNP keşif yayın işleyicisi
  • cihaza gönderilen komutları ve gerekli yanıtları yönetmek için bir 'aygıt işleyicisi' (sanal cihaz başına bir tane).

Bir 'bonus' özelliği, cihazların kontrolüne izin vermek için bir web sayfası da yayınlamasıdır.

UPNP İşleyicisi

UPNP işleyicisi, 239.255.255.250 bağlantı noktası 1900'deki SSDP protokol paketlerini izlemek için bir yuva açar.

Bireysel wemo öykünücülerini soran herkese bildiren bir keşif yanıt paketi ile gelen herhangi bir 'M-SEARCH' sorgusuna yanıt verir.

Cihaz İşleyici

Aygıt işleyicileri (sanal aygıt başına bir tane) bir dizi IP bağlantı noktasını izler ve isteklere yanıt verir.

Sorulduğunda bir setup.xml yanıtı sunacak

Sorulduğunda bir olay açıklama dosyası sunacak

Bir GETBINARYSTATE isteğine yanıt verecek

Bir SETBINARYSTATE isteğini işleyecek ve yanıtlayacaktır.

Web sunucusu

Web sunucusu, geçiş başına bir düğme içeren bir HTML formu oluşturan basit bir rutindir.

Basılan düğmelere yanıt verecek ve buna göre rölenin durumunu değiştirecektir.

6. Adım: Özelleştirme ve Kolay Adlar

Özelleştirme ve Kolay İsimler
Özelleştirme ve Kolay İsimler

Basit ve düzenlenebilir olması için koda deli olmadım.

Temel bilgiler, kodun başlangıcındaki tanımlara göre özelleştirilebilir:

// global tanımlar#define WEBPORT 5353 // web sunucusunun çalıştırılacağı bağlantı noktası

#define NUMDEVICES 8 // Oluşturulacak sanal cihaz sayısı

#define PORTBASE 43450 // artırılacak temel IP bağlantı noktası

WEBPORT, yerleşik web sunucusunun üzerinde çalıştığı bağlantı noktası numarasıdır. Bu, işleri kolaylaştırmak için 80'de oturmak için yapılabilir, ancak yerel olarak çalışan Tomcat veya diğer hizmetlerle çeliştiğini buldum.

NUMDEVICES, başlatılacak bireysel WEMO öykünücülerinin sayısını tanımlar. 2 portlu bir röle kartınız varsa, bunu 2, 4 port = 4 vb. olarak ayarlayın.

Cihazlar için kolay adlar, setup_names adlı bir rutinde ayarlanır:

int setup_names(char dostu[NUMDEVICES][NAMELEN]) { int i = 0;

// bu döngüyü kullan

for (i = 0; i < NUMDEVICES; i++) {

sprintf(dostu, "Soket %d", i + 1);

}

// veya cihaz adlarını doldurmak için aşağıdaki manuel tablo

/*

strcpy(dostu[0], "Yatak Odası TV");

strcpy(dostu[1], "Elektrikli Battaniye");

strcpy(dostu[2], "Yatak Odası Lambası");

strcpy(dostu[3], "Soket 4");

strcpy(dostu[4], "Soket 5");

strcpy(dostu[5], "Soket 6");

strcpy(dostu[6], "Soket 7");

strcpy(dostu[7], "Soket 8");

*/

dönüş i;

}

Aygıtların her birini 'Soket n' olarak adlandırmak için bir döngü kullandım, ancak /* */ silerseniz bu döngüyü silebilir ve bunun yerine kendi kolay adlarınızı ekleyebilirsiniz (sadece NUMDEVICES ile aynı numarayı eklediğinizden emin olun).

Herhangi bir değişiklik yaparsanız kodu yeniden derlemeyi unutmayın.

Önerilen: