Sadržaj:

Dodajte prilagođenu Alexa kontrolu Raspberry Pi projektu: 5 koraka
Dodajte prilagođenu Alexa kontrolu Raspberry Pi projektu: 5 koraka

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

Video: Dodajte prilagođenu Alexa kontrolu Raspberry Pi projektu: 5 koraka
Video: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, Jun
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 naredbenu liniju i prilagođavati postojeći kôd svojim potrebama.

U početku sam krenuo u projekt koji će omogućiti moju Raspberry Pi da se glasom kontrolira pomoću Alexa tako da može zagrijati vodu u čajniku na određenu temperaturu. Iako je interakcija koju sam želio bila prilično jednostavna (proslijedite jedan broj s Alexa na Raspberry Pi), bilo je potrebno mnogo rada da se dođe do tog stanja iz postojećih vodiča. Nadam se da će ovaj vodič učiniti taj proces što bržim za druge.

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 ekran i imam sondu termometra koju mogu pročitati. Za vas bi ovaj program mogao biti gotovo bilo što, ali ideja je da možda imate neke ulazne uređaje koje želite čitati putem Alexa i/ili neke izlazne uređaje koje želite kontrolirati pomoću Alexa.

Cilj je preći s osnovnog programa, poput ovog opisanog gore, na uređaj kojim možete jednostavno upravljati pomoću mog Echo -a. Pod pretpostavkom da već imate ovaj hardver, ovaj projekt vas ne bi trebao koštati novca. Na kraju ćete doći do tač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 stepen."

ili

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

Odgovor: Na ekranu povezanom sa mojim Raspberry Pi -om sada piše "George Washington"

U sljedećem odjeljku opisat ću šta se iza scene mora dogoditi da bi ovo funkcioniralo. Ako samo želite da ovo radi na vašem projektu i nije vam važno kako funkcionira, slobodno ga preskočite (mada bi to moglo otežati ako nešto pođe 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.

Kada 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 glasovnu kontrolu jednom od svojih malih projekata na Raspberry Pi -u. Obrada svega na brodu zahtijevala bi značajan hardver i vrlo sofisticiranu bazu kodova da bi stvari krenule. 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 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 prenose poruke koristeći UTF-8 kodiranje. Kad Echo nešto proslijedi gadžetu, to se naziva direktiva. Drugi smjer se naziva događajem. Prije nego što krenemo u točan tok svega ovoga, trebali bismo predstaviti još jedan ključni element: prilagođene Alexa vještine.

Alexa omogućava programerima da stvore vlastite prilagođene vještine, što im omogućava 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 dva aerodroma 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 sa "2475 milja". Kako to radi? Kada programer napravi prilagođenu vještinu, oni definiraju ono što se naziva "prilagođene namjere" sa "uzorci iskaza" koji sadrže "slotove". Na primjer, u ovoj vještini možda imam namjeru "calc_dist" za izračunavanje udaljenosti između dvije točke. Uzorak izgovora bi bio "kolika je udaljenost između {slot1} i {slot2}" ili "koliko je udaljena između {slot1} i {slot2}". Prorezi prikazani u zagradama imaju posebne tipove. U ovom slučaju tipovi bi 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, otkrilo 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, on kaže kod programera kakvu je namjeru primio i koje su sve vrijednosti utora, između ostalih detalja.

Programer odlučuje gdje njihov kod živi, ali vrlo popularna opcija je upotreba AWS Lambda funkcije. Ako ne znate o čemu se radi, to je u osnovi usluga koja vam omogućuje postavljanje 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, kod programera mogao bi biti Python funkcija koja prima dva aerodromska koda, traži njihove lokacije, izračunava udaljenosti, a zatim šalje odgovor natrag u Alexa Cloud kako bi nešto rekao korisniku. Alexa Cloud bi zatim poslao te govorne informacije natrag na korisnikov uređaj i oni bi dobili odgovor.

Sada se možemo vratiti na spravu. Možemo stvoriti prilagođene vještine koje su dizajnirane za rad sa spravicama. Programer može napisati vještinu koja šalje direktivu povezanom gadgetu. Ta direktiva ima korisni teret koji se može koristiti, međutim to je potrebno gadžetu. Ta vještina može poslati i direktivu, a zatim osluškivati događaj iz gadžeta, tako da kôd vještine može imati pristup informacijama poslanim s gadžeta.

Uspostavljanje ovog toka omogućava 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.

Treba 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 rekavši "Alexa, pitaj moj prilagođeni kalkulator udaljenosti koja je udaljenost između LAX-a i JFK-a" (naziva se jednokratni poziv) ili bi jednostavno mogli upotrijebiti namjeru lansiranja: "Alexa, otvori moj prilagođeni kalkulator udaljenosti ". Nakon ovog posljednjeg primjera obično bi slijedila Alexa koja bi odgovorila sa zahtjevom za više informacija. Ovaj vodič namjerno izostavlja podršku za ovo drugo. Preciznije, bez mijenjanja Lambda funkcije, vještinu možete pozvati samo pomoću jednokratnog dozivanja. Ovaj izbor dizajna omogućuje modelu da bude jednostavniji (ne mora podržavati namjere pokretanja ili tok 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 Alexa Voice Service Developer Console

Slijedi opis potrebnih koraka. Napravio sam ekvivalentan video koji prikazuje kako se izvode svi ovi koraci. Da biste dovršili ovaj korak, možete koristiti oboje ili oboje.

  1. Idite na
  2. Ako već nemate besplatan račun, napravite ga
  3. Kliknite na "Proizvodi"
  4. Popunite oznake i odaberite "Alexa Gadget"
  5. Popunite šta god želite za ostala polja
  6. Pritisnite Finish

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

Kreirajte 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 AWS Lambda funkciju kako je prikazano u vodiču ovdje.

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

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 fascikla 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 kreiranje). Lambda funkcije zaista koštaju, međutim, njihove trenutne cijene u regiji N. Virginia iznose 0,000000208 USD po 100 ms korištenja sa 128 MB memorije. Za referencu, svako pozivanje na moju vještinu iznosi oko 800 ms upotrebe na ovom nivou. Da biste prikupili 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) trebalo 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 ako je veliki broj ljudi ne počne koristiti. Ako ste zabrinuti zbog dobivanja računa na AWS -u, razmislite o postavljanju alarma za upotrebu koji će vas obavijestiti ako upotreba pređe definirani prag.

Slijedi opis potrebnih koraka. Napravio sam ekvivalentan video koji prikazuje kako se izvode svi ovi koraci. Da biste dovršili ovaj korak, možete koristiti oboje ili oboje.

  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 na Lambda pod uslugama
  3. Kliknite na "Kreiraj funkciju"
  4. Odaberite "Autor od nule", 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. Kliknite "Počni od ogrebotine" i kliknite "Odaberi"
  10. U odjeljku "Namjere" kliknite "Dodaj"
  11. Kreirajte prilagođenu namjeru pod nazivom "alexa_to_pi" i popunite "write {person}" kao ogledni izraz
  12. Napravite utor za namjeru pod nazivom "osoba" s tipom "AMAZON. Osoba"
  13. Kreirajte prilagođenu namjeru pod nazivom "pi_to_alexa" i unesite "provjerite temperaturu sa senzora {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. Pod Endpoint, odaberite "AWS Lambda ARN" i kopirajte "Your Skill ID"
  17. Vratite se na AWS konzolu
  18. Kliknite na "Dodaj okidač"
  19. Odaberite "Alexa Skills Kit", označite "Enable" u okviru Skill ID verification, zalijepite Skill ID 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. Kliknite na "Test" na gornjim karticama i promijenite birač iz "Off" u "Development"
  25. Imajte na umu da se dnevnici 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 iz Amazona je kloniranje njihovog spremišta Raspberry Pi Gadgets. Idite 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 Gadgets. 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 sa "y" na pitanje želite li konfigurirati pomoću vjerodajnica vašeg gadgeta. Prisjetite se Amazon ID -a i tajne gadgeta koji su postavili vaš gadget na konzoli za 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 pogledati za što je vaš hardver sposoban. Ako koristite svoj Pi u načinu rada za računare, 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 Echo -om.

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

Kod projekta možete imati gdje god želite, ali ja ću za njega napraviti mapu u kućnom direktoriju. Alternativno, možete preuzeti mapu s kodom 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".. Ini datoteka je važna. Budite sigurni da sadrži sljedeće i zamjenu u vašem Amazon ID -u i tajni gadgeta:

[Postavke gadžeta]

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:

import json

from agt import AlexaGadget

klasa 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 koje definiraju samo ispisivanje i vraćanje lažnih podataka u slučaju da želite pokrenuti upravo ovaj kod. Predlažem testiranje s ovim točno 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 gadžeta. 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 je poseban po tome što će Alexa uređaj govoriti svoj sadržaj.

Kada dobijete ove datoteke, idite u mapu "my_project" i pokrenite python datoteku.

sudo reboot

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 gadžet na listi.

Dodirnite svoj gadget. Trebali biste vidjeti izvještaj Pi da je uspješno uparen.

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

Vi: "Alexa, pitaj moj gadget da provjeri temperaturu sa senzora jedan"

Ako je sve radilo ispravno, trebali biste čuti:

Odjek: "Sonda očitava 120.505 stepeni."

Vi: "Alexa, reci mom gadžetu da napiše George Washington."

Pi bi trebao odštampati:

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

George Washington"

Korak 5: Zaključak

Videozapis koji je ovdje prikazan primjer je gadžeta koji radi sa očitanjem temperature (ista sonda u F naspram C) i upisivanjem imena na jednostavan ekran.

Nadamo se da sada nešto funkcionira, pokušajte to prilagoditi kako biste svoj projekt učinili sposobnijim. Upamtite da namjere možete lako urediti u Alexa Developer Console -u i da će svi utori koje koristite biti proslijeđeni vašem Pi -u 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 prosljeđivanje 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đe bih predložio da pročitate dokumentaciju za Alexa Gadgets Toolkit i Alexa Skills Kit.

Preporučuje se: