Სარჩევი:

Alexa Raspberry Pi სარელეო კონტროლერი: 6 ნაბიჯი
Alexa Raspberry Pi სარელეო კონტროლერი: 6 ნაბიჯი

ვიდეო: Alexa Raspberry Pi სარელეო კონტროლერი: 6 ნაბიჯი

ვიდეო: Alexa Raspberry Pi სარელეო კონტროლერი: 6 ნაბიჯი
ვიდეო: How to set up Amazon Alexa on Raspberry Pi | DIY 2024, ნოემბერი
Anonim
Alexa Raspberry Pi სარელეო კონტროლერი
Alexa Raspberry Pi სარელეო კონტროლერი
Alexa Raspberry Pi სარელეო კონტროლერი
Alexa Raspberry Pi სარელეო კონტროლერი
Alexa Raspberry Pi სარელეო კონტროლერი
Alexa Raspberry Pi სარელეო კონტროლერი

მე შევქმენი ეს Instructable, რომ გავუზიარო ჩემი გამოცდილება ამაზონის Alexa– სთან IOT მოწყობილობების ინტეგრაციას.

ეს პროექტი საშუალებას იძლევა ჟოლოს პითან დაკავშირებული სარელეო დაფა გაკონტროლდეს smarthome კონტროლერისგან.

ის გამოცდილია Alexa– სთან ერთად, მაგრამ ასევე კარგად მუშაობს Samsung Smartthings– თან და სხვა საკონტროლო ინტერფეისებთან, რადგან ის ემსგავსება Belkin Wemo სოკეტების სერიას.

არსებობს უამრავი მაგალითი, რომელიც დაფუძნებულია FAUXMO- ს შესანიშნავ კოდზე, მაგრამ ეს გულისხმობდა პითონის სწავლას და არ მაძლევდა დეტალურ კონტროლს, რაც მჭირდებოდა ჩემი მოწყობილობებისთვის და ამიტომ გადავწყვიტე თავიდან ნელ-ნელა შემექმნა C, როგორც ჩემი ძირითადი კოდირების ენა.

მე ასევე არ მსურდა ლამბდა კოდის სიღრმეში წასვლა Amazon.com– ზე, ასე რომ, მე მას ძალიან მარტივად ვიცავდი.

მე გამოვაქვეყნე წყარო და შენიშვნები Github– ზე:

github.com/Switchdoctorstu/StuPiMo

სამეურვეო პროგრამა ნამდვილად მოიცავს იმას, თუ როგორ უნდა იმუშაოს და გამოაქვეყნოს ჩემი ჩანაწერები, თუ ის სხვებს დაეხმარება.

ნაბიჯი 1: მასალები და კავშირები

მასალები და კავშირები
მასალები და კავშირები
მასალები და კავშირები
მასალები და კავშირები
მასალები და კავშირები
მასალები და კავშირები

თქვენთვის საჭირო ნივთები ადვილად ხელმისაწვდომია Amazon / EBay– ზე:

  • ჟოლოს PI *
  • Pi კვების ბლოკი
  • დუპონტის კონექტორები
  • სარელეო დაფა
  • ძველი მიკრო USB ბორბალი (სარელეო ბარათის სიმძლავრის გასაზრდელად)

ნებისმიერი ჟოლო Pi იმუშავებს, მე ეს გამოვცადე B მოდელზე და ნულზე.

*თუ Pi Zero- ს იყენებთ, დაგჭირდებათ OTG ქსელის ადაპტერი (თუ არ ყიდულობთ "W" ვერსიას WiFi- ში შესყიდვით)

თქვენ უნდა დაუკავშიროთ Pi ქსელს.

გამოიყენეთ დუპონტის კონექტორები სარელეო ბარათის Pi- ს დასაკავშირებლად.

გაითვალისწინეთ, რომ სარელეო ბარათმა უნდა გამოიყენოს გარე ენერგია (ამოიღეთ ბმული და დაუკავშირდით გარე 5 ვ). ის იმუშავებს PI– დან, მაგრამ არ არის რეკომენდებული წარმოების გაშვება.

ჩემი კონფიგურაციისთვის გამოვიყენე გარე კვების ბლოკი USB HUB. ეს უზრუნველყოფს PI– ს ძალას.

მე ასევე გავწყვიტე ძველი USB კაბელის დასასრული და რელეები დავამუშავე მე -2 USB კავშირიდან კერაზე, რომ უსაფრთხოდ დარჩეს. ჩემი "წარმოების" ვერსია იყენებს მცირე ზომის 5V 5A გადამრთველის რეჟიმს. ისევ და ისევ, მე უბრალოდ გავწყვიტე USB ტყვიის ნახევარი, რომ Pi გავამყარო მიკრო USB- ის საშუალებით და გავწყვიტე ორი დუპონტის კონექტორი სარელეო დაფის გასაძლიერებლად. USB კაბელში არის 4 მავთული, უმეტესობა იყენებს წითელს/შავს 5 ვ მიწოდების აღსანიშნავად, მაგრამ თუ ეჭვი გაქვთ, გამოიყენეთ მრიცხველი, რომ დარწმუნდეთ, რომ სწორი მავთულები გაქვთ.

დაფაზე არსებული სარელეო ქინძისთავები უკავშირდება PI სათაურის შესაბამის GPIO პინებს.

კოდი გაძლევთ საშუალებას აირჩიოთ GPIO ქინძისთავები, მაგრამ ნაგულისხმევი მე გამოვიყენე:

  1. სარელეო პინი 1 - გრუნტი
  2. სარელეო პინი 2 - სარელეო 1 - GPIO 0
  3. სარელეო პინი 3 - სარელეო 2 - GPIO 1
  4. სარელეო პინი 4 - სარელეო 3 - GPIO 2
  5. სარელეო პინი 5 - სარელეო 4 - GPIO 3
  6. სარელეო პინი 6 - სარელეო 5 - GPIO 4
  7. სარელეო პინ 7 - სარელეო 6 - GPIO 5
  8. სარელეო პინი 8 - სარელეო 7 - GPIO 6
  9. სარელეო პინი 9 - რელე 8 - GPIO 7
  10. სარელეო პინი 10 - +5v ლოგიკისთვის

ნაბიჯი 2: PI დაყენება

მე არ ვაპირებ ხელახლა შევქმნა გაკვეთილი, თუ როგორ უნდა ამოქმედდეს თქვენი PI და ჩართოთ ქსელში.

არსებობს მრავალი სახელმძღვანელო, მათ შორის შესანიშნავი ინსტრუქცია:

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

თქვენ უნდა მიხვიდეთ იმ წერტილამდე, სადაც PI ჩანს ქსელში და შეგიძლიათ დაუკავშირდეთ მას.

არ აქვს მნიშვნელობა ეს ხდება Ethernet– ით თუ უკაბელო საშუალებით.

ეს პროექტი შეიძლება დასრულდეს მხოლოდ Raspberry PI– ით Geany Programmers Editor– ის გამოყენებით, მაგრამ მე პირადად მიადვილდება კომპიუტერზე ვიმუშაო ვიზუალური სტუდიის ან Eclipse– ის (ან თუნდაც Notepad ++) გამოყენებით და შემდეგ ავტვირთო PI– ში გამართვის მიზნით VNC კავშირი. კიდევ ერთხელ არ ვაპირებ ამის გაშუქებას, რადგან ბევრი შესანიშნავი ინსტრუქციაა RPi– ზე VNC– ის დაყენების შესახებ.

ყველაფერი რაც თქვენ გჭირდებათ არის მიაღწიოთ იმ წერტილს, სადაც შეგიძლიათ ატვირთოთ და შეადგინოთ კოდი.

ერთი შენიშვნა, რაც მნიშვნელოვანია, არის ის, რომ ვინაიდან UPNP დამმუშავებელს სჭირდება UDP მულტიკასტი, გამოყენებული ინტერფეისები უნდა იყოს დაყენებული "პრომისკულური" რეჟიმში.

ეს შეიძლება გაკეთდეს ბრძანების ხაზზე:

pi@raspberrypi: $ ifconfig eth0 promisc

და / ან

pi@raspberrypi: if $ ifconfig wlan0 promisc

ეს უნდა იყოს მუდმივი, ასე რომ მე შევცვალე /etc/rc.local

sudo nano / etc / rc.local

ხაზი უნდა შეიცავდეს:

sudo ifconfig eth0 promisc

ბანერის # ხაზების პირველი ნაკრების შემდეგ, რათა უზრუნველყოთ ინტერფეისების დაყენება გაშვებისას.

ნაბიჯი 3: კოდის ჩამოტვირთვა და შედგენა

კოდი თავად ზის ჩემს Github საცავში;

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

მიუხედავად იმისა, რომ არსებობს საცავის კლონირების "სწორი" გზები. მე უფრო გამიადვილდა მხოლოდ Geany რედაქტორის გახსნა Pi დესკტოპზე და ჩასვით კოდი.

ანალოგიურად, თუ თქვენ იყენებთ ბრძანების ხაზს;

შექმენით ახალი დირექტორია

mkdir სტუ

შეცვალეთ იგი

cd სტუ

შექმენით ახალი ტექსტური ფაილი

ნანო StuPiMo.c

დააკოპირეთ კოდი Github ნედლეულიდან და ჩასვით ახალ ფაილში

Შენახვა და გამოსვლა.

მას შემდეგ რაც ფაილი გაქვთ როგორც C კოდის ობიექტი, შეგიძლიათ მისი შედგენა გამოყენებით

gcc -o StuPiMo StuPiMo.c -l გაყვანილობაPi

გაითვალისწინეთ, რომ "-l wiringPi" საჭიროა იმის უზრუნველსაყოფად, რომ შემდგენელი კავშირშია საჭირო wiringPi ბიბლიოთეკაში.

ამის შემდეგ კოდის გაშვება შესაძლებელია გამოყენებით

./StuPiMo

კიდევ ერთხელ, თუ გსურთ რომ ეს გაშვებული იყოს, გამოიყენეთ ბრძანება:

sudo nano /etc/rc.local

შემდეგი სტრიქონის დასამატებლად

sudo/home/pi/Stu/StuPiMo &

თქვენს /etc/rc.local ფაილზე. არ დაგავიწყდეთ ფაილის შენახვა გასასვლელში.

გაითვალისწინეთ, რომ „და“აუცილებელია იმის უზრუნველსაყოფად, რომ წარმოიქმნება ქვე-პროცესი, რათა დარწმუნდეს, რომ სკრიპტი არ დაბლოკილია ამ ეტაპზე.

ნაბიჯი 4: მისი გამოყენება

მას შემდეგ რაც კოდს გაუშვებთ, სთხოვეთ ალექსას "აღმოაჩინეთ მოწყობილობები" და მან უნდა იპოვოს ვირტუალური Wemo 8 -ვე მოწყობილობა.

შემდეგ უბრალოდ საქმეა ნათქვამი: "Alexa ჩართე სოკეტი 1" ან "Alexa გამორთე სოკეტი 6" და ა.შ. და შესაბამისი სარელეო შეიცვლება.

ნაბიჯი 5: როგორ მუშაობს კოდი

კოდი მუშაობს Belkin Wemo ბუდე მოწყობილობების სერიის მიბაძვით.

ამის მისაღწევად მას უნდა შეასრულოს 2 ძირითადი ფუნქცია

  • UPNP აღმოჩენის მაუწყებლობის დამმუშავებელი
  • "მოწყობილობის დამმუშავებელი" (ერთი ვირტუალურ მოწყობილობაზე) მოწყობილობაზე გაგზავნილი ბრძანებების და საჭირო პასუხების მართვისთვის.

"ბონუს" თვისება ის არის, რომ ის ასევე აქვეყნებს ვებ გვერდს მოწყობილობების კონტოლის დასაშვებად.

UPNP დამმუშავებელი

UPNP დამმუშავებელი ხსნის სოკეტს SSDP პროტოკოლის პაკეტების მონიტორინგისთვის 239.255.255.250 პორტზე 1900.

ის პასუხობს ნებისმიერ "M-SEARCH" შეკითხვას, რომელიც მოდის აღმოჩენის საპასუხო პაკეტით, რომელიც აცხადებს ინდივიდუალურ ვემო ემულატორებს ყველას, ვინც სთხოვს.

მოწყობილობის დამმუშავებელი

მოწყობილობის დამმუშავებლები (ერთი ვირტუალურ მოწყობილობაზე) აკონტროლებენ IP პორტების სერიას და პასუხობენ მოთხოვნებს.

ის მოგაწვდით setup.xml პასუხს მოთხოვნისას

ის მოემსახურება ღონისძიების აღწერილობის ფაილს, როდესაც მას სთხოვენ

ის უპასუხებს GETBINARYSTATE მოთხოვნას

ის დაამუშავებს და უპასუხებს SETBINARYSTATE მოთხოვნას

ვებ სერვერი

ვებ სერვერი არის მარტივი რუტინა, რომელიც ქმნის HTML ფორმას, რომელიც შეიცავს ღილაკს თითო რელეში.

ის უპასუხებს დაჭერილ ღილაკებს და შესაბამისად გადართავს რელეს მდგომარეობას.

ნაბიჯი 6: პერსონალიზაცია და მეგობრული სახელები

პერსონალიზაცია და მეგობრული სახელები
პერსონალიზაცია და მეგობრული სახელები

მე არ გავგიჟებულვარ კოდზე, რომ ის მარტივი და რედაქტირებადი იყოს.

საფუძვლები შეიძლება მორგებული იყოს კოდის დასაწყისში განსაზღვრებებით:

// გლობალური განმარტებები#განსაზღვრეთ WEBPORT 5353 // პორტი ვებ სერვერის გასაშვებად

#განსაზღვრეთ NUMDEVICES 8 // ვირტუალური მოწყობილობების რაოდენობა შესაქმნელად

#განსაზღვრეთ PORTBASE 43450 // ბაზის IP პორტი, რათა გაიზარდოს

WEBPORT არის პორტის ნომერი, რომელზედაც მუშაობს ჩაშენებული ვებ სერვერი. ეს შეიძლება 80 -ზე დაჯდეს, რომ საქმეები გამარტივდეს, მაგრამ აღმოვაჩინე, რომ ეს ეწინააღმდეგებოდა ტომქატს ან ადგილობრივ სერვისებს.

NUMDEVICES განსაზღვრავს ინდივიდუალური WEMO ემულატორების რაოდენობას გასაშვებად. თუ თქვენ გაქვთ 2 პორტიანი სარელეო ბარათი, დააყენეთ ეს 2, 4 პორტი = 4 და ა.

მოწყობილობების მეგობრული სახელები მითითებულია რუტინაში სახელწოდებით setup_names:

int setup_names (char მეგობრული [NUMDEVICES] [NAMELEN]) {int i = 0;

// გამოიყენეთ ეს მარყუჟი

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

sprintf (მეგობრული , "სოკეტი %d", i + 1);

}

// ან შემდეგი სახელმძღვანელო ცხრილი მოწყობილობის სახელების შესავსებად

/*

strcpy (მეგობრული [0], "საძინებელი ტელევიზია");

strcpy (მეგობრული [1], "ელექტრო საბანი");

strcpy (მეგობრული [2], "საძინებელი ნათურა");

strcpy (მეგობრული [3], "სოკეტი 4");

strcpy (მეგობრული [4], "სოკეტი 5");

strcpy (მეგობრული [5], "სოკეტი 6");

strcpy (მეგობრული [6], "სოკეტი 7");

strcpy (მეგობრული [7], "სოკეტი 8");

*/

დავბრუნდე;

}

მე გამოვიყენე მარყუჟი თითოეულ მოწყობილობაზე "Socket n", მაგრამ თქვენ შეგიძლიათ წაშალოთ ეს მარყუჟი და დაამატოთ თქვენი საკუთარი მეგობრული სახელები (უბრალოდ დარწმუნდით, რომ დაამატეთ იგივე ნომერი, როგორც NUMDEVICES) თუ თქვენ წაშლით / * * /

დაიმახსოვრეთ კოდის ხელახლა შედგენა, თუ რაიმე ცვლილებას შეიტანთ.

გირჩევთ: