Turinys:

Pridėkite pasirinktinį „Alexa Control“prie „Raspberry Pi“projekto: 5 žingsniai
Pridėkite pasirinktinį „Alexa Control“prie „Raspberry Pi“projekto: 5 žingsniai

Video: Pridėkite pasirinktinį „Alexa Control“prie „Raspberry Pi“projekto: 5 žingsniai

Video: Pridėkite pasirinktinį „Alexa Control“prie „Raspberry Pi“projekto: 5 žingsniai
Video: Высокая плотность 2022 2024, Lapkritis
Anonim
Pridėkite pasirinktinį „Alexa Control“prie „Raspberry Pi“projekto
Pridėkite pasirinktinį „Alexa Control“prie „Raspberry Pi“projekto

Šis projektas skirtas visiems, turintiems „Raspberry Pi“projektą, kuriame naudojamas „Python“, ir norintiems valdyti balsu per esamus „Amazon Echo“įrenginius. Jums nereikia būti patyrusiu programuotoju, tačiau jums turėtų būti patogu naudotis komandine eilute ir pritaikyti esamą kodą pagal savo poreikius.

Iš pradžių ėmiausi projekto, leidžiančio „Raspberry Pi“valdyti balsu su „Alexa“, kad jis galėtų šildyti vandenį virduliu iki tam tikros temperatūros. Nors norėta sąveika buvo gana paprasta (perduokite vieną numerį iš „Alexa“į „Raspberry Pi“), norint pasiekti šią būseną iš esamų vadovėlių, reikėjo daug dirbti. Tikiuosi, kad ši pamoka padarys šį procesą kuo greitesnį kitiems.

Mano pavyzdyje aš pradedu nuo Raspberry Pi Zero W su Raspbian. „Pi“turiu „Python3“programą, galinčią rašyti tekstą į SPI ekraną, ir turiu termometro zondą, kurį galiu skaityti. Jums ši programa gali būti beveik bet kokia, tačiau idėja yra ta, kad galbūt turite keletą įvesties įrenginių, kuriuos norite skaityti per „Alexa“, ir (arba) kai kuriuos išvesties įrenginius, kuriuos norite valdyti naudodami „Alexa“.

Tikslas yra pereiti nuo pagrindinės programos, tokios kaip aukščiau aprašytos, prie įrenginio, kurį galite lengvai valdyti naudodami „Echo“. Darant prielaidą, kad jau turite šią techninę įrangą, šis projektas neturėtų jums kainuoti. Galų gale jūs pateksite į tašką, kuriame galėsite pasakyti tokius dalykus:

Aš: "Alexa, paprašyk mano programėlės patikrinti 1 jutiklio temperatūrą."

Alexos atsakymas: „Zondas rodo 72,31 laipsnį“.

arba

Aš: „Alexa, liepk mano programėlei parašyti George Washington“

Atsakymas: Prie „Raspberry Pi“prijungtas ekranas dabar rodo „George Washington“

Kitame skyriuje aprašysiu, kas turi įvykti užkulisiuose, kad šis darbas taptų. Jei tiesiog norite, kad tai būtų įgyvendinta jūsų projekte, ir jums nerūpi, kaip jis veikia, nedvejodami praleiskite jį (nors tai gali apsunkinti, jei kažkas negerai).

1 žingsnis: fonas

Fonas
Fonas

Šiame paveikslėlyje (kreditas: https://developer.amazon.com/en-US/docs/alexa/alex… matome bendrą „Alexa“programėlių architektūrą.

Kai ką nors sakote savo „Echo“įrenginiui, jis siunčia garsą į „Alexa Cloud“, kur jis apdorojamas ir kur sugeneruojamas atsakymas. Kai paklausi, koks oras, bendrauja tik šie du. Dabar tarkime, kad norite pridėti valdymą balsu prie vieno iš savo mažų „Raspberry Pi“projektų. Norint apdoroti viską, kas vyksta laive, reikės didelės aparatūros ir labai sudėtingos kodų bazės. Geresnis sprendimas būtų pasinaudoti „Alexa Cloud“, kuris yra labai sudėtingas ir labai gerai valdo sudėtingus kalbos modelius. „Alexa Gadgets“yra geras būdas tai padaryti.

„Alexa“programėlė bendrauja su „Echo“įrenginiu naudodama „Bluetooth“. Užmezgus šį ryšį, abu perduoda vienas kitam žinutes naudodami UTF-8 kodavimą. Kai „Echo“kažką perduoda programėlei, tai vadinama direktyva. Kita kryptis vadinama įvykiu. Prieš eidami į tikslią viso to eigą, turėtume pristatyti dar vieną pagrindinį elementą: pasirinktinius „Alexa Skills“.

„Alexa“leidžia kūrėjams susikurti savo pasirinktinius įgūdžius, kurie leidžia jiems sukurti savo sąveiką ir elgesį, skirtą naudoti visuose „Echo“įrenginiuose. Pvz., Kūrėjas gali sukurti pasirinktinį įgūdį, nurodantį atstumą tarp dviejų JAV oro uostų. Vartotojas pasakytų: „Alexa, paklausk mano pasirinktos atstumo skaičiuoklės, koks atstumas yra tarp LAX ir JFK“, ir jis galėtų atsakyti „2475 mylių“. Kaip tai padaryti? Kai kūrėjas atlieka pasirinktinius įgūdžius, jie apibrėžia tai, kas vadinama „pasirinktiniais ketinimais“, ir „pavyzdinius pasakymus“, kuriuose yra „laiko tarpsnių“. Pavyzdžiui, šio įgūdžio atveju turėčiau tikslą „calc_dist“apskaičiuoti atstumą tarp dviejų taškų. Pavyzdinis posakis būtų „koks atstumas tarp {slot1} ir {slot2}“arba „koks atstumas tarp {slot1} ir {slot2}“. Skliausteliuose rodomi lizdai turi tam tikrų tipų. Šiuo atveju šie tipai būtų oro uostų kodai, tokie kaip LAX, JFK, BOS, ATL. Kai vartotojas prašo pasirinktinių įgūdžių, „Alexa Cloud“bando suderinti tai, ką vartotojas sako, su pasirinktu ketinimu, naudodamas pateiktus pavyzdžius ir bando rasti galiojančias tos užklausos laiko reikšmes. Šiame pavyzdyje paaiškėtų, kad vartotojas norėjo „calc_dist“tikslo ir kad 1 lizdas yra LAX, o 2 - JFK. Šiuo metu „Alexa Cloud“perduoda darbą kūrėjo kodui. Iš esmės jis, be kitų detalių, nurodo kūrėjams kodą, kokį ketinimą jis gavo ir kokios buvo visos lizdo vertės.

Kūrėjas gali nuspręsti, kur gyvena jų kodas, tačiau labai populiari galimybė yra naudoti „AWS Lambda“funkciją. Jei nežinote, kas tai yra, tai iš esmės yra paslauga, leidžianti įkelti kodą, kurį galima paleisti bet kuriuo metu, ir tada apmokestinti tik tiek laiko, kiek jūsų kodas paleidžiamas. Jei tęsime savo pavyzdį, kūrėjo kodas gali būti „Python“funkcija, kuri gauna du oro uostų kodus, ieško jų vietų, apskaičiuoja atstumus ir tada siunčia atsakymą atgal į „Alexa Cloud“, kad galėtų ką nors pasakyti vartotojui. Tada „Alexa Cloud“išsiųs tą kalbos informaciją atgal į vartotojo įrenginį ir jie gaus atsakymą.

Dabar galime grįžti prie programėlės. Mes galime sukurti pasirinktinius įgūdžius, skirtus dirbti specialiai su programėlėmis. Kūrėjas gali parašyti įgūdį, kuris siunčia direktyvą į prijungtą programėlę. Toje direktyvoje yra naudingoji apkrova, kurią galima panaudoti, nors ir reikia programėlei. Šis įgūdis taip pat gali nusiųsti nurodymą ir tada klausytis įvykio iš programėlės, kad įgūdžių kodas galėtų pasiekti informaciją, siunčiamą iš programėlės.

Nustačius šį srautą, sukuriamas labai galingas įrankis, nes nebrangios programėlės gali turėti galimybę bendrauti su kodu debesyje ir reaguoti į balso komandas naudojant kai kuriuos geriausius galimus balso atpažinimo būdus.

Reikėtų pažymėti, kad dauguma įgūdžių leidžia įvairiais būdais su jais bendrauti. Pvz., Naudotojas gali iškart pereiti prie ketinimo sakydamas: „Alexa, paklausk mano pasirinkto atstumo skaičiuoklės“, koks atstumas yra tarp LAX ir JFK “(vadinamas vieno šūvio iškvietimu), arba gali tiesiog naudoti paleidimo tikslą:„ Alexa, atidarykite mano pasirinktą atstumo skaičiuoklę “. Šį paskutinį pavyzdį paprastai seka „Alexa“, atsakydama su raginimu gauti daugiau informacijos. Ši pamoka sąmoningai praleidžia pastarųjų palaikymą. Tiksliau, nekeičiant „Lambda“funkcijos, galite įgyti įgūdžių tik naudodami vieno šūvio iškvietimą. Šis dizaino pasirinkimas leidžia modeliui būti paprastesniam (nereikia palaikyti paleidimo ketinimų ar pokalbių srauto), ir aš pastebėjau, kad paprastai noriu bendrauti su savo programėlėmis, naudodamas vieno šūvio užklausas, nes jos paprastai yra greitesnės.

2 veiksmas: užregistruokite programėlę „Alexa Voice Service Developer Console“

Toliau pateikiamas būtinų veiksmų aprašymas. Sukūriau lygiavertį vaizdo įrašą, kuriame parodyta, kaip atlikti visus šiuos veiksmus. Norėdami atlikti šį veiksmą, galite naudoti abu arba abu.

  1. Eikite į
  2. Jei dar neturite nemokamos paskyros, susikurkite ją
  3. Spustelėkite „Produktai“
  4. Užpildykite etiketes ir pasirinkite „Alexa Gadget“
  5. Likusiems laukams užpildykite viską, ko norite
  6. Spustelėkite Baigti

3 žingsnis: sukurkite „AWS Lambda“funkciją ir pasirinktinį įgūdį

Sukurkite pasirinktinį įgūdį „Alexa Skills Kit“kūrėjų pulte

Šios pamokos kodą rasite čia

Prieš atlikdami šį veiksmą, turėsite sukurti.zip failą, kuriame yra „AWS Lambda“funkcijos diegimo paketas, kaip parodyta čia.

  1. Atsisiųskite aplanką „lambda“iš mano „Github“, kuriame yra „lambda_function.py“ir „vaatimukset.txt“
  2. Atidarykite terminalą ir pakeiskite dabartinį katalogą į šį aplanką.
  3. Vykdykite šią seką:

pip install -r reikalavimai.txt -t skill_env

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

Jūsų.zip failas dabar bus kataloge, kuriame buvo lambda aplankas, ir bus vadinamas „skill-code.zip“.

Pastaba apie AWS prieglobos kainą: Ši pamoka reikalauja, kad turėtumėte AWS paskyrą (nemokamai kurti). „Lambda“funkcijos kainuoja, tačiau dabartinė jų kaina N. Virdžinijos regione yra 0,000000208 USD už 100 ms, naudojant 128 MB atminties. Pavyzdžiui, kiekvienas mano įgūdžių iškvietimas išrašo apie 800 ms naudojimo šioje pakopoje. Norėdami surinkti 1,00 JAV dolerio sąskaitą, turėsite pasinaudoti šia funkcija maždaug 600 000 kartų, o tai (jei užtruksite 5 sekundes per vieną iškvietimą) užtruktų daugiau nei 34 dienas be perstojo skambinti jūsų funkcijai. Kaina neturėtų būti svarbi problema, nebent skelbiate savo įgūdžius ir daugybė žmonių pradeda ja naudotis. Jei nerimaujate dėl sąskaitų gavimo AWS, apsvarstykite galimybę nustatyti naudojimo signalus, kurie jums praneš, jei naudojimas viršija nustatytą slenkstį.

Toliau pateikiamas būtinų veiksmų aprašymas. Sukūriau lygiavertį vaizdo įrašą, kuriame parodyta, kaip atlikti visus šiuos veiksmus. Norėdami atlikti šį veiksmą, galite naudoti abu arba abu.

  1. Eikite į https://aws.amazon.com/ ir prisijunkite prie konsolės arba sukurkite nemokamą paskyrą, jei jos neturite
  2. Po paslaugomis ieškokite ir spustelėkite „Lambda“
  3. Spustelėkite „Sukurti funkciją“
  4. Pasirinkite „Autorius nuo nulio“, suteikite jam pavadinimą ir vykdymo metu pasirinkite naujausią „Python 3“versiją
  5. Pakeiskite „redaguoti kodą tiesiogiai“į „įkelti.zip failą“ir pasirinkite aukščiau sukurtą.zip failą
  6. Naujame lange eikite į https://developer.amazon.com/alexa/console/ask ir prisijunkite
  7. Spustelėkite „Sukurti įgūdžius“
  8. Pažymėkite jį, pasirinkite „Individualus“modelis ir „Pasirūpinkite savo“ir spustelėkite „Sukurti įgūdžius“
  9. Spustelėkite „Pradėti nuo nulio“ir spustelėkite „Pasirinkti“
  10. Skiltyje „Ketinimai“spustelėkite „Pridėti“
  11. Sukurkite pasirinktinį ketinimą pavadinimu „alexa_to_pi“ir kaip pavyzdinį posakį užpildykite „write {person}“
  12. Sukurkite ketinimo lizdą, pavadintą „asmuo“, kurio tipas yra „AMAZON. Person“
  13. Sukurkite pasirinktinį tikslą pavadinimu „pi_to_alexa“ir užpildykite „patikrinkite temperatūrą iš jutiklio {sensor_num}
  14. Sukurkite ketinimo lizdą, pavadintą „sensor_num“, kurio tipas yra „AMAZON. NUMBER“
  15. Skiltyje „Sąsajos“įjunkite „Tinkintas sąsajos valdiklis“
  16. Skiltyje „Endpoint“pasirinkite „AWS Lambda ARN“ir nukopijuokite „Your Skill ID“
  17. Grįžkite į AWS konsolę
  18. Spustelėkite „Pridėti aktyviklį“
  19. Pasirinkite „Alexa Skills Kit“, pažymėkite „Įgalinti“skiltyje „Įgūdžių ID patvirtinimas“, įklijuokite ką tik nukopijuotą įgūdžių ID ir spustelėkite „Pridėti“
  20. Nukopijuokite „Lambda ARN“viršutiniame dešiniajame kampe
  21. Grįžkite į „Alexa Developer Console“ir įklijuokite „Lambda ARN“į lauką „Numatytasis regionas“
  22. Skiltyje „Kvietimas“nustatykite įgūdžių kvietimo pavadinimą „mano programėlė“
  23. Spustelėkite „Išsaugoti modelį“, tada - „Sukurti modelį“
  24. Viršutiniuose skirtukuose spustelėkite „Test“ir pakeiskite parinkiklį iš „Off“į „Development“
  25. Atminkite, kad funkcijos „Lambda“žurnalai yra AWS „CloudWatch“paslaugoje.

4 žingsnis: nustatykite kodą „Raspberry Pi“

Kad jūsų „Raspberry Pi“galėtų bendrauti su „Alexa“įrenginiu, jam reikia tam tikro kodo, kad būtų lengviau perduoti informaciją per „Bluetooth“ir palaikyti šį ryšį, be kelių kitų failų. Lengviausias būdas pradėti naudoti naujausius „Amazon“failus yra klonuoti jų „Raspberry Pi Gadgets“saugyklą. Eikite į dabartinio projekto katalogą ir paleiskite

git klonas

Tai įkelia visą jų saugyklą su visu reikiamu kodu į jūsų „Pi“. Jame yra keletas projektų pavyzdžių, kurie parodo kai kurias „Alexa Gadgets“galimybes. Jei norite daugiau informacijos, skaitykite „readme“jų „Github“puslapyje.

Paleiskite jų sąrankos funkciją, kad viskas būtų sukonfigūruota.

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

sudo python3 launch.py -setup

Vykdykite nurodymus ir atsakykite „y“, kai jūsų paklaus, ar norite konfigūruoti naudodami savo programėlės kredencialus. Prisiminkite „Amazon ID“ir „Gadget Secret“, kai kūrėjo pulte nenustatėte programėlės, nes jos bus prašoma čia. „Raspberry Pi Zero W“pasirinkau „bt“perdavimo režimą. BLE nepalaiko visi senesni „Echo“įrenginiai, tačiau galite sužinoti, ką gali jūsų aparatinė įranga. Jei naudojate „Pi“darbalaukio režimu, „Amazon“rekomenduoja dešiniuoju pelės mygtuku spustelėti „Bluetooth“piktogramą viršutiniame dešiniajame kampe ir spustelėti „Pašalinti„ Bluetooth “iš skydelio“, kad būtų išvengta ryšio problemų.

Pastaba: šis veiksmas gali užtrukti, priklausomai nuo to, kiek reikia įdiegti.

Dabar turėsite visus reikalingus palaikymo failus, kad galėtumėte grįžti prie savo projekto ir pradėti pridėti funkcijas, leidžiančias bendrauti su „Echo“.

Jei pasirinksite, galite ištrinti aplanką „pavyzdžiai“iš „Alexa-Gadgets-Raspberry-Pi-Samples/src“

Jūs galite turėti savo projekto kodą, kur tik norite, bet aš sukursiu jam katalogą namų kataloge, arba galite atsisiųsti aplanką su kodu iš mano „Github“, tiesiog būtinai redaguokite.ini failus, kaip aprašyta toliau.

cd /home /pi

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

Dabar sukūriau du failus aplanke „my_project“.. Ini failas yra svarbus. Įsitikinkite, kad jūsų „Amazon ID“ir „Gadget Secret“yra šie pakeitimai:

[„GadgetSettings“]

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

Dabar, prieš eidami į išsamią informaciją, pažvelkime į „python“failą:

importuoti json

iš „agt import“„AlexaGadget“

„MyGadget“klasė („AlexaGadget“):

def _init _ (savarankiškai):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (savarankiškai, direktyva):

payload = json.loads (direktyva.payload.decode ("utf-8")) print ("Gauti duomenys:" + str (naudingoji apkrova)) write_text (str (naudingoji apkrova ['duomenys'] ['asmuo'] ['vertė ']))

def on_custom_mygadget_pitoalexa (savarankiškai, direktyva):

payload = json.loads (direktyva.payload.decode ("utf-8")) print ("Gauti duomenys:" + str (naudingoji apkrova)) naudingoji apkrova = {'data': "Zondas skaito" + str (get_temp (payload ['data'] ['sensor_num'] ['value'])) + "laipsnių".} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', naudingoji apkrova) MyGadget (). main ()

Pirmiausia pastebėsite, kad jis iškviečia dvi funkcijas: write_text () ir get_temp (). Savo kode aš apibrėžiu šias funkcijas tame pačiame faile, tačiau jos priklauso nuo mano aparatūros, todėl nusprendžiau jų praleisti. Pridėjau šį failą su tomis funkcijomis, kurios yra skirtos tik spausdinti ir grąžinti fiktyvius duomenis, jei norite paleisti šį tikslų kodą. Aš siūlau išbandyti šį tikslų kodą prieš modifikuojant jį, kad jis veiktų su jūsų projektu. Aš taip pat pridėjau.ini failą, bet būtinai įeikite ir pakeiskite ID ir programėlės paslaptį. Viršutinė funkcija gauna duomenis, perduotus iš „Alexa“. Apatinė funkcija gauna duomenis tuo pačiu formatu, tačiau „Alexa“įrenginys palauks penkias sekundes, kol įvykis bus perduotas su savo naudingu kroviniu. Šis krovinys yra ypatingas tuo, kad „Alexa“įrenginys pasakys jo turinį.

Kai turėsite šiuos failus, eikite į aplanką „my_project“ir paleiskite „python“failą.

sudo perkraukite

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

Jei pirmą kartą paleidžiate programą, turėsite ją susieti su „Echo“įrenginiu. Įsitikinkite, kad jūsų „Echo“įrenginys yra šalia „Raspberry Pi“, nes turime leisti „Bluetooth“ryšį.

Mobiliojo įrenginio programoje „Alexa“apatiniame dešiniajame kampe spustelėkite „įrenginiai“.

Viršutiniame kairiajame kampe spustelėkite „Echo & Alexa“.

Spustelėkite savo „Echo“įrenginį.

Skiltyje „BEVIELIS“bakstelėkite „Bluetooth“įrenginiai “.

Bakstelėkite „SUSISIEGTI NAUJĄ ĮRENGINĮ“ir sąraše turėtumėte pamatyti savo programėlę.

Bakstelėkite savo programėlę. Turėtumėte pamatyti „Pi“ataskaitą, kad ji sėkmingai suporuota.

Žiūrėdami „Pi“išvestį, pabandykite duoti balso komandą „Echo“:

Jūs: „Alexa, paprašyk mano programėlės patikrinti temperatūrą iš pirmo jutiklio“

Jei viskas veikė tinkamai, turėtumėte išgirsti:

Aidas: „Zondas rodo 120,505 laipsnių“.

Jūs: „Alexa, liepk mano programėlei parašyti George Washington“.

Pi turėtų spausdinti:

„Gauti duomenys: {„ duomenys “: {„ asmuo “: {„ vardas “:„ asmuo “,„ vertė “:„ Džordžas Vašingtonas “,„ patvirtinimo būsena “:„ NĖRA “}}

Džordžas Vašingtonas"

5 žingsnis: Apvyniojimas

Čia rodomas vaizdo įrašas yra pavyzdys, kai programėlė veikia su temperatūros nuskaitymu (tas pats zondas F prieš C) ir įrašo pavadinimus į paprastą ekraną.

Dabar, kai tikitės, kad kažkas veikia, turėtumėte pabandyti tai pritaikyti, kad jūsų projektas būtų pajėgesnis. Atminkite, kad ketinimus galite lengvai redaguoti „Alexa Developer Console“ir kad visi jūsų naudojami lizdai bus perduoti jūsų „Pi“naudingai apkrovai. Be to, galite leisti „Alexa“pasakyti viską, ką norėtumėte, tiesiog redaguodami naudingą krovinį, kurį perduodate įvykiui iš savo „Raspberry Pi“kodo.

Atminkite, kad ši pamoka nėra galutinis sprendimas visoms galimybėms, kurių galite norėti naudodami „Alexa“programėlę. Sąmoningai apsiribojama, kad suteiktumėte dvi paprastas funkcijas, skirtas perduoti duomenis kiekviena kryptimi tarp „Alexa“ir „Gadget“. Jei jus domina sudėtingesnių sąveikos modelių kūrimas, raginu perskaityti visus „readme“failus adresu https://github.com/alexa/Alexa-Gadgets-Raspberry-P… ir išbandyti visus jų pateiktus pavyzdžius.. Taip pat siūlau perskaityti „Alexa Gadgets Toolkit“ir „Alexa Skills Kit“dokumentus.

Rekomenduojamas: