Sadržaj:

Dodajte prilagođenu Alexa kontrolu u projekt Raspberry Pi: 5 koraka
Dodajte prilagođenu Alexa kontrolu u projekt Raspberry Pi: 5 koraka

Video: Dodajte prilagođenu Alexa kontrolu u projekt Raspberry Pi: 5 koraka

Video: Dodajte prilagođenu Alexa kontrolu u projekt Raspberry Pi: 5 koraka
Video: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, Studeni
Anonim
Dodajte prilagođenu Alexa kontrolu Raspberry Pi projektu
Dodajte prilagođenu Alexa kontrolu Raspberry Pi projektu

Ovaj je projekt namijenjen svima koji imaju projekt Raspberry Pi koji koristi Python i koji žele dodati glasovnu kontrolu putem svojih postojećih Amazon Echo uređaja. Ne morate biti iskusan programer, ali bi vam trebalo biti ugodno koristiti naredbeni redak i prilagoditi postojeći kôd svojim potrebama.

U početku sam krenuo u projekt koji će omogućiti moju Raspberry Pi glasovnu kontrolu pomoću Alexa tako da može zagrijati vodu u kuhalu za vodu do određene temperature. Iako je interakcija koju sam želio bila prilično jednostavna (proslijedite jedan broj iz Alexa u Raspberry Pi), bilo je potrebno puno rada da biste došli do tog stanja iz postojećih vodiča. Nadam se da će ovaj vodič drugima učiniti taj proces što bržim.

U mom primjeru počinjem s Raspberry Pi Zero W s Raspbian -om. Na svom Pi -u imam program Python3 koji može pisati tekst na SPI zaslon i imam sondu termometra koju mogu pročitati. Za vas bi ovaj program mogao biti gotovo bilo što, ali ideja je da biste mogli imati neke ulazne uređaje koje želite čitati putem Alexa i/ili neke izlazne uređaje koje želite kontrolirati pomoću Alexa.

Cilj je prijeći s osnovnog programa, poput ovog gore opisanog, na uređaj kojim možete jednostavno upravljati pomoću moje Echo. Pod pretpostavkom da već imate ovaj hardver, ovaj projekt vas ne bi trebao koštati novca. Na kraju ćete doći do točke u kojoj možete reći stvari poput:

Ja: "Alexa, zamoli moj gadget da provjeri temperaturu na senzoru 1."

Alexain odgovor: "Sonda očitava 72,31 stupanj."

ili

Ja: "Alexa, reci mom gadgetu da napiše George Washington"

Odgovor: Zaslon povezan s mojim Raspberry Pi sada glasi "George Washington"

U sljedećem odjeljku opisat ću što se iza kulisa mora dogoditi da bi ovo uspjelo. Ako samo želite da ovo radi na vašem projektu i nije vam važno kako funkcionira, slobodno ga preskočite (iako bi moglo otežati ako nešto krene po zlu).

Korak 1: Pozadina

Pozadina
Pozadina

Na ovoj slici (kredit: https://developer.amazon.com/en-US/docs/alexa/alex…) možemo vidjeti opću arhitekturu Alexa Gadgeta.

Kad nešto kažete svom Echo uređaju, on šalje zvuk u Alexa Cloud, gdje se obrađuje i gdje se generira odgovor koji vam odgovara. Kad pitate kakvo je vrijeme, u komunikaciji su samo njih dvoje. Pretpostavimo sada da želite dodati glasovno upravljanje jednom od svojih malih projekata na Raspberry Pi. Obrada svega na vozilu zahtijevala bi značajan hardver i vrlo sofisticiranu bazu kodova da bi se stvari pokrenule. Bolje rješenje bilo bi iskoristiti Alexa Cloud, koji je vrlo sofisticiran i postao je vrlo dobar u rukovanju složenim obrascima govora. Alexa Gadgets pružaju vam dobar način da to učinite.

Alexa Gadget komunicira s Echo uređajem putem Bluetootha. Nakon što se ova veza uspostavi, njih dvije međusobno prosljeđuju poruke pomoću kodiranja UTF-8. Kad Echo nešto proslijedi gadgetu, to se naziva direktivom. Drugi smjer naziva se događajem. Prije nego što krenemo u točan tijek svega ovoga, trebali bismo uvesti još jedan ključni element: prilagođene Alexa vještine.

Alexa omogućuje programerima stvaranje vlastitih prilagođenih vještina, što im omogućuje da osmisle vlastite interakcije i ponašanja za upotrebu na svim Echo uređajima. Na primjer, programer bi mogao stvoriti prilagođenu vještinu koja će vam reći udaljenost između dvije zračne luke u SAD -u. Korisnik bi rekao: "Alexa, pitaj moj prilagođeni kalkulator udaljenosti koja je udaljenost između LAX -a i JFK -a" i mogao bi odgovoriti s "2475 milja". Kako to radi? Kada programer stvori prilagođenu vještinu, oni definiraju ono što se naziva "prilagođene namjere" s "uzornim iskazima" koji sadrže "mjesta". Na primjer, u ovoj vještini mogao bih imati namjeru "calc_dist" izračunati udaljenost između dvije točke. Uzorak izgovora bio bi "koja je udaljenost između {slot1} i {slot2}" ili "koliko je udaljena između {slot1} i {slot2}". Utori prikazani u zagradama imaju određene vrste. U ovom slučaju ti bi tipovi bili aerodromski kodovi kao što su LAX, JFK, BOS, ATL. Kada korisnik zatraži prilagođenu vještinu, Alexa Cloud pokušava uskladiti ono što korisnik kaže s prilagođenom namjerom koristeći isporučene uzorke izraza i pokušava pronaći važeće vrijednosti mjesta za taj zahtjev. U ovom primjeru utvrdilo bi se da je korisnik želio namjeru "calc_dist" i da je slot1 LAX, a slot2 JFK. U ovom trenutku Alexa Cloud prenosi posao na vlastiti kôd programera. U osnovi, između ostalog, govori programerskom kodu koju je namjeru primio i koje su sve vrijednosti utora.

Programer odlučuje gdje njihov kôd živi, ali vrlo popularna opcija je korištenje AWS Lambda funkcije. Ako ne znate što je to, to je u biti usluga koja vam omogućuje učitavanje koda koji se može pokrenuti u bilo kojem trenutku, a zatim vam naplaćuje samo onoliko vremena koliko se vaš kôd pokrene. Ako nastavimo s našim primjerom, kôd razvojnog programera mogao bi biti Python funkcija koja prima dvije šifre zračnih luka, traži njihove lokacije, izračunava udaljenosti i zatim šalje odgovor natrag u Alexa Cloud kako bi nešto rekao korisniku. Alexa Cloud bi zatim poslao te govorne podatke natrag na korisnikov uređaj, a oni bi dobili odgovor.

Sada se možemo vratiti na gadget. Možemo stvoriti prilagođene vještine koje su dizajnirane za rad posebno s gadgetima. Programer može napisati vještinu koja šalje direktivu povezanom gadgetu. Ta direktiva ima korisni teret koji se može koristiti kako god je potrebno gadgetu. Ta vještina također može poslati direktivu, a zatim osluškivati događaj iz gadgeta, tako da kôd vještine može imati pristup podacima poslanim s gadgeta.

Uspostavljanje ovog toka omogućuje stvaranje vrlo moćnog alata jer jeftini gadgeti mogu imati mogućnost komunikacije s kodom u oblaku i odgovaranja na glasovne naredbe koristeći neke od najboljih dostupnih prepoznavanja glasa.

Valja napomenuti da većina vještina dopušta različite načine interakcije s njima. Na primjer, korisnik može skočiti ravno u namjeru govoreći: "Alexa, pitaj moj prilagođeni kalkulator udaljenosti koja je udaljenost između LAX-a i JFK-a" (naziva se jednokratni poziv) ili jednostavno mogu upotrijebiti namjeru pokretanja: "Alexa, otvori moj prilagođeni kalkulator udaljenosti ". Nakon ovog zadnjeg primjera obično bi slijedila Alexa koja bi odgovorila upitom za dodatne informacije. Ovaj vodič namjerno izostavlja podršku potonjem. Točnije, bez mijenjanja Lambda funkcije, vještinu možete pozvati samo pomoću jednokratnog doziva. Ovaj odabir dizajna omogućuje modelu da bude jednostavniji (ne mora podržavati namjere pokretanja ili tijek razgovora), a otkrio sam da ionako obično želim komunicirati sa svojim gadgetima koristeći jednokratne pozive jer su obično brži.

Korak 2: Registrirajte gadget na konzoli za programere Alexa Voice Service

Slijedi opis potrebnih koraka. Napravio sam ekvivalentan videozapis koji pokazuje kako napraviti sve ove korake. Za dovršetak ovog koraka možete koristiti jedno ili drugo.

  1. Idite na
  2. Ako još nemate besplatan račun, napravite ga
  3. Kliknite na "Proizvodi"
  4. Ispunite oznake i odaberite "Alexa Gadget"
  5. Ispunite što želite za ostala polja
  6. Pritisnite Završi

Korak 3: Stvorite AWS Lambda funkciju i prilagođenu vještinu

Izradite prilagođenu vještinu na razvojnoj konzoli Alexa Skills Kit

Kôd za ovaj vodič možete pronaći ovdje

Prije nego dovršite ovaj korak, morat ćete stvoriti.zip datoteku koja sadrži paket implementacije za funkciju AWS Lambda kako je prikazano u vodiču ovdje.

  1. Preuzmite mapu "lambda" s mog Github -a koja sadrži "lambda_function.py" i "requirements.txt"
  2. Otvorite terminal i promijenite trenutni direktorij u ovu mapu.
  3. Pokrenite sljedeći slijed:

pip install -r requirements.txt -t skill_env

cp lambda_function.py skill_env cd skill_env zip -r../../skill-code.zip

Vaša.zip datoteka sada će se nalaziti u direktoriju u kojem je bila lambda mapa i zvat će se "skill-code.zip".

Napomena o troškovima hostinga na AWS -u: Ovaj vodič zahtijeva da imate AWS račun (slobodan za stvaranje). Lambda funkcije koštaju, međutim, njihova trenutna cijena u regiji N. Virginia iznosi 0,000000208 USD po 100 ms korištenja sa 128 MB memorije. Za referencu, svaki poziv na moju vještinu iznosi oko 800 ms korištenja na ovom nivou. Da biste skupili račun od 1,00 USD, morali biste pozvati ovu funkciju oko 600 000 puta, što bi vam (ako vam treba 5 sekundi po pozivu) oduzelo više od 34 dana neprekidnog pozivanja vaše funkcije. Troškovi ne bi trebali biti značajan problem ako ne objavite svoju vještinu i dok je veliki broj ljudi ne počne koristiti. Ako ste zabrinuti oko dobivanja računa na AWS -u, razmislite o postavljanju alarma o upotrebi koji će vas obavijestiti ako upotreba prijeđe definirani prag.

Slijedi opis potrebnih koraka. Napravio sam ekvivalentan videozapis koji pokazuje kako napraviti sve ove korake. Za dovršetak ovog koraka možete koristiti jedno ili drugo.

  1. Idite na https://aws.amazon.com/ i prijavite se na konzolu ili stvorite besplatni račun ako ga nemate
  2. Potražite i kliknite Lambda pod uslugama
  3. Kliknite "Izradi funkciju"
  4. Odaberite "Autor ispočetka", dajte mu ime i odaberite najnoviju verziju Pythona 3 za vrijeme izvođenja
  5. Promijenite "edit code inline" u "upload a.zip file" i odaberite gornju datoteku.zip
  6. U novom prozoru idite na https://developer.amazon.com/alexa/console/ask i prijavite se
  7. Kliknite na "Stvori vještinu"
  8. Označite ga, odaberite "Prilagođeni" model i "Osigurajte svoj" i kliknite "Stvori vještinu"
  9. Pritisnite "Počni od nule" i kliknite "Odaberi"
  10. U odjeljku "Namjere" kliknite "Dodaj"
  11. Izradite prilagođenu namjeru pod nazivom "alexa_to_pi" i ispunite "write {person}" kao ogledni izraz
  12. Napravite utor za namjeru pod nazivom "osoba" s tipom "AMAZON. Osoba"
  13. Izradite prilagođenu namjeru pod nazivom "pi_to_alexa" i ispunite "provjeri temperaturu s osjetnika {sensor_num}
  14. Napravite utor za namjeru pod nazivom "sensor_num" s tipom "AMAZON. NUMBER"
  15. U odjeljku Sučelja uključite "Kontroler prilagođenog sučelja"
  16. U odjeljku Krajnja točka odaberite "AWS Lambda ARN" i kopirajte "Vaš ID vještine"
  17. Vratite se na AWS konzolu
  18. Kliknite "Dodaj okidač"
  19. Odaberite "Alexa Skills Kit", označite "Enable" u okviru Skill ID verification, zalijepite ID Skill koji ste upravo kopirali i kliknite add
  20. Kopirajte Lambda ARN u gornjem desnom kutu
  21. Vratite se na Alexa Developer Console i zalijepite Lambda ARN u polje "Zadana regija"
  22. U odjeljku Pozivanje postavite naziv poziva na vještinu na "moj gadget"
  23. Kliknite "Spremi model", a zatim "Izradi model"
  24. Pritisnite "Test" na gornjim karticama i promijenite birač s "Off" na "Development"
  25. Imajte na umu da se zapisnici za Lambda funkciju nalaze u usluzi "CloudWatch" na AWS -u.

Korak 4: Postavite kôd na svom Raspberry Pi

Da bi vaš Raspberry Pi mogao komunicirati s Alexa uređajem, potreban mu je neki kôd za olakšavanje prijenosa informacija putem Bluetootha i održavanje te veze, uz nekoliko drugih datoteka. Najlakši način da započnete s najnovijim datotekama s Amazona je kloniranje njihovog spremišta Raspberry Pi Gadgets. Dođite do direktorija vašeg trenutnog projekta i pokrenite ga

git clone

Ovo će učitati cijelo njihovo spremište sa svim potrebnim kodom na vaš Pi. Ima neke primjere projekata koji pokazuju neke od mogućnosti Alexa Gadgeta. Ako želite više informacija, pročitajte readme na njihovoj stranici Github.

Pokrenite njihovu funkciju postavljanja kako biste sve konfigurirali.

cd/home/pi/Alexa-Gadgets-Raspberry-Pi-Samples

sudo python3 launch.py --setup

Slijedite upute i odgovorite s "y" na pitanje želite li konfigurirati pomoću vjerodajnica za gadget. Prisjetite se Amazonovog ID -a i tajne gadgeta koji su postavili vaš gadget na konzoli za razvojne programere jer će se ovdje tražiti. Odabrao sam "bt" način prijenosa za svoj Raspberry Pi Zero W. BLE ne podržavaju svi stariji Echo uređaji, ali možete potražiti za što je sposoban vaš hardver. Ako koristite svoj Pi u načinu rada za računala, Amazon preporučuje da desnom tipkom miša kliknete ikonu bluetooth u gornjem desnom kutu i kliknete "Ukloni" Bluetooth "s ploče" kako biste izbjegli probleme s povezivanjem.

Napomena: ovaj korak može potrajati, ovisno o tome koliko je potrebno instalirati.

Sada ćete imati sve potrebne datoteke podrške za povratak na svoj projekt i početak dodavanja funkcija koje omogućuju komunikaciju s vašim odjekom.

Ako odaberete, možete izbrisati mapu "primjeri" u "Alexa-Gadgets-Raspberry-Pi-Samples/src"

Kôd projekta možete imati gdje god želite, ali za njega ću napraviti mapu u kućnom direktoriju. Alternativno, mapu s kodom možete preuzeti s mog Github -a, samo uredite.ini datoteke kako je dolje opisano.

cd /home /pi

mkdir my_project cd my_project dodir my_gadget.py dodir my_gadget.ini

Sada sam stvorio dvije datoteke u mapi pod nazivom "moj_projekt". Datoteka.ini je važna. Budite sigurni da sadrži sljedeće i zamjenu u vašem Amazon ID -u i tajni gadgeta:

[Postavke gadgeta]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapabilities] Custom. MyGadget = 1.0

Pogledajmo sada python datoteku prije nego uđemo u detalje:

uvoziti json

from agt import AlexaGadget

razred MyGadget (AlexaGadget):

def _init _ (samo):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (self, direktiva):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Primljeni podaci:" + str (korisni teret)) write_text (str (korisni teret ['podaci'] ['osoba'] ['vrijednost ']))

def on_custom_mygadget_pitoalexa (self, direktiva):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Primljeni podaci:" + str (korisni teret)) payload = {'data': "Sonda čita" + str (get_temp (korisni teret ['data'] ['sensor_num'] ['value'])) + "stupnjevi."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', korisni teret) MyGadget (). main ()

Prvo ćete primijetiti da poziva dvije funkcije: write_text () i get_temp (). U svom kodu definiram ove funkcije u istoj datoteci, ali one ovise o mom hardveru pa sam ih odlučio izostaviti. Priložio sam ovu datoteku s tim funkcijama definiranim samo za ispis i vraćanje lažnih podataka u slučaju da želite pokrenuti upravo ovaj kod. Predlažem testiranje s ovim točnim kodom prije nego što ga izmijenite za rad sa svojim projektom. Priložio sam i.ini datoteku, ali svakako uđite i promijenite ID i tajnu gadgeta. Vrhunska funkcija prima podatke proslijeđene iz Alexa. Donja funkcija prima podatke u istom formatu, ali Alexa uređaj će čekati pet sekundi da se događaj vrati sa vlastitim korisnim opterećenjem. Ovaj korisni teret poseban je po tome što će Alexa uređaj govoriti svoj sadržaj.

Nakon što imate ove datoteke, idite u mapu "my_project" i pokrenite datoteku python.

sudo ponovno podizanje sustava

cd/home/pi/my_project sudo python3./my_gadget.py

Ako prvi put pokrećete program, morat ćete ga upariti sa svojim Echo uređajem. Provjerite je li vaš Echo uređaj u blizini Raspberry Pi jer moramo omogućiti Bluetooth vezu.

U aplikaciji Alexa na svom mobilnom uređaju kliknite "uređaji" u donjem desnom kutu.

Kliknite "Echo & Alexa" u gornjem lijevom kutu.

Kliknite na svoj Echo uređaj.

U odjeljku "BEŽIČNO" dodirnite "Bluetooth uređaji".

Dodirnite "UPARITE NOVI UREĐAJ" i trebali biste vidjeti svoj gadget na popisu.

Dodirnite svoj gadget. Trebali biste vidjeti izvješće Pi da je uspješno upareno.

Dok gledate izlaz na svom Pi -u, pokušajte dati glasovnu naredbu Echo -u:

Vi: "Alexa, zamoli moj gadget da provjeri temperaturu s senzora jedan"

Ako je sve radilo ispravno, trebali biste čuti:

Odjek: "Sonda očitava 120.505 stupnjeva."

Vi: "Alexa, reci mom gadgetu da napiše George Washington."

Pi bi trebao ispisati:

Primljeni podaci: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

George Washington"

Korak 5: Zaključak

Videozapis koji je ovdje prikazan primjer je gadgeta koji radi s očitanjem temperature (ista sonda u F u odnosu na C) i ispisivanjem imena na jednostavan zaslon.

Nadamo se da sada nešto funkcionira, pokušajte to prilagoditi kako biste svoj projekt učinili sposobnijim. Upamtite da namjere možete jednostavno urediti u Alexa Developer Consoleu i da će svi utori koje koristite biti proslijeđeni vašem Pi u korisnom opterećenju. Nadalje, možete navesti Alexa da kaže sve što želite samo uređivanjem korisnog tereta koji prosljeđujete u događaju iz vašeg Raspberry Pi koda.

Imajte na umu da ovaj vodič nije namjera konačno rješenje za sve mogućnosti koje biste željeli s Alexa Gadgetom. Namjerno je ograničeno dati vam dvije jednostavne funkcije za prijenos podataka u svakom smjeru između Alexa i gadgeta. Ako ste zainteresirani za izgradnju sofisticiranijih modela interakcije, preporučio bih vam da pročitate sve datoteke readme na https://github.com/alexa/Alexa-Gadgets-Raspberry-P… i isprobate sve primjere koje oni pružaju. Također bih predložio da pročitate dokumentaciju za Alexa Gadgets Toolkit i Alexa Skills Kit.

Preporučeni: