Mündəricat:

Alexa Raspberry Pi Relay Controller: 6 addım
Alexa Raspberry Pi Relay Controller: 6 addım

Video: Alexa Raspberry Pi Relay Controller: 6 addım

Video: Alexa Raspberry Pi Relay Controller: 6 addım
Video: Бесшумное zigbee реле в подрозетник без нулевой линии, особенности монтажа, установка конденсатора 2024, Iyul
Anonim
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller
Alexa Raspberry Pi Relay Controller

IOT cihazlarının Amazon Alexa ilə inteqrasiyası ilə bağlı təcrübələrimi bölüşmək üçün bu Təlimatı yaratdım.

Bu layihə, moruq pi ilə əlaqəli bir relay kartının smarthome nəzarətçisindən idarə olunmasına imkan verir.

Alexa ilə sınaqdan keçirildi, eyni zamanda bir sıra Belkin Wemo prizlərini təqlid etdiyi üçün Samsung Smartthings və digər idarəetmə interfeysləri ilə yaxşı işləyir.

Mükəmməl FAUXMO koduna əsaslanan çoxlu nümunələr var, amma bu python öyrənmək demək idi və cihazlarım üçün lazım olan detallı idarəetməni verməmişdi və buna görə də əsas kodlaşdırma dili olaraq C istifadə edərək sıfırdan yenidən yaratmağa qərar verdim.

Amazon.com -da lambda kodunun dərinliklərinə getmək istəmədim, buna görə də bunu çox sadə saxladım.

Mənbə və qeydləri Github -da yerləşdirdim:

github.com/Switchdoctorstu/StuPiMo

Dərslik, həqiqətən necə işləyəcəyini və başqalarına kömək etdiyi təqdirdə qeydlərimi dərc etməyi əhatə etməkdir.

Addım 1: Təchizat və Bağlantılar

Təchizat və Bağlantılar
Təchizat və Bağlantılar
Təchizat və Bağlantılar
Təchizat və Bağlantılar
Təchizat və Bağlantılar
Təchizat və Bağlantılar

Lazım olan şeylər Amazon / EBay -də asanlıqla mövcuddur:

  • Moruq PI *
  • Pi enerji təchizatı
  • Dupont bağlayıcıları
  • Röle lövhəsi
  • Köhnə mikro USB qurğusu (röle kartının gücünü yarıya endirmək üçün)

Hər hansı bir moruq Pi işləyəcək, bunu Model B və Sıfırda sınamışam.

*Pi Zero istifadə edirsinizsə, OTG Şəbəkə Adaptörünə ehtiyacınız olacaq (WiFi -də "W" versiyasını satın almasanız)

Pi -ni şəbəkəyə bağlamalısınız.

Röle kartını Pi -yə bağlamaq üçün dupont konnektorlarından istifadə edin.

Röle kartının xarici gücdən istifadə etməsi lazım olduğunu unutmayın (əlaqəni çıxarın və xarici 5v -ə qoşulun). PI ilə işləyəcək, lakin istehsalın işləməsi üçün tövsiyə edilmir.

Quraşdırma üçün xaricdən işləyən USB HUB istifadə etdim. Bu, PI -yə güc verir.

Köhnə bir USB kabelinin ucunu da kəsdim və təhlükəsiz qalmaq üçün röleləri 2 -ci USB bağlantısından huba bağladım. Mənim "istehsal" versiyamda kiçik 5V 5A keçid rejimi enerji təchizatı istifadə olunur. Yenə Pi-ni Micro-USB vasitəsi ilə gücləndirmək üçün bir USB qurğusunu yarıya endirdim və röle lövhəsini gücləndirmək üçün dupont konnektorlarından ikisini kəsdim. USB qurğusunda 4 tel var, əksəriyyəti 5v təchizatı ifadə etmək üçün qırmızı/qara rəngdən istifadə edir, lakin şübhəniz varsa düzgün telləri aldığınızdan əmin olmaq üçün bir sayğacdan istifadə edin.

Lövhədəki röle pinləri, PI başlığındakı müvafiq GPIO pinlərinə bağlıdır.

Kod GPIO sancaqlarını seçməyə imkan verir, amma istifadə etdiyim standart:

  1. Relay Pin 1 - Torpaq
  2. Relay Pin 2 - Relay 1 - GPIO 0
  3. Relay Pin 3 - Relay 2 - GPIO 1
  4. Relay Pin 4 - Relay 3 - GPIO 2
  5. Relay Pin 5 - Relay 4 - GPIO 3
  6. Relay Pin 6 - Relay 5 - GPIO 4
  7. Relay Pin 7 - Relay 6 - GPIO 5
  8. Relay Pin 8 - Relay 7 - GPIO 6
  9. Relay Pin 9 - Relay 8 - GPIO 7
  10. Məntiq üçün Relay Pin 10 - +5v

Addım 2: PI qurulması

PI-ni işə salmaq və şəbəkəyə qoşulmaq üçün bir dərslik yenidən yaratmayacağam.

Mükəmməl bir təlimat da daxil olmaqla bir çox bələdçi var:

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

Özünüzü PI -nin şəbəkədə göründüyü nöqtəyə çatdırmalısınız və ona qoşula bilərsiniz.

Bunun Ethernet və ya Simsiz vasitəsilə olmasının əhəmiyyəti yoxdur.

Bu layihə Geany Programmers Redaktorundan istifadə etməklə yalnız Moruq PI ilə tamamlana bilər, amma şəxsən mən Visual Studio və ya Eclipse (və ya hətta Notepad ++) istifadə edərək kompüterdə kod hazırlamağı daha asan tapıram. VNC bağlantısı. Yenə də bunu əhatə etməyəcəyəm, çünki bir RPi -də VNC qurmaq üçün bir çox əla təlimat var.

Lazım olan yalnız kodu yükləyə və tərtib edə biləcəyiniz nöqtəyə çatmaqdır.

Əhəmiyyətli olan bir qeyd, UPNP işləyicisinin UDP çoxlu yayım tələb etdiyindən istifadə olunan interfeyslərin 'Promiscuous' rejiminə qoyulmasıdır.

Bu əmr satırında edilə bilər:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

və / və ya

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Bunun daimi olması lazımdır, buna görə də /etc/rc.local redaktə etdim

sudo nano / etc / rc.local

xətti daxil etmək üçün:

sudo ifconfig eth0 promisc

ilk banner dəstindən sonra # sətirləri, başlanğıcda interfeyslərin qurulmasını təmin edir.

Addım 3: Kodu yükləyin və tərtib edin

Kodun özü Github depomda oturur;

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

anbarı klonlaşdırmanın 'düzgün' yolları olsa da. Pi masaüstündə Geany redaktorunu açmağı və kodu yapışdırmağı daha asan tapdım.

Eyni şəkildə, əmr satırından istifadə edirsinizsə;

Yeni bir kataloq yaradın

mkdir Stu

Buna keçin

cd Stu

Yeni bir mətn faylı yaradın

nano StuPiMo.c

Github raw -dan kodu kopyalayın və yeni fayla yapışdırın

Saxla və çıx.

Dosyanı C mənbə kodu obyekti olaraq əldə etdikdən sonra istifadə edərək tərtib edə bilərsiniz

gcc -o StuPiMo StuPiMo.c -l wiringPi

"-l wiringPi" nin şikayətçi tələb olunan wiringPi kitabxanasında əlaqələndirilməsini təmin etmək üçün lazım olduğunu unutmayın.

Kod sonra istifadə edilə bilər

./StuPiMo

Yenə də bunun başlanğıcda işləməsini istəyirsinizsə, əmrdən istifadə edin:

sudo nano /etc/rc.local

aşağıdakı sətri əlavə etmək üçün

sudo/home/pi/Stu/StuPiMo &

/etc/rc.local faylınıza. Faylınızı çıxışda saxlamağı unutmayın.

Skriptin bu nöqtədə bloklanmadığından əmin olmaq üçün bir alt prosesin əmələ gəlməsini təmin etmək üçün '&' işarəsinin vacib olduğunu unutmayın.

Addım 4: İstifadə edin

Kod işlədildikdən sonra, Alexa'dan 'Cihazları Kəşf et' istəyin və o, bütün 8 virtual Wemo cihazını tapmalıdır.

Sonra "Alexa soketi 1 aç" və ya "Alexa 6 yuvasını söndür" və s. Və müvafiq rölin dəyişdiriləcəyini söyləmək yalnız bir haldır.

Addım 5: Kod necə işləyir

Kod, bir sıra Belkin Wemo yuva cihazlarını təqlid edərək işləyir.

Bunu əldə etmək üçün 2 əsas funksiyanı yerinə yetirməlidir

  • bir UPNP kəşf yayım işçisi
  • cihaza göndərilən əmrləri və lazımi cavabları idarə etmək üçün 'cihaz işləyicisi' (hər virtual cihaz üçün bir ədəd).

Bir 'bonus' xüsusiyyəti, cihazların idarə olunmasına icazə vermək üçün bir veb səhifəsi də nəşr etməsidir.

UPNP idarəçisi

UPNP işləyicisi, 239.255.255.250 1900 portunda SSDP protokol paketlərini izləmək üçün bir yuva açır.

Fərdi wemo emülatörlerini soruşan hər kəsə xəbər verən bir kəşf cavab paketi ilə daxil olan 'M-SEARCH' sorğularına cavab verir.

Cihaz idarəçisi

Cihaz idarəçiləri (hər bir virtual cihaz üçün bir ədəd) bir sıra IP portlarını izləyir və istəklərə cavab verir.

Sorulduqda bir setup.xml cavabına xidmət edəcək

Soruşanda bir hadisə təsviri faylına xidmət edəcək

GETBINARYSTATE sorğusuna cavab verəcək

SETBINARYSTATE sorğusunu emal edəcək və cavablandıracaq

Veb server

Veb server, röle başına bir düymə olan bir HTML forması quran sadə bir qaydadır.

Düymələrin basılmasına cavab verəcək və rölin vəziyyətini buna uyğun olaraq dəyişəcək.

Addım 6: Fərdiləşdirmə və Dostluq Adları

Fərdiləşdirmə və Dostluq Adları
Fərdiləşdirmə və Dostluq Adları

Sadə və düzəliş etmək üçün koddan dəli olmamışam.

Əsaslar, kodun əvvəlindəki təriflərlə fərdiləşdirilə bilər:

// qlobal təriflər#veb serveri işə salmaq üçün WEBPORT 5353 // portunu təyin edir

#define NUMDEVICES 8 // Yaratılacaq virtual cihazların sayı

#define PORTBASE 43450 // -dən artım üçün əsas IP portu

WEBPORT, quraşdırılmış veb serverin işlədiyi liman nömrəsidir. Bu işi asanlaşdırmaq üçün 80 -də oturmaq olardı, ancaq tomcat və ya yerli olaraq işləyən digər xidmətlərlə ziddiyyət təşkil etdiyini gördüm.

NUMDEVICES, işə salınacaq fərdi WEMO emulyatorlarının sayını təyin edir. 2 portlu röle kartınız varsa, bunu 2, 4 port = 4 və s.

Cihazlar üçün uyğun adlar, setup_names adlı bir iş rejimində qurulur:

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

// bu döngədən istifadə edin

üçün (i = 0; i <NUMDEVICES; i ++) {

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

}

cihaz adlarını doldurmaq üçün // və ya aşağıdakı təlimat cədvəlini istifadə edin

/*

strcpy (dostluq [0], "Yataq otağı TV");

strcpy (dostluq [1], "Elektrik Blanket");

strcpy (dostluq [2], "Yataq otağı lampası");

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

strcpy (dostluq [4], "Socket 5");

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

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

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

*/

qayıt i;

}

Cihazların hər birini 'Socket n' adlandırmaq üçün bir döngə istifadə etdim, ancaq / * * /

Hər hansı bir dəyişiklik etsəniz kodu yenidən tərtib etməyi unutmayın.

Tövsiyə: