Kazalo:

Dodajte projekt Alexa Alexa po meri projektu Raspberry Pi: 5 korakov
Dodajte projekt Alexa Alexa po meri projektu Raspberry Pi: 5 korakov

Video: Dodajte projekt Alexa Alexa po meri projektu Raspberry Pi: 5 korakov

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

Ta projekt je namenjen vsem, ki imajo projekt Raspberry Pi, ki uporablja Python in želi dodati glasovni nadzor prek svojih obstoječih naprav Amazon Echo. Ni vam treba biti izkušen programer, vendar bi morali biti zadovoljni z uporabo ukazne vrstice in prilagajanjem obstoječe kode svojim potrebam.

Sprva sem se lotil projekta, ki bi omogočil glasovno vodenje moje Raspberry Pi z Alexa, tako da bi lahko segreval vodo v kotličku na določeno temperaturo. Čeprav je bila interakcija, ki sem jo želel, precej preprosta (prenesite eno številko iz Alexa v Raspberry Pi), je bilo potrebno veliko dela, da ste do tega stanja prišli iz obstoječih vadnic. Upam, da bo ta vaja čim hitrejša za druge.

V svojem primeru začnem z Raspberry Pi Zero W z Raspbian. Na svojem Pi -ju imam program Python3, ki lahko zapiše besedilo na zaslon SPI, in imam termometrično sondo, ki jo lahko preberem. Za vas bi bil ta program lahko skoraj vse, vendar je ideja, da imate morda nekaj vhodnih naprav, ki jih želite prebrati prek Alexa, in/ali nekatere izhodne naprave, ki jih želite nadzirati z Alexa.

Cilj je preiti iz osnovnega programa, kot je zgoraj opisan, v napravo, ki jo lahko preprosto upravljate z mojim Echoom. Ob predpostavki, da že imate to strojno opremo, vas ta projekt ne bi smel stati. Na koncu boste prišli do točke, ko boste lahko povedali stvari, kot so:

Jaz: "Alexa, vprašaj moj pripomoček, naj preveri temperaturo na senzorju 1."

Alexain odgovor: "Sonda bere 72,31 stopinje."

ali

Jaz: "Alexa, povej mojemu pripomočku, naj napiše George Washington"

Odgovor: Zaslon, povezan z mojim Raspberry Pi, se zdaj glasi "George Washington"

V naslednjem razdelku bom opisal, kaj se mora v ozadju zgoditi, da bo to delovalo. Če želite le, da to deluje na vašem projektu in vam ni vseeno, kako deluje, ga preskočite (čeprav bi lahko otežilo, če gre kaj narobe).

1. korak: Ozadje

Ozadje
Ozadje

Na tej sliki (kredit: https://developer.amazon.com/en-US/docs/alexa/alex…) lahko vidimo splošno arhitekturo pripomočkov Alexa.

Ko rečete svoji napravi Echo, ta pošlje zvok v oblak Alexa, kjer se obdela in kjer se ustvari odziv, ki vam odgovori. Ko vprašate, kakšno je vreme, sta ravno ta dva v komunikaciji. Zdaj pa recimo, da želite enemu od svojih majhnih projektov na Raspberry Pi dodati glasovni nadzor. Za obdelavo vsega na krovu bi bila potrebna znatna strojna oprema in zelo izpopolnjena kodna baza. Boljša rešitev bi bila uporaba Alexa Cloud, ki je zelo prefinjen in je zelo dobro obvladal zapletene govorne vzorce. Alexa Gadgets vam omogočajo dober način za to.

Pripomoček Alexa komunicira z napravo Echo prek Bluetootha. Ko je ta povezava vzpostavljena, oba posredujeta sporočila s kodiranjem UTF-8. Ko Echo nekaj posreduje pripomočku, se to imenuje direktiva. Druga smer se imenuje dogodek. Preden se lotimo natančnega poteka vsega tega, bi morali predstaviti še en ključni element: prilagojene spretnosti Alexa.

Alexa razvijalcem omogoča ustvarjanje lastnih veščin po meri, kar jim omogoča, da oblikujejo svoje interakcije in vedenje za uporabo na vseh napravah Echo. Razvijalec bi lahko na primer ustvaril spretnost po meri, ki vam pove razdaljo med dvema letališčema v ZDA. Uporabnik bi rekel: "Alexa, vprašaj moj kalkulator razdalje po meri, kakšna je razdalja med LAX in JFK", in bi lahko odgovoril z "2475 milj". Kako to počne? Ko razvijalec naredi spretnost po meri, opredeli tako imenovane "namene po meri" z "vzorčnimi izjavami", ki vsebujejo "slote". Na primer, v tej veščini bi lahko imel namen "calc_dist" izračunati razdaljo med dvema točkama. Vzorec izreka bi bil "kakšna je razdalja med {slot1} in {slot2}" ali "kako daleč med {slot1} in {slot2}". Reže, prikazane v oklepajih, imajo posebne vrste. V tem primeru bi bile te vrste letalskih oznak, kot so LAX, JFK, BOS, ATL. Ko uporabnik zahteva spretnost po meri, Alexa Cloud poskuša s priloženimi vzorčnimi izjavami ujemati, kaj uporabnik pove, z namenom po meri in poskuša najti veljavne vrednosti mesta za to zahtevo. V tem primeru bi ugotovili, da je uporabnik želel namen "calc_dist" in da je slot1 LAX, slot2 pa JFK. Na tej točki Alexa Cloud prenese delo na lastno kodo razvijalca. V bistvu med drugim razlaga razvijalcem kodo, kakšen namen je prejel in kakšne so bile vse vrednosti reže.

Razvijalec se lahko odloči, kje živi njegova koda, vendar je zelo priljubljena možnost uporaba funkcije AWS Lambda. Če ne veste, kaj je to, je v bistvu storitev, ki vam omogoča, da naložite kodo, ki jo lahko kadar koli zaženete, in vam nato zaračuna le čas, ko se koda zažene. Če nadaljujemo z našim primerom, je lahko koda razvijalca funkcija Python, ki sprejme dve oznaki letališč, poišče njihove lokacije, izračuna razdalje in nato pošlje odgovor nazaj v oblak Alexa, da uporabniku nekaj pove. Alexa Cloud bi nato te govorne podatke poslal nazaj na uporabnikovo napravo in dobili bi odgovor.

Zdaj se lahko vrnemo k pripomočku. Ustvarjamo lahko spretnosti po meri, ki so zasnovane za delo s pripomočki. Razvijalec lahko napiše spretnost, ki pošlje direktivo povezanemu pripomočku. Ta direktiva ima koristno obremenitev, ki jo je mogoče uporabiti, vendar jo pripomoček potrebuje. Ta spretnost lahko pošlje tudi direktivo in nato prisluhne dogodku iz pripomočka, tako da ima koda spretnosti dostop do informacij, poslanih iz pripomočka.

Vzpostavitev tega toka omogoča ustvarjanje zelo močnega orodja, saj lahko poceni pripomočki komunicirajo s kodo v oblaku in se odzovejo na glasovne ukaze z uporabo nekaterih najboljših razpoložljivih glasov.

Treba je opozoriti, da večina spretnosti omogoča različne načine interakcije z njimi. Uporabnik lahko na primer skoči naravnost v namen z besedami "Alexa, vprašaj moj kalkulator razdalje po meri, kakšna je razdalja med LAX in JFK" (imenovano enkratno klicanje), ali pa preprosto uporabi namero zagona: "Alexa, odpri moj kalkulator razdalje po meri ". Temu zadnjemu primeru bi Alexa običajno odgovoril s pozivom za več informacij. Ta vadnica namenoma izpušča podporo slednjim. Natančneje, brez spreminjanja funkcije Lambda lahko spretnost prikličete le z enkratnim priklicem. Ta izbira oblikovanja omogoča, da je model bolj enostaven (ni nujno, da podpira namere zagona ali tok pogovora), in ugotovil sem, da ponavadi vseeno želim komunicirati s svojimi pripomočki z enkratno priklicem, saj so običajno hitrejši.

2. korak: Registrirajte pripomoček na konzoli za razvijalce Alexa Voice Service

Spodaj je opis potrebnih korakov. Ustvaril sem enakovreden video, ki prikazuje, kako narediti vse te korake. Za dokončanje tega koraka lahko uporabite eno ali oboje.

  1. Pomaknite se na
  2. Če še nimate brezplačnega računa, ga ustvarite
  3. Kliknite na "Izdelki"
  4. Izpolnite oznake in izberite "Alexa Gadget"
  5. Za preostala polja izpolnite kar želite
  6. Kliknite Dokončaj

3. korak: Ustvarite funkcijo AWS Lambda in spretnost po meri

Ustvarite spretnost po meri na konzoli za razvijalce Alexa Skills Kit

Kodo za to vadnico najdete tukaj

Preden dokončate ta korak, boste morali ustvariti datoteko.zip, ki vsebuje uvedbeni paket za funkcijo AWS Lambda, kot je prikazano v vadnici tukaj.

  1. Prenesite mapo "lambda" z mojega Github -a, ki vsebuje "lambda_function.py" in "requirements.txt"
  2. Odprite terminal in spremenite trenutni imenik v to mapo.
  3. Zaženite naslednje zaporedje:

pip install -r requirements.txt -t skill_env

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

Vaša datoteka.zip bo zdaj v imeniku, kjer je bila mapa lambda, in se bo imenovala "skill-code.zip".

Opomba o stroških gostovanja na AWS: Ta vadnica zahteva, da imate račun AWS (brezplačen za ustvarjanje). Lambda funkcije stanejo, vendar so njihove trenutne cene v regiji N. Virginia 0,000000208 USD na 100 ms uporabe s 128 MB pomnilnika. Za referenco vsak poziv moje sposobnosti pomeni približno 800 ms uporabe na tej stopnji. Če želite zbrati račun v višini 1,00 USD, bi morali to funkcijo priklicati približno 600 000 -krat, kar bi vam (če vam vzame 5 sekund na priklic) vzelo več kot 34 dni neprekinjenega klicanja funkcije. Stroški ne bi smeli biti pomemben problem, razen če objavite svoje znanje in ga začne uporabljati ogromno ljudi. Če ste zaskrbljeni, da bi dobili račune za AWS, razmislite o nastavitvi alarmov o uporabi, ki vas obvestijo, če uporaba preseže določen prag.

Spodaj je opis potrebnih korakov. Ustvaril sem enakovreden videoposnetek, ki prikazuje, kako narediti vse te korake. Za dokončanje tega koraka lahko uporabite eno ali drugo.

  1. Pomaknite se na https://aws.amazon.com/ in se prijavite v konzolo ali ustvarite brezplačen račun, če ga nimate
  2. Poiščite in kliknite Lambda pod storitvami
  3. Kliknite "Ustvari funkcijo"
  4. Izberite "Avtor iz nič", mu dajte ime in izberite najnovejšo različico Pythona 3 za čas izvajanja
  5. Spremenite »edit code inline« v »upload a.zip file« in izberite zgoraj ustvarjeno datoteko.zip
  6. V novem oknu pojdite na https://developer.amazon.com/alexa/console/ask in se prijavite
  7. Kliknite "Ustvari spretnost"
  8. Označite ga, izberite model »Po meri« in »Zagotovite si svojega« in kliknite »Ustvari spretnost«
  9. Kliknite »Začni iz nič« in kliknite »Izberi«
  10. Pri »Namen« kliknite »Dodaj«
  11. Ustvarite namen po meri z imenom "alexa_to_pi" in kot vzorec izreka vnesite "write {person}"
  12. Naredite režo za namen, imenovano "oseba", z vrsto "AMAZON. Oseba"
  13. Ustvarite namen po meri z imenom "pi_to_alexa" in vnesite "preverite temperaturo s senzorja {sensor_num}
  14. Naredite režo za namen, imenovano "sensor_num", z vrsto "AMAZON. NUMBER"
  15. V razdelku Vmesniki vklopite "Krmilnik vmesnika po meri"
  16. V razdelku Endpoint izberite "AWS Lambda ARN" in kopirajte "Your Skill ID"
  17. Pomaknite se nazaj do konzole AWS
  18. Kliknite "Dodaj sprožilec"
  19. Izberite "Alexa Skills Kit", potrdite "Enable" pod Verification ID Skill, prilepite ID Skill, ki ste ga pravkar kopirali, in kliknite add
  20. Kopirajte Lambda ARN v zgornjem desnem kotu
  21. Pomaknite se nazaj do konzole za razvijalce Alexa in prilepite Lambda ARN v polje »Privzeta regija«
  22. V razdelku Poziv nastavite Ime sklica poklica na "moj pripomoček"
  23. Kliknite »Shrani model« in nato »Sestavi model«
  24. Na zgornjih zavihkih kliknite »Preizkusi« in spremenite izbirnik iz »Izklop« v »Razvoj«
  25. Upoštevajte, da se dnevniki za funkcijo Lambda nahajajo v storitvi "CloudWatch" na AWS.

4. korak: Nastavite kodo na svojem Raspberry Pi

Če želite, da Raspberry Pi komunicira z napravo Alexa, poleg nekaj drugih datotek potrebuje še nekaj kode za olajšanje prenosa informacij po bluetoothu in vzdrževanje te povezave. Najlažji način, da začnete z najnovejšimi datotekami iz Amazona, je kloniranje njihovega skladišča pripomočkov Raspberry Pi Gadgets. Pomaknite se do imenika svojega trenutnega projekta in zaženite

git clone

To bo naložilo celotno skladišče z vso potrebno kodo na vaš Pi. Ima nekaj primerov projektov, ki kažejo nekatere sposobnosti Alexa Gadgets. Če želite več informacij, si oglejte readme na njihovi strani Github.

Zaženite njihovo nastavitveno funkcijo, da nastavite vse.

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

sudo python3 launch.py --setup

Sledite pozivom in na vprašanje, ali želite konfigurirati uporabo poverilnic za pripomoček, odgovorite z "y". Spomnite se, da sta Amazon ID in Skrivnost pripomočkov nastavila vaš pripomoček na konzoli za razvijalce, saj bo to zahtevano tukaj. Za svoj računalnik Raspberry Pi Zero W sem izbral način prenosa "bt". BLE ne podpirajo vse starejše naprave Echo, vendar lahko poiščete, česa zmore vaša strojna oprema. Če uporabljate svoj Pi v namiznem načinu, Amazon priporoča, da z desno miškino tipko kliknete ikono bluetooth v zgornjem desnem kotu in kliknete »Odstrani« Bluetooth »s plošče«, da se izognete težavam s povezavo.

Opomba: ta korak lahko traja nekaj časa, odvisno od tega, koliko je treba namestiti.

Zdaj boste imeli vse potrebne podporne datoteke, da se vrnete v svoj projekt in začnete dodajati funkcije, ki omogočajo komunikacijo z vašim Echoom.

Če se odločite, lahko izbrišete mapo "examples" v "Alexa-Gadgets-Raspberry-Pi-Samples/src"

Kodo projekta lahko imate, kjer koli želite, vendar bom zanjo naredil mapo v domačem imeniku, lahko pa tudi prenesete mapo s kodo iz mojega Github -a, samo uredite datoteke.ini, kot je opisano spodaj.

cd /home /pi

mkdir my_project cd my_project dotik my_gadget.py dotik my_gadget.ini

Zdaj sem ustvaril dve datoteki v mapi z imenom "moj_projekt". Datoteka.ini je pomembna. Prepričajte se, da vsebuje naslednje in nadomestilo v vašem Amazon ID -ju in skrivnosti pripomočka:

[Nastavitve pripomočkov]

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

Zdaj pa poglejmo datoteko python, preden se spustimo v podrobnosti:

uvoz json

iz agt uvoz 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 ("Prejeti podatki:" + str (payload)) write_text (str (payload ['data'] ['person'] ['vrednost ']))

def on_custom_mygadget_pitoalexa (self, direktiva):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Prejeti podatki:" + str (payload)) payload = {'data': "Sonda bere" + str (get_temp (payload ['data'] ['sensor_num'] ['value'])) + "stopinje."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', payload) MyGadget (). main ()

Najprej boste opazili, da kliče dve funkciji: write_text () in get_temp (). V svoji kodi te funkcije definiram v isti datoteki, vendar so odvisne od moje strojne opreme, zato sem se jih odločil izpustiti. To datoteko sem priložil s tistimi funkcijami, ki samo natisnejo in vrnejo lažne podatke, če želite zagnati točno to kodo. Predlagam, da preizkusite s to točno kodo, preden jo spremenite za delo s svojim projektom. Priložil sem tudi datoteko.ini, vendar ne pozabite vstopiti in spremeniti skrivnosti ID -ja in pripomočka. Zgornja funkcija sprejema podatke, poslane iz Alexa. Spodnja funkcija prejema podatke v isti obliki zapisa, vendar bo naprava Alexa čakala pet sekund, da se dogodek vrne z lastno nosilnostjo. Ta obremenitev je posebna po tem, da naprava Alexa govori svojo vsebino.

Ko imate te datoteke, se pomaknite do mape "my_project" in zaženite datoteko python.

sudo ponovni zagon

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

Če prvič zaženete program, ga boste morali povezati z napravo Echo. Prepričajte se, da je vaša naprava Echo v bližini Raspberry Pi, saj moramo omogočiti povezavo Bluetooth.

V aplikaciji Alexa na svoji mobilni napravi kliknite »naprave« v spodnjem desnem kotu.

V zgornjem levem kotu kliknite »Echo & Alexa«.

Kliknite na svojo napravo Echo.

Pri »WIRELESS« se dotaknite »Bluetooth Devices«.

Dotaknite se »PARI NOVO NAPRAVO« in na seznamu bi moral biti prikazan vaš pripomoček.

Dotaknite se svojega pripomočka. Videti bi morali poročilo Pi, da je bilo uspešno seznanjeno.

Medtem ko gledate izhod na svojem Pi, poskusite glasovno ukaziti Echo:

Ti: "Alexa, vprašaj moj pripomoček, naj preveri temperaturo iz senzorja ena"

Če je vse delovalo pravilno, bi morali slišati:

Odmev: "Sonda odčita 120.505 stopinj."

Ti: "Alexa, povej mojemu pripomočku, naj napiše George Washington."

Pi mora natisniti:

"Prejeti podatki: {" data ": {" person ": {" name ":" person "," value ":" George Washington "," confirmationStatus ":" NIČ "}}}

George Washington"

5. korak: Zaključek

Videoposnetek, prikazan tukaj, je primer pripomočka, ki deluje z odčitavanjem temperature (ista sonda v F proti C) in pisanjem imen na preprost zaslon.

Zdaj, ko upamo, da vam kaj uspe, poskusite to prilagoditi, da bo vaš projekt bolj zmogljiv. Ne pozabite, da lahko namene preprosto uredite v konzoli za razvijalce Alexa in da bodo vse reže, ki jih uporabljate, prenesene na vaš Pi v nosilnosti. Poleg tega lahko Alexa poveste vse, kar želite, tako da preprosto uredite koristno obremenitev, ki jo prenesete v primeru iz kode Raspberry Pi.

Upoštevajte, da ta vadnica ni končna rešitev za vse zmogljivosti, ki bi jih lahko želeli s pripomočkom Alexa. Namerno je omejeno, da vam omogoči dve preprosti funkciji za prenos podatkov v vsaki smeri med Alexa in pripomočkom. Če vas zanima izdelava bolj izpopolnjenih modelov interakcije, vas prosim, da preberete vse datoteke readme na https://github.com/alexa/Alexa-Gadgets-Raspberry-P… in preizkusite vse primere, ki jih ponujajo. Predlagam tudi, da preberete dokumentacijo za Alexa Gadgets Toolkit in Alexa Skills Kit.

Priporočena: