Sisällysluettelo:

Lisää mukautettu Alexa -ohjaus Raspberry Pi -projektiin: 5 vaihetta
Lisää mukautettu Alexa -ohjaus Raspberry Pi -projektiin: 5 vaihetta

Video: Lisää mukautettu Alexa -ohjaus Raspberry Pi -projektiin: 5 vaihetta

Video: Lisää mukautettu Alexa -ohjaus Raspberry Pi -projektiin: 5 vaihetta
Video: CS50 2015 - Week 5 2024, Heinäkuu
Anonim
Lisää mukautettu Alexa -ohjaus Raspberry Pi -projektiin
Lisää mukautettu Alexa -ohjaus Raspberry Pi -projektiin

Tämä projekti on tarkoitettu kaikille, joilla on Raspberry Pi -projekti, joka käyttää Pythonia ja jotka haluavat lisätä ääniohjauksen olemassa olevien Amazon Echo -laitteiden kautta. Sinun ei tarvitse olla kokenut ohjelmoija, mutta sinun on oltava mukava käyttää komentoriviä ja mukauttaa olemassa oleva koodi tarpeidesi mukaan.

Aloitin projektin, jonka avulla Raspberry Pi: tä voidaan ääniohjata Alexan kanssa, jotta se voi lämmittää veden kattilassa tiettyyn lämpötilaan. Vaikka haluamani vuorovaikutus oli melko yksinkertainen (välitä yksi numero Alexasta Raspberry Pi -laitteeseen), se vei paljon työtä päästäkseen tähän tilaan olemassa olevista opetusohjelmista. Toivon, että tämä opetusohjelma nopeuttaa prosessia muille mahdollisimman nopeasti.

Esimerkissäni aloitan Raspberry Pi Zero W: llä Raspbianin kanssa. Minulla on Python3 -ohjelma Pi -laitteessani, joka pystyy kirjoittamaan tekstiä SPI -näyttöön, ja minulla on lämpömittarianturi, jota voin lukea. Sinulle tämä ohjelma voi olla melkein mitä tahansa, mutta ajatuksena on, että sinulla saattaa olla joitain syöttölaitteita, jotka haluat lukea Alexan kautta, ja/tai joitain tulostuslaitteita, joita haluat ohjata Alexan avulla.

Tavoitteena on siirtyä edellä kuvatusta perusohjelmasta laitteeseen, jota voit helposti hallita Echollani. Olettaen, että sinulla on jo tämä laitteisto, tämän projektin ei pitäisi maksaa sinulle rahaa. Lopulta pääset siihen pisteeseen, jossa voit sanoa esimerkiksi:

Minä: "Alexa, pyydä gadgetiani tarkistamaan anturin 1 lämpötila."

Alexan vastaus: "Koetin näyttää 72,31 astetta."

tai

Minä: "Alexa, kerro gadgetilleni kirjoittaa George Washington"

Vastaus: Raspberry Pi -laitteeseeni yhdistetyssä näytössä lukee nyt "George Washington"

Seuraavassa osassa kuvailen, mitä täytyy tapahtua kulissien takana tämän työn tekemiseksi. Jos haluat vain saada tämän toimimaan projektissasi etkä välitä siitä, miten se toimii, voit ohittaa sen (vaikka se voi vaikeuttaa sitä, jos jokin menee pieleen).

Vaihe 1: Taustaa

Tausta
Tausta

Tässä kuvassa (luotto: https://developer.amazon.com/en-US/docs/alexa/alex… näemme Alexa-gadgetien yleisen arkkitehtuurin.

Kun sanot jotain Echo -laitteellesi, se lähettää äänen Alexa Cloudiin, jossa se käsitellään ja jossa sinulle luodaan vastaus. Kun kysyt, mikä sää on, se on vain nämä kaksi viestinnässä. Oletetaan nyt, että haluat lisätä ääniohjauksen yhteen pienistä Raspberry Pi -projekteistasi. Kaikkien laitteiden käsittely vaatii merkittävää laitteistoa ja erittäin hienostunutta koodikantaa asioiden käynnistämiseksi. Parempi ratkaisu olisi hyödyntää Alexa Cloudia, joka on erittäin hienostunut ja on saanut erittäin hyvän käsittelyn monimutkaisissa puhekuvioissa. Alexa -gadgetit tarjoavat sinulle hyvän tavan tehdä tämä.

Alexa -gadget kommunikoi Echo -laitteen kanssa Bluetoothin avulla. Kun tämä yhteys on muodostettu, molemmat välittävät toisilleen viestejä UTF-8-koodauksella. Kun Echo välittää jotain gadgetille, sitä kutsutaan direktiiviksi. Toista suuntaa kutsutaan tapahtumaksi. Ennen kuin ryhdymme tämän kaiken tarkkaan kulkuun, meidän on otettava käyttöön toinen keskeinen elementti: mukautetut Alexa -taidot.

Alexa antaa kehittäjille mahdollisuuden luoda omia taitojaan, joiden avulla he voivat suunnitella omat vuorovaikutuksensa ja käyttäytymisensä käytettäväksi kaikissa Echo -laitteissa. Kehittäjä voi esimerkiksi luoda mukautetun taidon, joka kertoo kahden Yhdysvaltojen lentokentän välisen etäisyyden. Käyttäjä sanoisi: "Alexa, kysy mukautetulta etäisyyslaskuriltani, mikä on LAX: n ja JFK: n välinen etäisyys", ja se voisi vastata "2475 maililla". Miten se tekee tämän? Kun kehittäjä tekee mukautetun taidon, he määrittelevät, mitä kutsutaan "mukautetuiksi aikomuksiksi", "näytelauseilla", jotka sisältävät "paikkoja". Esimerkiksi tässä taidossa minulla saattaa olla tarkoitus "calc_dist" laskea kahden pisteen välinen etäisyys. Esimerkkipuheena olisi "mikä etäisyys on {slot1} ja {slot2}" tai "kuinka kaukana {slot1} ja {slot2}". Suluissa näkyvät paikat ovat erityyppisiä. Tässä tapauksessa nämä tyypit olisivat lentoasemakoodeja, kuten LAX, JFK, BOS, ATL. Kun käyttäjä pyytää mukautettua taitoa, Alexa Cloud yrittää sovittaa käyttäjän sanoman mukautettuun tarkoitukseen käyttämällä toimitettuja näytelauseita ja yrittää löytää kelvolliset paikka -arvot kyseiselle pyynnölle. Tässä esimerkissä se havaitsisi, että käyttäjä halusi "calc_dist" tarkoituksen ja että paikka 1 on LAX ja paikka 2 on JFK. Tässä vaiheessa Alexa Cloud siirtää työn kehittäjän omalle koodille. Pohjimmiltaan se kertoo kehittäjille koodin, mitä tarkoitusta se sai ja mitä kaikki paikka -arvot olivat, muun muassa.

Kehittäjä saa päättää, missä heidän koodinsa asuu, mutta erittäin suosittu vaihtoehto on käyttää AWS Lambda -toimintoa. Jos et tiedä mitä se on, se on lähinnä palvelu, jonka avulla voit ladata koodin, joka voidaan suorittaa milloin tahansa, ja sitten veloittaa sinulta vain sen ajan, jonka koodisi suoritetaan. Jos jatkamme esimerkkiämme, kehittäjän koodi voi olla Python -toiminto, joka vastaanottaa kaksi lentoasemakoodia, etsii niiden sijainnit, laskee etäisyydet ja lähettää sitten vastauksen takaisin Alexa Cloudiin puhuakseen käyttäjälle jotain. Alexa Cloud lähettäisi sitten nämä puhetiedot takaisin käyttäjän laitteelle, ja he saisivat vastauksen.

Nyt voimme palata gadgetin pariin. Voimme luoda mukautettuja taitoja, jotka on suunniteltu toimimaan erityisesti gadgetien kanssa. Kehittäjä voi kirjoittaa taidon, joka lähettää direktiivin liitetylle gadgetille. Direktiivillä on hyötykuorma, jota voidaan käyttää, vaikka laite tarvitsisi sitä. Tämä taito voi myös lähettää direktiivin ja sitten kuunnella tapahtuman gadgetista, jotta taitokoodilla on pääsy gadgetista lähetettyihin tietoihin.

Tämän kulun salliminen luo erittäin tehokkaan työkalun, koska edulliset gadgetit voivat pystyä kommunikoimaan koodin kanssa pilvessä ja vastaamaan äänikomentoihin käyttämällä joitakin parhaista käytettävissä olevista äänentunnistuksista.

On huomattava, että useimmat taidot mahdollistavat erilaisia tapoja olla vuorovaikutuksessa heidän kanssaan. Käyttäjä voi esimerkiksi hypätä suoraan tarkoitukseen sanomalla "Alexa, kysy mukautetulta etäisyyslaskuriltani, mikä on LAX: n ja JFK: n välinen etäisyys" (kutsutaan yhdellä laukauksella) tai he voivat yksinkertaisesti käyttää käynnistysaikomusta: "Alexa, avaa mukautettu etäisyyslaskuri ". Tätä viimeistä esimerkkiä seuraa tyypillisesti Alexa, joka vastaa pyytämällä lisätietoja. Tässä opetusohjelmassa jätetään tarkoituksellisesti pois jälkimmäisen tuki. Tarkemmin sanottuna, muuttamatta Lambda-toimintoa, voit käyttää taitoa vain yhdellä laukauksella. Tämän suunnitteluvaihtoehdon ansiosta malli voi olla yksinkertaisempi (ei tarvitse tukea käynnistysaikoja tai keskusteluvirtaa), ja olen huomannut, että haluan yleensä olla vuorovaikutuksessa gadgetieni kanssa käyttämällä yhden laukauksen kutsuja joka tapauksessa, koska ne ovat yleensä nopeampia.

Vaihe 2: Rekisteröi gadget Alexa Voice Service Developer Consolessa

Seuraavassa on kuvaus tarvittavista vaiheista. Olen luonut vastaavan videon, joka näyttää, miten kaikki nämä vaiheet tehdään. Voit käyttää jompaakumpaa tai molempia tämän vaiheen suorittamiseen.

  1. Siirry osoitteeseen
  2. Jos sinulla ei vielä ole ilmaista tiliä, luo sellainen
  3. Napsauta "Tuotteet"
  4. Täytä tarrat ja valitse "Alexa -gadget"
  5. Täytä mitä haluat muille kentille
  6. Napsauta Valmis

Vaihe 3: Luo AWS Lambda -toiminto ja mukautettu taito

Luo mukautettu taito Alexa Skills Kit Developer Consolessa

Tämän opetusohjelman koodi löytyy täältä

Ennen tämän vaiheen suorittamista sinun on luotava.zip -tiedosto, joka sisältää AWS Lambda -toiminnon käyttöönottopaketin, kuten tässä oppaassa on esitetty.

  1. Lataa Githubista kansio "lambda", joka sisältää "lambda_function.py" ja "vaatimukset.txt"
  2. Avaa pääte ja muuta nykyinen hakemisto tämän kansion sisälle.
  3. Suorita seuraava järjestys:

pip asennus -r vaatimukset.txt -t skill_env

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

. Zip-tiedostosi sijaitsee nyt hakemistossa, jossa lambda-kansio oli, ja sen nimi on "skill-code.zip".

Huomautus AWS: n isännöintikustannuksista: Tämä opetusohjelma edellyttää, että sinulla on AWS -tili (vapaasti luotava). Lambdatoiminnot maksavat rahaa, mutta niiden nykyinen hinta N. Viitteelliseksi, jokainen taitoni kutsuminen laskuttaa noin 800 ms: n käytön tällä tasolla. Jos haluat kerätä 1,00 dollarin laskun, sinun on käynnistettävä tämä toiminto noin 600 000 kertaa, mikä (jos se vie 5 sekuntia kutsua kohden) vie yli 34 päivää jatkuvaa soittamista toimintoosi. Kustannusten ei pitäisi olla merkittävä ongelma, ellet julkaise taitojasi ja valtava määrä ihmisiä alkaa käyttää sitä. Jos olet huolissasi laskujen saamisesta AWS: lle, harkitse käyttöhälytysten asettamista, jotka ilmoittavat sinulle, jos käyttö ylittää määritetyn kynnyksen.

Seuraavassa on kuvaus tarvittavista vaiheista. Olen luonut vastaavan videon, joka näyttää, miten kaikki nämä vaiheet tehdään. Voit käyttää jompaakumpaa tai molempia tämän vaiheen suorittamiseen.

  1. Siirry osoitteeseen https://aws.amazon.com/ ja kirjaudu sisään konsoliin tai luo ilmainen tili, jos sinulla ei ole sellaista
  2. Etsi ja napsauta Lambda palvelujen alla
  3. Napsauta "Luo toiminto"
  4. Valitse "Tekijä tyhjästä", anna sille nimi ja valitse uusin Python 3 -versio ajon ajaksi
  5. Muuta "muokkaa koodin sisäinen" muotoon "lataa.zip -tiedosto" ja valitse yllä luotu.zip -tiedosto
  6. Siirry uudessa ikkunassa osoitteeseen https://developer.amazon.com/alexa/console/ask ja kirjaudu sisään
  7. Napsauta "Luo taito"
  8. Merkitse se, valitse "Mukautettu" malli ja "Hanki oma" ja napsauta "Luo taito"
  9. Napsauta "Aloita alusta" ja napsauta "Valitse"
  10. Valitse "Tarkoitukset" -kohdasta "Lisää"
  11. Luo mukautettu tarkoitus nimeltä "alexa_to_pi" ja täytä "kirjoita {person}" esimerkkipuheena
  12. Tee aikomuspaikka nimeltä "henkilö" tyypillä "AMAZON. Person"
  13. Luo oma tarkoitus "pi_to_alexa" ja täytä "tarkista lämpötila anturista {sensor_num}
  14. Tee tarkoitukseen tarkoitettu paikka "sensor_num", jonka tyyppi on "AMAZON. NUMBER"
  15. Ota rajapinnat -kohdassa käyttöön "Mukautettu käyttöliittymäohjain"
  16. Valitse päätepisteestä "AWS Lambda ARN" ja kopioi "Sinun taitotunnuksesi"
  17. Siirry takaisin AWS -konsoliin
  18. Napsauta "Lisää käynnistin"
  19. Valitse "Alexa Skills Kit", valitse "Ota käyttöön" Taitotunnuksen vahvistus -kohdasta, liitä juuri kopioimasi taitotunnus ja napsauta Lisää
  20. Kopioi Lambda ARN oikeasta yläkulmasta
  21. Siirry takaisin Alexa -kehittäjäkonsoliin ja liitä Lambda ARN Oletusalue -kenttään
  22. Aseta Kutsu -kohdassa Taitokutsun nimi "gadgetiksi"
  23. Napsauta "Tallenna malli" ja sitten "Rakenna malli"
  24. Napsauta "Testaa" ylävälilehdissä ja vaihda valitsin "Pois" tilaan "Kehitys"
  25. Huomaa, että Lambda -toiminnon lokit löytyvät AWS: n CloudWatch -palvelusta.

Vaihe 4: Aseta koodi Raspberry Pi -laitteeseesi

Jotta Raspberry Pi voi kommunikoida Alexa -laitteen kanssa, se tarvitsee jonkin koodin, joka helpottaa muutamien muiden tiedostojen lisäksi tietojen siirtämistä Bluetoothin kautta ja yhteyden ylläpitämistä. Helpoin tapa päästä alkuun Amazonin uusimpien tiedostojen kanssa on kloonata Raspberry Pi Gadgets -varasto. Siirry nykyisen projektisi hakemistoon ja suorita

git-klooni

Tämä lataa koko arkiston kaikki tarvittavat koodit Pi -laitteeseesi. Siinä on esimerkkejä projekteista, jotka esittävät joitain Alexa -gadgetien ominaisuuksia. Jos haluat lisätietoja, katso readme heidän Github -sivullaan.

Suorita asennusohjelma saadaksesi kaikki asetukset.

cd/home/pi/Alexa-Gadgets-Vadelma-Pi-Näytteet

sudo python3 launch.py -setup

Noudata kehotteita ja vastaa "y", kun sinulta kysytään, haluatko konfiguroida Gadget -kirjautumistietojesi avulla. Muista, että Amazon ID ja Gadget Secret on määritetty gadgetisi kehittäjäkonsoliin, koska sitä kysytään täällä. Valitsin Raspberry Pi Zero W: n "bt" -lähetystilan. Kaikki vanhemmat Echo -laitteet eivät tue BLE: tä, mutta voit etsiä laitteistosi kykyä. Jos käytät Pi-tietokonetta työpöytätilassa, Amazon suosittelee, että napsautat hiiren kakkospainikkeella oikeassa yläkulmassa olevaa Bluetooth-kuvaketta ja napsautat Poista "Bluetooth" paneelista, jotta vältät yhteysongelmat.

Huomautus: tämä vaihe voi kestää jonkin aikaa sen mukaan, kuinka paljon se on asennettava.

Nyt sinulla on kaikki tarvittavat tukitiedostot palataksesi projektiin ja aloittaaksesi toimintojen lisäämisen kommunikoinnin mahdollistamiseksi Echon kanssa.

Jos valitset, voit poistaa "esimerkit" -kansion "Alexa-Gadgets-Raspberry-Pi-Samples/src" -kansiosta

Sinulla voi olla projektikoodisi missä haluat, mutta teen sille kansion kotihakemistoon. Vaihtoehtoisesti voit ladata kansion koodilla Githubistani, muista vain muokata.ini -tiedostoja alla kuvatulla tavalla.

cd /koti /pi

mkdir my_project cd my_project touch my_gadget.py touch my_gadget.ini

Olen nyt luonut kaksi tiedostoa kansioon nimeltä "my_project".. Ini -tiedosto on tärkeä. Varmista, että se sisältää seuraavat ja korvaa Amazon -tunnuksesi ja Gadget -salaisuutesi:

[GadgetSettings]

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

Katsotaanpa nyt python -tiedostoa ennen kuin menemme yksityiskohtiin:

tuo json

agt -tuonnista AlexaGadget

luokan MyGadget (AlexaGadget):

def _init _ (itse):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (itse, direktiivi):

hyötykuorma = json.loads (direktiivi.payload.decode ("utf-8")) print ("Vastaanotetut tiedot:" + str (hyötykuorma)) write_text (str (hyötykuorma ['data'] ['henkilö'] ['arvo ']))

def on_custom_mygadget_pitoalexa (itse, direktiivi):

hyötykuorma = json.loads (direktiivi.payload.decode ("utf-8")) print ("Vastaanotetut tiedot:" + str (hyötykuorma)) hyötykuorma = {'data': "Anturi lukee" + str (get_temp (hyötykuorma) ['data'] ['sensor_num'] ['value'])) + "astetta."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', hyötykuorma) MyGadget (). main ()

Huomaat ensin, että se kutsuu kahta funktiota: write_text () ja get_temp (). Koodissani määritän nämä toiminnot samaan tiedostoon, mutta ne ovat riippuvaisia laitteistostani, joten olen päättänyt jättää ne pois. Olen liittänyt tämän tiedoston niihin toimintoihin, jotka on määritetty vain tulostamaan ja palauttamaan nuketietoja, jos haluat käyttää tätä tarkkaa koodia. Ehdotan, että testaat tällä tarkalla koodilla ennen kuin muokkaat sitä toimimaan projektisi kanssa. Olen liittänyt myös.ini -tiedoston, mutta muista mennä sisään ja muuttaa tunnusta ja gadgetin salaisuutta. Ylätoiminto vastaanottaa Alexasta syötettyjä tietoja. Alin toiminto vastaanottaa tietoja samassa muodossa, mutta Alexa -laite odottaa viisi sekuntia, ennen kuin tapahtuma välitetään takaisin omalla hyötykuormallaan. Tämä hyötykuorma on erityinen siinä, että Alexa -laite puhuu sen sisällön.

Kun sinulla on nämä tiedostot, siirry "my_project" -kansioon ja suorita python -tiedosto.

sudo uudelleenkäynnistys

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

Jos käytät ohjelmaa ensimmäistä kertaa, sinun on pariliitettävä se Echo -laitteeseesi. Varmista, että Echo -laitteesi on lähellä Raspberry Pi -laitetta, koska meidän on sallittava Bluetooth -yhteys.

Napsauta mobiililaitteesi Alexa -sovelluksessa oikeassa alakulmassa "laitteet".

Napsauta vasemmassa yläkulmassa "Echo & Alexa".

Napsauta Echo -laitettasi.

Napauta "LANGATON" -kohdassa "Bluetooth -laitteet".

Napauta "PARI UUSI LAITE" ja sinun pitäisi nähdä gadgetisi luettelossa.

Napauta gadgetiasi. Sinun pitäisi nähdä Pi -raportti, jonka pariliitos onnistui.

Kun katselet Pi: n lähtöä, yritä antaa äänikomento Echolle:

Sinä: "Alexa, pyydä gadgetiani tarkistamaan lämpötila anturista yksi"

Jos kaikki toimi oikein, sinun pitäisi kuulla:

Kaiku: "Anturi lukee 120,505 astetta."

Sinä: "Alexa, kerro gadgetilleni kirjoittaa George Washington."

Pi pitäisi tulostaa:

Vastaanotetut tiedot: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

George Washington"

Vaihe 5: Kääriminen ylös

Tässä näkyvä video on esimerkki gadgetista, joka toimii lämpötilan lukemisen kanssa (sama anturi F vs. C) ja kirjoittaa nimiä yksinkertaiselle näytölle.

Nyt kun toivottavasti sinulla on jotain toimivaa, sinun pitäisi yrittää muokata tätä tehdäksesi omasta projektistasi kykenevämpi. Muista, että voit helposti muokata aikomuksia Alexa Developer Consolessa ja että kaikki käyttämäsi paikat välitetään Pi: lle hyötykuormassa. Lisäksi voit saada Alexan sanomaan mitä haluat vain muokkaamalla tapahtumassa takaisin siirtämääsi hyötykuormaa Raspberry Pi -koodistasi.

Huomaa, että tätä opetusohjelmaa ei ole tarkoitettu lopulliseksi ratkaisuksi kaikille Alexa -gadgetin ominaisuuksille. Se on tarkoituksella rajoitettu antamaan sinulle kaksi yksinkertaista toimintoa tietojen siirtämiseen kumpaankin suuntaan Alexan ja Gadgetin välillä. Jos olet kiinnostunut kehittämään kehittyneempiä vuorovaikutusmalleja, kehotan sinua lukemaan kaikki readme-tiedostot osoitteessa https://github.com/alexa/Alexa-Gadgets-Raspberry-P… ja kokeilemaan kaikkia niiden tarjoamia esimerkkejä. Ehdotan myös, että luet Alexa Gadgets Toolkitin ja Alexa Skills Kitin asiakirjat.

Suositeltava: