Satura rādītājs:

Pievienojiet pielāgoto Alexa vadību Raspberry Pi projektam: 5 soļi
Pievienojiet pielāgoto Alexa vadību Raspberry Pi projektam: 5 soļi

Video: Pievienojiet pielāgoto Alexa vadību Raspberry Pi projektam: 5 soļi

Video: Pievienojiet pielāgoto Alexa vadību Raspberry Pi projektam: 5 soļi
Video: Leap Motion SDK 2024, Jūlijs
Anonim
Pievienojiet pielāgoto Alexa vadību Raspberry Pi projektam
Pievienojiet pielāgoto Alexa vadību Raspberry Pi projektam

Šis projekts ir paredzēts ikvienam, kam ir Raspberry Pi projekts, kas izmanto Python un kurš vēlas pievienot balss vadību, izmantojot esošās Amazon Echo ierīces. Jums nav jābūt pieredzējušam programmētājam, taču jums vajadzētu ērti izmantot komandrindu un pielāgot esošo kodu savām vajadzībām.

Sākumā es izstrādāju projektu, lai manu Raspberry Pi varētu vadīt ar balsi ar Alexa, lai tas varētu sildīt ūdeni tējkannā līdz noteiktai temperatūrai. Lai gan mijiedarbība, kuru vēlējos, bija pavisam vienkārša (nododiet vienu numuru no Alexa uz Raspberry Pi), lai nokļūtu šajā stāvoklī no esošajām apmācībām, bija nepieciešams daudz darba. Es ceru, ka šī apmācība padarīs šo procesu pēc iespējas ātrāku citiem.

Manā piemērā es sāku ar Raspberry Pi Zero W ar Raspbian. Manā Pi ir programma Python3, kas spēj rakstīt tekstu uz SPI displeju, un man ir termometra zonde, kuru es varu lasīt. Jums šī programma varētu būt gandrīz jebkas, bet ideja ir tāda, ka jums, iespējams, ir dažas ievades ierīces, kuras vēlaties lasīt, izmantojot Alexa, un/vai dažas izvadierīces, kuras vēlaties kontrolēt, izmantojot Alexa.

Mērķis ir pāriet no tādas pamatprogrammas kā iepriekš aprakstītā uz ierīci, kuru varat viegli kontrolēt ar manu Echo. Pieņemot, ka jums jau ir šī aparatūra, šim projektam nevajadzētu maksāt naudu. Visbeidzot, jūs nonāksit līdz vietai, kur varat pateikt tādas lietas kā:

Es: "Alexa, palūdz manam sīkrīkam pārbaudīt temperatūru 1. sensorā."

Alexa atbilde: "Zonde rāda 72,31 grādu."

vai

Es: "Alexa, pasaki manam sīkrīkam, lai raksta Džordžu Vašingtonu"

Atbilde: displejs, kas savienots ar manu Raspberry Pi, tagad skan "Džordžs Vašingtons"

Nākamajā sadaļā es aprakstīšu, kam jānotiek aizkulisēs, lai šis darbs izdotos. Ja jūs vienkārši vēlaties, lai tas darbotos jūsu projektā, un jums nav vienalga, kā tas darbojas, nekautrējieties to izlaist (lai gan tas var apgrūtināt, ja kaut kas noiet greizi).

1. darbība. Fons

Fons
Fons

Šajā attēlā (kredīts: https://developer.amazon.com/en-US/docs/alexa/alex… mēs varam redzēt Alexa sīkrīku vispārējo arhitektūru.

Kad jūs kaut ko sakāt savai Echo ierīcei, tā nosūta audio uz Alexa Cloud, kur tā tiek apstrādāta un kur tiek ģenerēta atbilde, lai jums atbildētu. Kad jautājat, kādi ir laika apstākļi, saziņā ir tikai šie divi. Tagad pieņemsim, ka vēlaties pievienot balss vadību vienam no saviem mazajiem Raspberry Pi projektiem. Lai apstrādātu visu, kas atrodas uz kuģa, būtu nepieciešama ievērojama aparatūra un ļoti sarežģīta koda bāze, lai viss notiktu. Labāks risinājums būtu izmantot Alexa Cloud, kas ir ļoti sarežģīts un ir ļoti labi pārvaldījis sarežģītus runas modeļus. Alexa sīkrīki ir labs veids, kā to izdarīt.

Alexa sīkrīks sazinās ar Echo ierīci, izmantojot Bluetooth. Kad šis savienojums ir izveidots, abi nodod viens otram ziņojumus, izmantojot UTF-8 kodējumu. Kad Echo kaut ko nodod sīkrīkam, to sauc par direktīvu. Otru virzienu sauc par notikumu. Pirms iedziļināties precīzā visa tā plūsmā, mums jāievieš vēl viens galvenais elements: pielāgotas Alexa prasmes.

Alexa ļauj izstrādātājiem izveidot savas pielāgotās prasmes, kas ļauj viņiem pašiem veidot savu mijiedarbību un uzvedību lietošanai visās Echo ierīcēs. Piemēram, izstrādātājs var izveidot pielāgotu prasmi, lai pateiktu attālumu starp divām ASV lidostām. Lietotājs teiktu: "Alexa, pajautā manam pielāgotajam attāluma kalkulatoram, kāds ir attālums starp LAX un JFK", un tas varētu atbildēt ar "2475 jūdzes". Kā tas tiek darīts? Kad izstrādātājs veic pielāgotas prasmes, viņi definē tā sauktos "pielāgotus nodomus" ar "paraugu izteikumiem", kas satur "laika nišas". Piemēram, šajā prasmē man varētu būt mērķis "calc_dist" aprēķināt attālumu starp diviem punktiem. Teikuma paraugs būtu "kāds ir attālums starp {slot1} un {slot2}" vai "cik tālu starp {slot1} un {slot2}". Iekavās norādītajām spraugām ir specifiski veidi. Šajā gadījumā tie būtu lidostu kodi, piemēram, LAX, JFK, BOS, ATL. Kad lietotājs pieprasa pielāgotas prasmes, Alexa Cloud mēģina saskaņot lietotāja teikto ar pielāgotu nodomu, izmantojot komplektā iekļautos izteikumu paraugus, un mēģina atrast šim pieprasījumam derīgas laika nišu vērtības. Šajā piemērā tiek atklāts, ka lietotājs vēlējās "calc_dist" nodomu un ka slots1 ir LAX un slots2 ir JFK. Šajā brīdī Alexa Cloud nodod darbu izstrādātāja kodam. Būtībā tas cita starpā norāda izstrādātājiem kodu, kādu nodomu tas saņēma un kādas bija visas slota vērtības.

Izstrādātājs var izlemt, kur dzīvo viņu kods, taču ļoti populāra iespēja ir izmantot AWS Lambda funkciju. Ja jūs nezināt, kas tas ir, tas būtībā ir pakalpojums, kas ļauj augšupielādēt kodu, kuru var palaist jebkurā laikā, un pēc tam iekasē maksu tikai par kodu, kas tiek palaists. Ja turpināsim ar mūsu piemēru, izstrādātāja kods varētu būt Python funkcija, kas saņem divus lidostu kodus, uzmeklē to atrašanās vietas, aprēķina attālumus un pēc tam nosūta atbildi atpakaļ uz Alexa Cloud, lai kaut ko izrunātu lietotājam. Pēc tam Alexa Cloud nosūtītu šo runas informāciju atpakaļ uz lietotāja ierīci, un viņi saņemtu atbildi.

Tagad mēs varam atgriezties pie sīkrīka. Mēs varam izveidot pielāgotas prasmes, kas paredzētas darbam ar sīkrīkiem. Izstrādātājs var uzrakstīt prasmi, kas nosūta direktīvu pievienotajam sīkrīkam. Šai direktīvai ir kravnesība, ko var izmantot, lai gan tā ir nepieciešama sīkrīkam. Šī prasme var arī nosūtīt direktīvu un pēc tam noklausīties notikumu no sīkrīka, lai prasmju kods varētu piekļūt informācijai, kas nosūtīta no sīkrīka.

Šīs plūsmas atļauju izveidošana rada ļoti spēcīgu rīku, jo lēti sīkrīki var sazināties ar kodu mākonī un reaģēt uz balss komandām, izmantojot dažas no labākajām pieejamajām balss atpazīšanas iespējām.

Jāatzīmē, ka lielākā daļa prasmju ļauj dažādos veidos mijiedarboties ar viņiem. Piemēram, lietotājs var uzreiz pāriet uz nodomu, sakot: “Alexa, pajautā manam pielāgotajam attāluma kalkulatoram, kāds ir attālums starp LAX un JFK” (sauc par vienreizēju izsaukumu), vai arī viņš vienkārši izmanto palaišanas nodomu: “Alexa, atveriet manu pielāgoto attāluma kalkulatoru . Šim pēdējam piemēram parasti sekotu Alexa, atbildot ar aicinājumu iegūt vairāk informācijas. Šajā apmācībā apzināti netiek atbalstīts pēdējais. Precīzāk, nemainot funkciju Lambda, jūs varat izsaukt prasmi, izmantojot tikai vienu šāvienu. Šī dizaina izvēle ļauj modelim būt vienkāršākam (tam nav jāatbalsta palaišanas nodomi vai sarunu plūsma), un es atklāju, ka es parasti vēlos mijiedarboties ar saviem sīkrīkiem, izmantojot vienreizējas ielūgumus, jo tie parasti ir ātrāki.

2. darbība: reģistrējiet sīkrīku vietnē Alexa Voice Service Developer Console

Tālāk ir aprakstītas nepieciešamās darbības. Esmu izveidojis līdzvērtīgu video, kurā parādīts, kā veikt visas šīs darbības. Lai pabeigtu šo darbību, varat izmantot vienu vai abus.

  1. Dodieties uz vietni
  2. Ja jums vēl nav bezmaksas konta, izveidojiet to
  3. Noklikšķiniet uz "Produkti"
  4. Aizpildiet etiķetes un atlasiet “Alexa sīkrīks”
  5. Pārējiem laukiem aizpildiet visu, ko vēlaties
  6. Noklikšķiniet uz Pabeigt

3. darbība: izveidojiet AWS Lambda funkciju un pielāgotu prasmi

Izveidojiet pielāgotas prasmes Alexa Skills Kit izstrādātāja konsolē

Šīs apmācības kodu var atrast šeit

Pirms šīs darbības pabeigšanas jums jāizveido.zip fails, kurā ir funkcijas AWS Lambda izvietošanas pakotne, kā parādīts šeit.

  1. Lejupielādējiet mapi "lambda" no mana Github, kurā ir "lambda_function.py" un "vaatimukset.txt"
  2. Atveriet termināli un mainiet pašreizējo direktoriju, lai tas būtu šajā mapē.
  3. Izpildiet šādu secību:

pip instalēt -r prasības.txt -t skill_env

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

Jūsu.zip fails tagad atradīsies direktorijā, kurā atradās mape lambda, un to sauks par "skill-code.zip".

Piezīme par AWS mitināšanas izmaksām: šai apmācībai ir nepieciešams AWS konts (bezmaksas izveide). Lambda funkcijas maksā naudu, tomēr to pašreizējā cena N. Virdžīnijas reģionā ir USD 0,000000208 par 100 ms, izmantojot 128 MB atmiņas. Uzziņai, katra manu prasmju piesaukšana šajā līmenī izmanto apmēram 800 ms. Lai sakrātu rēķinu USD 1,00 USD apmērā, šī funkcija būtu jāizsauc aptuveni 600 000 reižu, un tas (ja jums ir nepieciešamas 5 sekundes vienam aicinājumam) aizņemtu vairāk nekā 34 dienas nepārtrauktas zvanīšanas uz jūsu funkciju. Izmaksas nedrīkst būt būtisks jautājums, ja vien jūs nepublicējat savas prasmes un milzīgs skaits cilvēku sāk to izmantot. Ja jūs uztrauc rēķinu saņemšana par AWS, apsveriet iespēju iestatīt lietošanas trauksmes, kas jūs informē, ja lietojums pārsniedz noteikto slieksni.

Tālāk ir aprakstītas nepieciešamās darbības. Esmu izveidojis līdzvērtīgu video, kurā parādīts, kā veikt visas šīs darbības. Lai pabeigtu šo darbību, varat izmantot vienu vai abus.

  1. Dodieties uz vietni https://aws.amazon.com/ un pierakstieties konsolē vai izveidojiet bezmaksas kontu, ja jums tāda nav.
  2. Zem pakalpojumiem meklējiet un noklikšķiniet uz Lambda
  3. Noklikšķiniet uz "Izveidot funkciju"
  4. Atlasiet “Autors no nulles”, piešķiriet tam nosaukumu un izpildlaika laikam izvēlieties jaunāko Python 3 versiju
  5. Mainiet “rediģēt kodu inline” uz “augšupielādēt.zip failu” un atlasiet iepriekš izveidoto.zip failu
  6. Jaunā logā dodieties uz vietni https://developer.amazon.com/alexa/console/ask un pierakstieties
  7. Noklikšķiniet uz "Izveidot prasmi"
  8. Iezīmējiet to, izvēlieties "Pielāgots" modelis un "Nodrošiniet savu" un noklikšķiniet uz "Izveidot prasmi"
  9. Noklikšķiniet uz "Sākt no nulles" un noklikšķiniet uz "Izvēlēties"
  10. Sadaļā "Nodomi" noklikšķiniet uz "Pievienot"
  11. Izveidojiet pielāgotu nodomu ar nosaukumu "alexa_to_pi" un kā parauga teikumu aizpildiet "rakstīt {person}"
  12. Izveidojiet nolūku slotu ar nosaukumu “persona” ar tipu “AMAZON. Person”
  13. Izveidojiet pielāgotu nodomu “pi_to_alexa” un aizpildiet “pārbaudiet temperatūru no sensora {sensor_num}
  14. Izveidojiet nodomu slotu ar nosaukumu "sensor_num" ar tipu "AMAZON. NUMBER"
  15. Sadaļā Saskarnes ieslēdziet “Pielāgots saskarnes kontrolieris”
  16. Sadaļā Galapunkts atlasiet “AWS Lambda ARN” un nokopējiet “Jūsu prasmju ID”
  17. Dodieties atpakaļ uz AWS konsoli
  18. Noklikšķiniet uz "Pievienot aktivizētāju"
  19. Atlasiet "Alexa Skills Kit", sadaļā Prasmju ID pārbaude atzīmējiet "Iespējot", ielīmējiet tikko nokopēto prasmes ID un noklikšķiniet uz Pievienot
  20. Nokopējiet Lambda ARN augšējā labajā stūrī
  21. Dodieties atpakaļ uz Alexa izstrādātāju konsoli un ielīmējiet Lambda ARN laukā "Noklusējuma reģions"
  22. Sadaļā Izaicinājums prasmju aicinājuma nosaukumu iestatiet kā “manu sīkrīku”
  23. Noklikšķiniet uz "Saglabāt modeli" un pēc tam uz "Izveidot modeli"
  24. Augšējās cilnēs noklikšķiniet uz "Pārbaudīt" un mainiet atlasītāju no "Izslēgts" uz "Attīstība"
  25. Ņemiet vērā, ka Lambda funkcijas žurnāli ir atrodami pakalpojumā “CloudWatch” AWS.

4. darbība: iestatiet kodu savā Raspberry Pi

Lai jūsu Raspberry Pi varētu sazināties ar Alexa ierīci, tai ir nepieciešams zināms kods, lai papildus dažiem failiem atvieglotu informācijas nodošanu pa Bluetooth un saglabātu šo savienojumu. Vienkāršākais veids, kā sākt darbu ar visjaunākajiem Amazon failiem, ir klonēt to Raspberry Pi sīkrīku krātuvi. Dodieties uz pašreizējā projekta direktoriju un palaidiet

git klons

Tas ielādēs visu viņu krātuvi ar visu nepieciešamo kodu jūsu Pi. Tam ir daži projektu piemēri, kas parāda dažas Alexa sīkrīku iespējas. Ja vēlaties iegūt vairāk informācijas, skatiet readme viņu Github lapā.

Palaidiet to iestatīšanas funkciju, lai visu konfigurētu.

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

sudo python3 launch.py -iestatīšana

Izpildiet norādījumus un atbildiet "y", kad tiek jautāts, vai vēlaties konfigurēt, izmantojot sīkrīka akreditācijas datus. Atgādiniet Amazon ID un sīkrīka noslēpumu no jūsu sīkrīka iestatīšanas izstrādātāja konsolē, jo tas tiks prasīts šeit. Es izvēlējos "bt" pārraides režīmu savai Raspberry Pi Zero W. BLE neatbalsta visas vecākās Echo ierīces, taču jūs varat meklēt, uz ko spēj jūsu aparatūra. Ja izmantojat savu Pi darbvirsmas režīmā, Amazon iesaka ar peles labo pogu noklikšķināt uz Bluetooth ikonas augšējā labajā stūrī un noklikšķināt uz "Noņemt" Bluetooth "no paneļa", lai izvairītos no savienojuma problēmām.

Piezīme. Šis solis var aizņemt kādu laiku atkarībā no instalēšanas apjoma.

Tagad jums būs visi nepieciešamie atbalsta faili, lai atgrieztos savā projektā un sāktu pievienot funkcijas, kas ļautu sazināties ar jūsu Echo.

Ja izvēlaties, varat izdzēst mapi "piemēri" sadaļā "Alexa-Gadgets-Raspberry-Pi-Samples/src"

Jums var būt sava projekta kods, kur vien vēlaties, bet es tam izveidošu mapi mājas direktorijā, vai arī jūs varat lejupielādēt mapi ar kodu no manas Github, vienkārši rediģējiet.ini failus, kā aprakstīts tālāk.

cd /mājas /pi

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

Tagad esmu izveidojis divus failus mapē ar nosaukumu "my_project".. Ini fails ir svarīgs. Pārliecinieties, vai jūsu Amazon ID un sīkrīka noslēpumā ir iekļauts šāds un aizstājējs:

[Sīkrīka iestatījumi]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [Sīkrīka iespējas] Custom. MyGadget = 1.0

Tagad, pirms iedziļināties detaļās, apskatīsim python failu:

importēt json

no agt importēšanas AlexaGadget

klases MyGadget (AlexaGadget):

def _init _ (sevi):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (self, direktīva):

payload = json.loads (direktīva.payload.decode ("utf-8")) print ("Saņemtie dati:" + str (lietderīgā slodze)) write_text (str (lietderīgā krava ['dati'] ['persona'] ['vērtība ']))

def on_custom_mygadget_pitoalexa (self, direktīva):

payload = json.loads (direktīva.payload.decode ("utf-8")) print ("Saņemtie dati:" + str (lietderīgā slodze)) payload = {'data': "Zonde skan" + str (get_temp (payload) ['data'] ['sensor_num'] ['value'])) + "grādi."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', lietderīgā slodze) MyGadget (). main ()

Vispirms pamanīsit, ka tas izsauc divas funkcijas: write_text () un get_temp (). Savā kodā es definēju šīs funkcijas vienā failā, taču tās ir atkarīgas no manas aparatūras, tāpēc esmu izvēlējies tās izlaist. Esmu pievienojis šo failu ar šīm funkcijām, kas noteiktas, lai tikai drukātu un atgrieztu fiktīvus datus, ja vēlaties palaist šo precīzo kodu. Es ieteiktu pārbaudīt ar šo precīzo kodu, pirms to pārveidojat, lai tas darbotos ar jūsu projektu. Esmu pievienojis arī.ini failu, taču pārliecinieties, ka ieejat un maināt ID un sīkrīka noslēpumu. Augšējā funkcija saņem no Alexa ievadītos datus. Apakšējā funkcija saņem datus tādā pašā formātā, bet Alexa ierīce gaidīs piecas sekundes, līdz notikums tiks nodots atpakaļ ar savu lietderīgo slodzi. Šī lietderīgā slodze ir īpaša ar to, ka Alexa ierīce runās tās saturu.

Kad esat ieguvis šos failus, dodieties uz mapi "my_project" un palaidiet python failu.

sudo atsāknēšana

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

Ja programma tiek palaista pirmo reizi, tā būs jāsavieno pārī ar Echo ierīci. Pārliecinieties, vai jūsu Echo ierīce atrodas netālu no Raspberry Pi, jo mums ir jāatļauj Bluetooth savienojums.

Mobilās ierīces lietotnē Alexa apakšējā labajā stūrī noklikšķiniet uz "ierīces".

Augšējā kreisajā stūrī noklikšķiniet uz "Echo & Alexa".

Noklikšķiniet uz savas Echo ierīces.

Sadaļā "BEZVADA" pieskarieties "Bluetooth ierīces".

Pieskarieties pogai "PĀRĪT JAUNU IERĪCI", un sarakstā vajadzētu redzēt savu sīkrīku.

Pieskarieties savam sīkrīkam. Jums vajadzētu redzēt Pi ziņojumu, ka tas ir veiksmīgi savienots pārī.

Skatoties Pi izvadi, mēģiniet dot balss komandu Echo:

Jūs: "Alexa, palūdz manam sīkrīkam pārbaudīt temperatūru no pirmā sensora"

Ja viss darbojās pareizi, jums vajadzētu dzirdēt:

Atbalss: "Zonde rāda 120,505 grādus."

Jūs: "Alexa, pasaki manam sīkrīkam uzrakstīt Džordžu Vašingtonu."

Pi vajadzētu izdrukāt:

Saņemtie dati: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}

Džordžs Vašingtons"

5. solis: iesaiņošana

Šeit redzamais video ir piemērs tam, kā sīkrīks strādā ar temperatūras nolasīšanu (tā pati zonde F pret C) un nosaukumu rakstīšanu vienkāršā displejā.

Tagad, kad jums, cerams, kaut kas darbojas, jums vajadzētu mēģināt to pielāgot, lai padarītu savu projektu spējīgāku. Atcerieties, ka jūs varat viegli rediģēt nodomus Alexa izstrādātāja konsolē un ka visas izmantotās laika nišas tiks nodotas jūsu Pi. Turklāt jūs varat likt Alexa pateikt visu, ko vēlaties, vienkārši rediģējot lietderīgo slodzi, kuru jūs nododat atpakaļ no sava Raspberry Pi koda.

Lūdzu, ņemiet vērā, ka šī apmācība nav paredzēta kā galīgais risinājums visām iespējām, kuras jūs varētu vēlēties ar Alexa sīkrīku. Tas ir apzināti ierobežots, lai sniegtu jums divas vienkāršas funkcijas datu pārsūtīšanai katrā virzienā starp Alexa un sīkrīku. Ja jūs interesē sarežģītāku mijiedarbības modeļu veidošana, es ieteiktu jums izlasīt visus readme failus vietnē https://github.com/alexa/Alexa-Gadgets-Raspberry-P… un izmēģināt visus to sniegtos piemērus.. Es arī ieteiktu jums izlasīt dokumentāciju par Alexa sīkrīku rīkkopu un Alexa prasmju komplektu.

Ieteicams: