Përmbajtje:

Shtoni Custom Alexa Control në Projektin Raspberry Pi: 5 hapa
Shtoni Custom Alexa Control në Projektin Raspberry Pi: 5 hapa

Video: Shtoni Custom Alexa Control në Projektin Raspberry Pi: 5 hapa

Video: Shtoni Custom Alexa Control në Projektin Raspberry Pi: 5 hapa
Video: Автоматический календарь-планировщик смен в Excel 2024, Korrik
Anonim
Shtoni Custom Alexa Control në Raspberry Pi Project
Shtoni Custom Alexa Control në Raspberry Pi Project

Ky projekt ka për qëllim këdo që ka një projekt Raspberry Pi që përdor Python i cili dëshiron të shtojë kontrollin e zërit përmes pajisjeve të tyre ekzistuese Amazon Echo. Nuk keni nevojë të jeni një programues me përvojë, por duhet të jeni të kënaqur duke përdorur vijën e komandës dhe duke përshtatur kodin ekzistues për t'iu përshtatur nevojave tuaja.

Fillimisht fillova një projekt për të mundësuar Raspberry Pi tim të kontrollohet me zë me Alexa në mënyrë që të mund të ngrohë ujin në një kazan në një temperaturë të caktuar. Edhe pse ndërveprimi që doja ishte mjaft i thjeshtë (kaloni një numër nga Alexa në Raspberry Pi), u desh shumë punë për të arritur në atë gjendje nga mësimet ekzistuese. Shpresoj se ky tutorial do ta bëjë atë proces sa më shpejt që të jetë e mundur për të tjerët.

Në shembullin tim, unë filloj me një Raspberry Pi Zero W me Raspbian. Unë kam një program Python3 në Pi tim që është i aftë të shkruajë tekst në një ekran SPI dhe kam një sondë termometri që mund të lexoj. Për ju, ky program mund të jetë pothuajse çdo gjë, por ideja është që ju mund të keni disa pajisje hyrëse që dëshironi të lexoni përmes Alexa dhe/ose disa pajisje dalëse që dëshironi të kontrolloni duke përdorur Alexa.

Qëllimi është të kalosh nga një program bazë si ai i përshkruar më sipër në një pajisje që mund ta kontrollosh lehtësisht me Echo -në time. Duke supozuar se e keni këtë pajisje tashmë, ky projekt nuk duhet t'ju kushtojë para. Në fund, do të arrini në pikën ku mund të thoni gjëra të tilla si:

Unë: "Alexa, kërko nga vegla ime të kontrollojë temperaturën në sensorin 1."

Përgjigja e Alexa: "Sonda lexon 72.31 gradë."

ose

Unë: "Alexa, thuaji veglës sime të shkruajë George Washington"

Përgjigje: Ekrani i lidhur me Raspberry Pi tim tani lexon "George Washington"

Në pjesën tjetër, unë do të përshkruaj atë që duhet të ndodhë prapa skenave për ta bërë këtë punë. Nëse thjesht doni ta bëni këtë të funksionojë në projektin tuaj dhe nuk ju intereson se si funksionon, mos ngurroni ta kaloni (edhe pse mund ta bëjë më të vështirë nëse diçka nuk shkon).

Hapi 1: Sfondi

Sfondi
Sfondi

Në këtë imazh (krediti: https://developer.amazon.com/en-US/docs/alexa/alex… ne mund të shohim arkitekturën e përgjithshme për veglat Alexa.

Kur i thoni diçka pajisjes tuaj Echo, ajo e dërgon audion në Alexa Cloud, ku përpunohet dhe ku gjenerohet një përgjigje për t'ju përgjigjur. Kur pyet se çfarë moti është, janë vetëm këta të dy në komunikim. Tani supozoni se doni të shtoni kontroll zanor në një nga projektet tuaja të vogla në një Raspberry Pi. Përpunimi i gjithçkaje në bord do të kërkonte pajisje të rëndësishme dhe një bazë kodesh shumë të sofistikuar për të bërë gjërat të shkojnë. Një zgjidhje më e mirë do të ishte përdorimi i Alexa Cloud, i cili është shumë i sofistikuar dhe është bërë shumë i mirë në trajtimin e modeleve komplekse të të folurit. Pajisjet Alexa ofrojnë një mënyrë të mirë për ju për ta bërë këtë.

Një vegël Alexa komunikon me një pajisje Echo duke përdorur bluetooth. Pasi të krijohet kjo lidhje, të dy i kalojnë mesazhe njëri-tjetrit duke përdorur kodimin UTF-8. Kur Echo i kalon diçka veglës, quhet direktivë. Drejtimi tjetër referohet si një ngjarje. Para se të hyjmë në rrjedhën e saktë të gjithë kësaj, ne duhet të prezantojmë një element tjetër kyç: Aftësitë e personalizuara Alexa.

Alexa lejon zhvilluesit të krijojnë aftësitë e tyre të personalizuara, gjë që u lejon atyre të krijojnë ndërveprimet dhe sjelljet e tyre për përdorim në të gjitha pajisjet Echo. Për shembull, një zhvillues mund të krijojë një aftësi të personalizuar për t'ju treguar distancën midis dy aeroporteve në SHBA. Një përdorues do të thoshte: "Alexa, pyet llogaritësin tim të distancës me porosi se cila është distanca midis LAX dhe JFK" dhe mund të përgjigjet me "2475 milje". Si e bën këtë? Kur një zhvillues bën një aftësi të personalizuar, ata përcaktojnë atë që quhen "qëllime të personalizuara" me "thënie mostër" që përmbajnë "lojëra elektronike". Për shembull, në këtë aftësi mund të kem qëllimin "calc_dist" për të llogaritur distancën midis dy pikave. Një shprehje shembull do të ishte "sa është distanca midis {slot1} dhe {slot2}" ose "sa larg midis {slot1} dhe {slot2}". Slotet e treguara në kllapa kanë lloje të veçanta. Në këtë rast ato lloje do të ishin kodet e aeroportit si LAX, JFK, BOS, ATL. Kur një përdorues kërkon aftësinë e personalizuar, Alexa Cloud përpiqet të krahasojë atë që përdoruesi thotë me një qëllim të personalizuar duke përdorur thëniet e mostrës së ofruar dhe përpiqet të gjejë vlera të vlefshme të slotit për atë kërkesë. Në këtë shembull, do të zbulonte se përdoruesi donte qëllimin "calc_dist" dhe se slot1 është LAX dhe slot2 është JFK. Në këtë pikë, Alexa Cloud e kalon punën në kodin e vetë zhvilluesit. Në thelb, ai i tregon kodit të zhvilluesve se çfarë qëllimi ka marrë dhe cilat ishin të gjitha vlerat e slotit, midis detajeve të tjera.

Zhvilluesi duhet të vendosë se ku jeton kodi i tyre, por një opsion shumë i popullarizuar është përdorimi i një funksioni AWS Lambda. Nëse nuk e dini se çfarë është, është në thelb një shërbim që ju lejon të ngarkoni kodin që mund të ekzekutohet në çdo kohë dhe pastaj ju ngarkon vetëm për sasinë e kohës që kodi juaj funksionon. Nëse vazhdojmë me shembullin tonë, kodi i zhvilluesit mund të jetë një funksion Python që merr dy kodet e aeroportit, kërkon vendndodhjet e tyre, llogarit distancat dhe më pas dërgon një përgjigje përsëri në Alexa Cloud për t'i thënë diçka përdoruesit. Reja Alexa do ta dërgonte atë informacion të të folurit përsëri në pajisjen e përdoruesit dhe ata do të merrnin përgjigjen.

Tani mund të kthehemi te pajisja. Ne mund të krijojmë aftësi të personalizuara që janë krijuar për të punuar posaçërisht me vegla. Një zhvillues mund të shkruajë një aftësi që dërgon një direktivë në një vegël të lidhur. Ajo direktivë ka një ngarkesë që mund të përdoret sido që të jetë e nevojshme nga vegël. Kjo aftësi gjithashtu mund të dërgojë një direktivë dhe pastaj të dëgjojë një ngjarje nga vegël, në mënyrë që kodi i aftësive të ketë qasje në informacionin e dërguar nga pajisja.

Krijimi i kësaj rrjedhe lejon krijon një mjet shumë të fuqishëm sepse pajisjet e lira mund të kenë aftësinë për të komunikuar me kodin në re dhe për t'iu përgjigjur komandave zanore duke përdorur disa nga njohjet më të mira të zërit në dispozicion.

Duhet të theksohet se shumica e aftësive lejojnë mënyra të ndryshme të bashkëveprimit me ta. Për shembull, një përdorues mund të hidhet drejtpërdrejt në një qëllim duke thënë "Alexa, pyet llogaritësin tim të distancës me porosi sa është distanca midis LAX dhe JFK" (e quajtur thirrje me një goditje) ose thjesht mund të përdorë qëllimin e nisjes: "Alexa, hapni llogaritësin tim të distancës me porosi ". Ky shembull i fundit zakonisht ndiqet nga Alexa që përgjigjet me një kërkesë për më shumë informacion. Ky tutorial qëllimisht heq mbështetjen për këtë të fundit. Më konkretisht, pa modifikuar funksionin Lambda, ju mund të thërrisni aftësinë vetëm duke përdorur një thirrje me një goditje. Kjo zgjedhje e dizajnit lejon që modeli të jetë më i thjeshtë (nuk ka pse të mbështesë qëllimet e nisjes ose rrjedhën e bisedës), dhe kam gjetur se zakonisht dua të ndërveproj me pajisjet e mia duke përdorur thirrje me një goditje gjithsesi pasi ato janë zakonisht më të shpejta.

Hapi 2: Regjistroni vegël në tastierën e zhvilluesit të shërbimit Alexa Voice

Më poshtë është një përshkrim i hapave të nevojshëm. Unë kam krijuar një video ekuivalente që tregon se si të bëni të gjitha këto hapa. Ju mund të përdorni njërën, ose të dyja, për të përfunduar këtë hap.

  1. Shkoni te
  2. Nëse nuk keni një llogari falas, bëni një
  3. Klikoni në "Produkte"
  4. Plotësoni etiketat dhe zgjidhni "Alexa Gadget"
  5. Plotësoni gjithçka që dëshironi për pjesën tjetër të fushave
  6. Kliko Finish

Hapi 3: Krijoni funksionin AWS Lambda dhe aftësi të personalizuara

Krijoni aftësi të personalizuara në tastierën e zhvilluesit të Alexa Skills Kit

Kodi për këtë tutorial mund të gjendet këtu

Para se të përfundoni këtë hap, do t'ju duhet të krijoni një skedar.zip që përmban paketën e vendosjes për funksionin AWS Lambda siç tregohet në tutorialin këtu.

  1. Shkarkoni dosjen "lambda" nga Github im e cila përmban "lambda_function.py" dhe "kërkesat.txt"
  2. Hapni terminalin dhe ndryshoni drejtorinë aktuale për të qenë brenda kësaj dosjeje.
  3. Drejtoni sekuencën e mëposhtme:

pip instalo -r kërkesat.txt -t skill_env

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

Skedari juaj.zip tani do të gjendet në drejtorinë ku dosja lambda ishte dhe do të quhet "skill-code.zip".

Një shënim mbi koston e pritjes në AWS: Ky tutorial kërkon që të keni një llogari AWS (krijimi i lirë). Funksionet Lambda kushtojnë para, megjithatë, çmimi i tyre aktual në rajonin e Virxhinias N. është 0.000000208 dollarë për 100ms përdorim me 128MB memorie. Për referencë, çdo thirrje e aftësive të mia faturon rreth 800ms përdorim në këtë nivel. Për të grumbulluar një faturë prej $ 1.00USD, do t'ju duhet të thërrisni këtë funksion rreth 600, 000 herë, i cili (nëse ju merr 5 sekonda për thirrje) do t'ju marrë mbi 34 ditë thirrje pa ndërprerje të funksionit tuaj. Kostoja nuk duhet të jetë një çështje domethënëse nëse nuk publikoni aftësitë tuaja dhe një numër i madh njerëzish fillojnë ta përdorin atë. Nëse jeni të shqetësuar për marrjen e faturave në AWS, merrni parasysh vendosjen e alarmeve të përdorimit që ju njoftojnë nëse përdorimi kalon një prag të përcaktuar.

Më poshtë është një përshkrim i hapave të nevojshëm. Unë kam krijuar një video ekuivalente që tregon se si të bëni të gjitha këto hapa. Ju mund të përdorni njërën, ose të dyja për të përfunduar këtë hap.

  1. Shkoni te https://aws.amazon.com/ dhe regjistrohuni në tastierë ose krijoni një llogari falas nëse nuk e keni
  2. Kërkoni dhe klikoni në Lambda nën shërbimet
  3. Klikoni "Krijo funksion"
  4. Zgjidhni "Autori nga e para", jepini një emër dhe zgjidhni versionin më të fundit Python 3 për kohën e ekzekutimit
  5. Ndryshoni "redaktoni kodin në linjë" në "ngarkoni një skedar.zip" dhe zgjidhni skedarin.zip të krijuar më sipër
  6. Në një dritare të re, lundroni te https://developer.amazon.com/alexa/console/ask dhe regjistrohuni
  7. Klikoni në "Krijo aftësi"
  8. Etiketoni atë, zgjidhni modelin "Custom" dhe "Siguroni tuajin" dhe klikoni "Krijo aftësi"
  9. Klikoni "Fillo nga Gërvishtja" dhe kliko "Zgjidh"
  10. Nën "Synimet", klikoni "Shto"
  11. Krijoni një qëllim të personalizuar të quajtur "alexa_to_pi" dhe plotësoni "shkruaj {person}" si shembull i shprehjes
  12. Bëni një vend të caktuar të quajtur "person" me llojin "AMAZON. Person"
  13. Krijoni një qëllim të personalizuar të quajtur "pi_to_alexa" dhe plotësoni "kontrolloni temperaturën nga sensori {sensor_num}
  14. Bëni një vend të caktuar të quajtur "sensor_num" me llojin "AMAZON. NUMBER"
  15. Nën Ndërfaqet, aktivizoni "Kontrolluesin e personalizuar të ndërfaqes"
  16. Nën Endpoint, zgjidhni "AWS Lambda ARN" dhe kopjoni "ID -ja juaj e aftësisë"
  17. Shkoni përsëri në tastierën AWS
  18. Klikoni "Shto nxitës"
  19. Përzgjidhni "Alexa Skills Kit", kontrolloni "Enable" nën verifikimin e aftësisë, ngjisni në ID të aftësisë që sapo keni kopjuar dhe klikoni "Shto"
  20. Kopjoni ARN Lambda në këndin e sipërm të djathtë
  21. Shkoni te Konsola e Zhvilluesit Alexa dhe ngjisni ARN Lambda në fushën "Rajoni i paracaktuar"
  22. Nën Invocation, vendosni Emrin e Thirrjes në Aftësi të jetë "vegla ime"
  23. Klikoni "Ruaj modelin" dhe më pas "Ndërtoni modelin"
  24. Klikoni "Test" në skedat e sipërme dhe ndryshoni përzgjedhësin nga "Off" në "Development"
  25. Vini re se regjistrat për funksionin Lambda gjenden në shërbimin "CloudWatch" në AWS.

Hapi 4: Vendosni kodin në Raspberry Pi tuaj

Që Raspberry Pi juaj të komunikojë me pajisjen Alexa, i duhet një kod për të lehtësuar kalimin e informacionit përmes bluetooth -it dhe ruajtjen e asaj lidhjeje, përveç disa skedarëve të tjerë. Mënyra më e lehtë për të filluar me skedarët më të azhurnuar nga Amazon është të klononi depon e tyre të Raspberry Pi Gadgets. Shkoni te drejtoria e projektit tuaj aktual dhe ekzekutoni

git klon

Kjo do të ngarkojë të gjithë depon e tyre me të gjithë kodin e nevojshëm në Pi tuaj. Ka disa projekte shembull që tregojnë disa nga aftësitë e Alexa Gadgets. Nëse dëshironi më shumë informacion, shihni leximin në faqen e tyre në Github.

Drejtoni funksionin e tyre të konfigurimit për të konfiguruar gjithçka.

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

sudo python3 laun.py -konfigurimi

Ndiqni kërkesat dhe përgjigjuni "y" kur pyeteni nëse doni të konfiguroni duke përdorur kredencialet tuaja të Gadget. Kujtoni Amazon ID dhe Gadget Secret nga vendosja e veglës tuaj në tastierën e zhvilluesit pasi do të kërkohet këtu. Zgjodha modalitetin e transmetimit "bt" për Raspberry Pi Zero W. BLE tim nuk mbështetet nga të gjitha pajisjet më të vjetra Echo, por ju mund të shikoni se për çfarë është i aftë pajisja juaj. Nëse jeni duke përdorur Pi tuaj në modalitetin e desktopit, Amazon rekomandon të klikoni me të djathtën në ikonën bluetooth në të djathtën e sipërme dhe të klikoni "Hiq" Bluetooth "nga Paneli" për të shmangur problemet e lidhjes.

Shënim: ky hap mund të marrë pak kohë në varësi të asaj se sa duhet të instalohet.

Tani do të keni të gjithë skedarët mbështetës të nevojshëm për t'u kthyer në projektin tuaj dhe për të filluar shtimin e funksioneve për të lejuar komunikimin me Echo -në tuaj.

Nëse zgjidhni, mund të fshini dosjen "shembuj" në "Alexa-Gadgets-Raspberry-Pi-Samples/src"

Ju mund të keni kodin e projektit tuaj kudo që dëshironi, por unë do të bëj një dosje në drejtorinë kryesore për të, përndryshe ju mund ta shkarkoni dosjen me kodin nga Github -i im, vetëm sigurohuni që të redaktoni skedarët.ini siç përshkruhet më poshtë.

cd /home /pi

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

Tani kam krijuar dy skedarë në një dosje të quajtur "my_project". Skedari.ini është i rëndësishëm. Sigurohuni që përmban të mëposhtmet dhe zëvendësoni në Amazon ID dhe Gadget Secret:

[Cilësimet e veglave]

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

Tani, le të hedhim një vështrim në skedarin python para se të hyjmë në detaje:

import json

nga agt import AlexaGadget

klasa MyGadget (AlexaGadget):

def _init _ (vetja):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (vetë, direktivë):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Të dhënat e marra:" + str (payload)) write_text (str (payload ['data'] ['person'] ['value ']))

def on_custom_mygadget_pitoalexa (vetë, direktivë):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Të dhënat e marra:" + str (ngarkesë)) payload = {'data': "Sonda lexon" + str (get_temp (payload ['data'] ['sensor_num'] ['value'])) + "gradë."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', payload) MyGadget (). kryesore ()

Së pari do të vini re se ai thërret dy funksione: write_text () dhe get_temp (). Në kodin tim, unë i përcaktoj këto funksione në të njëjtin skedar, por ato varen nga pajisja ime, kështu që unë kam zgjedhur t'i heq ato. Unë e kam bashkangjitur këtë skedar me ato funksione të përcaktuara për të printuar dhe kthyer të dhëna falsike në rast se dëshironi të ekzekutoni këtë kod të saktë. Unë do të sugjeroja testimin me këtë kod të saktë para se ta modifikoni për të punuar me projektin tuaj. Unë gjithashtu kam bashkangjitur skedarin.ini, por sigurohuni që të hyni dhe të ndryshoni ID -në dhe sekretin e veglës. Funksioni kryesor merr të dhëna të kaluara nga Alexa. Funksioni i poshtëm merr të dhëna në të njëjtin format, por pajisja Alexa do të presë për pesë sekonda që një ngjarje të kalojë mbrapa me ngarkesën e vet. Kjo ngarkesë është e veçantë në atë që pajisja Alexa do të flasë për përmbajtjen e saj.

Pasi të keni këto skedarë, lundroni te dosja "my_project" dhe ekzekutoni skedarin python.

rindez sudo

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

Nëse kjo është hera e parë që po e përdorni programin, do t'ju duhet ta çiftoni me pajisjen tuaj Echo. Sigurohuni që pajisja juaj Echo është pranë Raspberry Pi, pasi ne duhet të lejojmë një lidhje bluetooth.

Në aplikacionin Alexa në pajisjen tuaj celular, klikoni "pajisje" në këndin e poshtëm të djathtë.

Klikoni "Echo & Alexa" në pjesën e sipërme të majtë.

Klikoni në pajisjen tuaj Echo.

Nën "WIRELESS", trokitni lehtë mbi "Pajisjet Bluetooth".

Prekni "Çifto një pajisje të re" dhe do të shihni pajisjen tuaj në listë.

Prekni veglën tuaj. Ju duhet të shihni raportin Pi që është çiftuar me sukses.

Ndërsa shikoni daljen në Pi tuaj, provoni t'i jepni një komandë zanore Echo:

Ju: "Alexa, kërko nga vegla ime të kontrollojë temperaturën nga sensori një"

Nëse gjithçka funksionoi siç duhet, duhet të dëgjoni:

Jehona: "Sonda lexon 120.505 gradë."

Ju: "Alexa, thuaji veglës sime të shkruajë George Washington."

Pi duhet të shtypë:

Të dhënat e marra: {'të dhënat': {'personi': {'emri': 'personi', 'vlera': 'George Washington', 'confirmationStatus': 'JO' '}}}

Xhorxh Uashinton"

Hapi 5: Përfundimi

Videoja e treguar këtu është një shembull i vegël që punon me leximin e temperaturës (e njëjta sondë në F vs C) dhe shkrimi i emrave në një ekran të thjeshtë.

Tani që me shpresë keni diçka që funksionon, duhet të përpiqeni të shkoni dhe ta rregulloni këtë për ta bërë projektin tuaj më të aftë. Mbani mend që ju lehtë mund të redaktoni synimet në tastierën e zhvilluesit Alexa dhe se të gjitha lojërat elektronike që përdorni do t'i kalojnë Pi tuaj në ngarkesën e ngarkesës. Për më tepër, ju mund të bëni që Alexa të thotë gjithçka që dëshironi, thjesht duke redaktuar ngarkesën që kaloni përsëri në rast nga kodi juaj Raspberry Pi.

Ju lutemi vini re se ky tutorial nuk ka për qëllim të jetë një zgjidhje përfundimtare për të gjitha aftësitë që mund të dëshironi me një vegël Alexa. Intentionshtë e kufizuar qëllimisht për t'ju dhënë dy funksione të thjeshta për kalimin e të dhënave në secilin drejtim midis Alexa dhe një vegël. Nëse jeni të interesuar të ndërtoni modele më të sofistikuara të ndërveprimit, unë do t'ju inkurajoja që të lexoni të gjithë skedarët e leximit në https://github.com/alexa/Alexa-Gadgets-Raspberry-P… dhe të provoni të gjithë shembujt që ato ofrojnë Me Unë gjithashtu do t'ju sugjeroja që të lexoni dokumentacionin për Paketën e veglave të Alexa Gadgets dhe Kompletin e Aftësive të Alexa.

Recommended: