Mundarija:

Alexa Raspberry Pi o'rni boshqaruvchisi: 6 qadam
Alexa Raspberry Pi o'rni boshqaruvchisi: 6 qadam

Video: Alexa Raspberry Pi o'rni boshqaruvchisi: 6 qadam

Video: Alexa Raspberry Pi o'rni boshqaruvchisi: 6 qadam
Video: BUILD YOUR OWN AMAZON ALEXA ASSISTANT - Powered by Raspberry Pi 2024, Noyabr
Anonim
Alexa Raspberry Pi o'rni boshqaruvchisi
Alexa Raspberry Pi o'rni boshqaruvchisi
Alexa Raspberry Pi o'rni boshqaruvchisi
Alexa Raspberry Pi o'rni boshqaruvchisi
Alexa Raspberry Pi o'rni boshqaruvchisi
Alexa Raspberry Pi o'rni boshqaruvchisi

Men bu ko'rsatmalarni IOT qurilmalarini Amazonning Alexa -ga qo'shish tajribam bilan bo'lishish uchun yaratdim.

Ushbu loyiha malina pi ga ulangan o'rni taxtasini smarthome kontrolleridan boshqarishga imkon beradi.

U Alexa bilan sinovdan o'tgan, lekin Samsung Smartthings va boshqa boshqaruv interfeyslari bilan yaxshi ishlaydi, chunki u bir qator Belkin Wemo uyalarini taqlid qiladi.

Zo'r FAUXMO kodiga asoslangan juda ko'p misollar bor, lekin bu pythonni o'rganishni anglatardi va menga o'z qurilmalarim uchun zarur bo'lgan batafsil nazoratni bermadi, shuning uchun men o'zimni kodlash tili sifatida C yordamida noldan qayta yaratishga qaror qildim.

Men ham Amazon.com saytida lambda kodining chuqurligiga kirishni xohlamadim, shuning uchun men uni juda sodda tutdim.

Men Github -da manba va eslatmalarni joylashtirdim:

github.com/Switchdoctorstu/StuPiMo

O'quv qo'llanma, albatta, uni qanday ishlashini va boshqalarga yordam bersa, mening yozuvlarimni chop etishni o'z ichiga oladi.

1 -qadam: Ta'minot va ulanishlar

Ta'minot va ulanishlar
Ta'minot va ulanishlar
Ta'minot va ulanishlar
Ta'minot va ulanishlar
Ta'minot va ulanishlar
Ta'minot va ulanishlar

Sizga kerak bo'lgan narsalar Amazon / EBay -da mavjud:

  • Malina PI *
  • Pi quvvat manbai
  • Dupont ulagichlari
  • O'rnatish paneli
  • Eski mikro USB kabeli (o'rni kartasining quvvatini yarmiga qisqartirish uchun)

Har qanday malina Pi ishlaydi, men buni Model B va Zero -da sinab ko'rdim.

*Agar Pi Zero -dan foydalansangiz, sizga OTG tarmoq adapteri kerak bo'ladi (agar siz WiFi -da "W" versiyasini sotib olmasangiz)

Siz Pi -ni tarmoqqa ulashingiz kerak bo'ladi.

Röle kartasini Pi -ga ulash uchun dupont ulagichlaridan foydalaning.

E'tibor bering, o'rni kartasi tashqi quvvatdan foydalanishi kerak (havolani olib tashlang va tashqi 5v ga ulang). Bu PI yordamida ishlaydi, lekin ishlab chiqarishda ishlash tavsiya etilmaydi.

O'rnatish uchun men tashqi quvvat manbai bo'lgan USB HUBdan foydalanardim. Bu PI quvvatini ta'minlaydi.

Men ham xavfsiz bo'lish uchun eski USB kabelining uchini kesib tashladim va o'rni 2 -chi USB ulanishidan uyaga uzatdim. Mening "ishlab chiqarish" versiyamda 5V 5A kalitli kichik quvvat manbai ishlatiladi. Yana men Micro-USB orqali Pi-ni quvvatlantirish uchun USB simini yarmini kesib tashladim va o'rni kartasini quvvatlantirish uchun dupontli ikkita ulagichni kesib tashladim. USB simida 4 ta sim bor, ularning aksariyati 5v kuchlanishini ko'rsatish uchun qizil/qora rangdan foydalanadi, lekin agar shubhangiz bo'lsa, to'g'ri simlarni olishingizga ishonch hosil qilish uchun hisoblagichdan foydalaning.

Bortdagi o'rni pinlari PI sarlavhasidagi tegishli GPIO pinlariga ulangan.

Kod GPIO pinlarini tanlashga imkon beradi, lekin men ishlatgan standart:

  1. O'rnimizni pimi 1 - er
  2. O'rnimizni pin 2 - o'rni 1 - GPIO 0
  3. O'rnimizni 3 -o'rni - 2 -o'rni - GPIO 1
  4. 4 -o'rni pinasi - 3 -o'rni - GPIO 2
  5. O'rnimizni 5 -o'rni - 4 -o'rni - GPIO 3
  6. O'rnimizni 6 -o'rni - 5 -o'rni - GPIO 4
  7. O'rnimizni pin 7 - o'rni 6 - GPIO 5
  8. O'rnimizni pin 8 - o'rni 7 - GPIO 6
  9. 9 -o'rni pin - 8 -o'rni - GPIO 7
  10. Mantiq uchun 10 - +5V o'rni pin

2 -qadam: PIni sozlash

Men PI-ni ishga tushirish va tarmoqqa ulanish bo'yicha qo'llanmani qayta yaratmayman.

Ko'p qo'llanmalar mavjud, shu jumladan:

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

Siz o'zingizni tarmoqdagi PI ko'rinadigan joyga olib borishingiz kerak va siz unga ulanishingiz mumkin.

Bu Ethernet orqali yoki simsiz ulanishi muhim emas.

Ushbu loyihani Geany Programmers Editor yordamida Raspberry PI bilan yakunlash mumkin, lekin men shaxsan o'zim kodni kompyuterda Visual Studio yoki Eclipse (yoki hatto Notepad ++) yordamida tayyorlashni osonlashtiraman va keyin uni disk raskadrovka uchun PI -ga yuklayman. VNC ulanishi. Shunga qaramay, men bu erda gapirmoqchi emasman, chunki RPi -da VNC -ni sozlash bo'yicha juda ko'p yaxshi ko'rsatmalar mavjud.

Kodni yuklash va kompilyatsiya qilish mumkin bo'lgan joyga etib borish kifoya.

Muhim bo'lgan bitta eslatma shundaki, UPNP ishlov beruvchisi UDP multicast -ni talab qilganligi sababli, ishlatilgan interfeyslar "Promiscuous" rejimiga o'rnatilishi kerak.

Buni buyruq satrida bajarish mumkin:

pi@raspberrypi: ~ $ ifconfig eth0 promisc

va / yoki

pi@raspberrypi: ~ $ ifconfig wlan0 promisc

Buni doimiy qilish kerak, shuning uchun men /etc/rc.local -ni tahrir qildim

sudo nano / etc / rc.local

qatorni kiritish uchun:

sudo ifconfig eth0 promisc

bannerlar # qatorlarining birinchi to'plamidan so'ng interfeyslarni ishga tushirishda o'rnatilishini ta'minlash.

3 -qadam: Kodni yuklab olish va kompilyatsiya qilish

Kodning o'zi mening Github omborida joylashgan;

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

omborni klonlashning "to'g'ri" usullari mavjud. Men Pi ish stolida Geany muharririni ochish va kodni joylashtirishni osonlashtirdim.

Xuddi shunday, agar siz buyruq satridan foydalanayotgan bo'lsangiz;

Yangi katalog yarating

mkdir Stu

Unga o'zgartiring

CD Stu

Yangi matnli fayl yarating

nano StuPiMo.c

Github xom -kodidan nusxa oling va uni yangi faylga joylashtiring

Saqlash va chiqish.

Faylni C manba kodli ob'ekt sifatida olganingizdan so'ng, uni yordamida kompilyatsiya qilishingiz mumkin

gcc -o StuPiMo StuPiMo.c -l wiringPi

E'tibor bering, "-l wiringPi" shikoyatchi wiringPi kutubxonasiga ulanishini ta'minlash uchun kerak.

Keyin kod yordamida ishga tushirish mumkin

./StuPiMo

Shunga qaramay, agar siz buni ishga tushirishni xohlasangiz, buyruqni ishlating:

sudo nano /etc/rc.local

quyidagi qatorni qo'shish uchun

sudo/home/pi/Stu/StuPiMo va

/etc/rc.local faylingizga. Chiqishda faylni saqlashni unutmang.

E'tibor bering, "&" bu vaqtda skript bloklanmaganligiga ishonch hosil qilish uchun pastki jarayonning paydo bo'lishini ta'minlash uchun zarur.

4 -qadam: undan foydalanish

Kodni ishga tushirgandan so'ng, alexadan "Qurilmalarni kashf qilish" ni so'rang, u 8 ta virtual Wemo qurilmasini topishi kerak.

Bu shunchaki: "Alexa rozetkani yoqing 1" yoki "Alexa rozetkani o'chiring 6" va hokazo.

5 -qadam: Kod qanday ishlaydi

Kod Belkin Wemo soket qurilmalarini taqlid qilib ishlaydi.

Bunga erishish uchun u ikkita asosiy funktsiyani bajarishi kerak

  • UPNP kashfiyot translyatsiyasi boshqaruvchisi
  • qurilmaga yuborilgan buyruqlar va kerakli javoblarni boshqarish uchun "qurilma ishlovchisi" (har bir virtual qurilmaga bittasi).

"Bonus" xususiyati shundaki, u qurilmalarni boshqarishga ruxsat beruvchi veb -sahifani ham nashr etadi.

UPNP ishlovchisi

UPNP ishlovchisi 1900 239.255.255.250 portda SSDP protokoli paketlarini kuzatish uchun rozetkani ochadi.

U har bir "M-SEARCH" so'roviga javob beradi, u kashfiyot javob paketi bilan, har bir so'ragan odamga individual wemo emulyatorlarini e'lon qiladi.

Qurilma boshqaruvchisi

Qurilma ishlovchilari (har bir virtual qurilmaga bittadan) bir qator IP -portlarni kuzatib boradi va so'rovlarga javob beradi.

Agar so'ralsa, u setup.xml javobini beradi

Bu so'ralganda, u voqea tavsifi fayliga xizmat qiladi

U GETBINARYSTATE so'roviga javob beradi

U SETBINARYSTATE so'rovini ko'rib chiqadi va unga javob beradi

Veb -server

Veb -server - bu har bir o'rni uchun tugmachani o'z ichiga olgan HTML shaklini tuzadigan oddiy tartib.

U tugmachalarni bosilishiga javob beradi va o'rni holatini mos ravishda o'zgartiradi.

6 -qadam: Moslashtirish va do'stona ismlar

Moslashtirish va do'stona ismlar
Moslashtirish va do'stona ismlar

Men kodni oddiy va tahrir qilish uchun aqldan ozganim yo'q.

Asosiy ma'lumotni kodning boshidagi ta'riflar bilan sozlash mumkin:

// global ta'riflar#web -serverni ishga tushirish uchun WEBPORT 5353 // portini belgilaydi

#define NUMDEVICES 8 // Yaratiladigan virtual qurilmalar soni

#define PORTBASE 43450 // asosiy IP -portni yuqoriga ko'tarish

WEBPORT-bu o'rnatilgan veb-server ishlaydigan port raqami. Bu ishni osonlashtirish uchun 80 -da o'tirish mumkin edi, lekin men bu tomcat yoki mahalliy ishlaydigan boshqa xizmatlar bilan ziddiyatli ekanligini aniqladim.

NUMDEVICES ishga tushirish uchun individual WEMO emulyatorlarining sonini belgilaydi. Agar sizda 2 portli o'rni kartasi bo'lsa, uni 2, 4 port = 4 va boshqalarga o'rnating.

Qurilmalar uchun qulay nomlar "setup_names" deb nomlangan tartibda o'rnatiladi:

int setup_names (do'stona [NUMDEVICES] [NAMELEN]) {int i = 0;

// bu pastadirdan foydalaning

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

sprintf (do'stona , "Socket %d", i + 1);

}

// yoki qurilma nomlarini to'ldirish uchun quyidagi qo'llanma

/*

strcpy (do'stona [0], "Yotoqxonali televizor");

strcpy (do'stona [1], "Elektr adyol");

strcpy (do'stona [2], "Yotoqxonadagi chiroq");

strcpy (do'stona [3], "Socket 4");

strcpy (do'stona [4], "Socket 5");

strcpy (do'stona [5], "Socket 6");

strcpy (do'stona [6], "Socket 7");

strcpy (do'stona [7], "Socket 8");

*/

qaytish i;

}

Men "Socket n" qurilmalarining har biriga qo'ng'iroq qilish uchun pastadir ishlatardim, lekin siz / * * /o'chirsangiz, bu pastadirni o'chirib tashlashingiz va uning o'rniga o'zingizning qulay ismlaringizni qo'shishingiz mumkin (NUMDEVICES bilan bir xil raqamni qo'shganingizga ishonch hosil qiling).

Agar biror o'zgartirish kiritilsa, kodni qayta kompilyatsiya qilishni unutmang.

Tavsiya: