Мазмұны:

Raspberry Pi жобасына Alexa реттегішін қосыңыз: 5 қадам
Raspberry Pi жобасына Alexa реттегішін қосыңыз: 5 қадам

Бейне: Raspberry Pi жобасына Alexa реттегішін қосыңыз: 5 қадам

Бейне: Raspberry Pi жобасына Alexa реттегішін қосыңыз: 5 қадам
Бейне: AMA record with community manager Oleg. PARALLEL FINANCE 2024, Шілде
Anonim
Raspberry Pi жобасына Alexa реттегішін қосыңыз
Raspberry Pi жобасына Alexa реттегішін қосыңыз

Бұл жоба Raspberry Pi жобасы бар, кез келген Amazon Echo құрылғылары арқылы дауысты басқаруды қосқысы келетін Python қолданатындарға арналған. Сізге тәжірибелі бағдарламашы болудың қажеті жоқ, бірақ командалық жолды пайдалану және қолданыстағы кодты сіздің қажеттіліктеріңізге бейімдеу ыңғайлы болуы керек.

Мен бастапқыда Raspberry Pi-ді шәйнектегі суды белгілі бір температураға дейін қыздыру үшін Alexa-мен дауысты басқаруға мүмкіндік беретін жобаны бастадым. Мен қалаған өзара әрекеттесу өте қарапайым болғанымен (Alexa -дан Raspberry Pi -ге бір нөмірді жіберу), бірақ қазіргі оқу құралдарынан осы күйге жету үшін көп жұмыс қажет болды. Бұл оқулық бұл процесті басқалар үшін мүмкіндігінше жылдам етеді деп сенемін.

Менің мысалда мен Raspbian -мен Raspberry Pi Zero W -тен бастаймын. Менің Pi -де SPI дисплейіне мәтін жаза алатын Python3 бағдарламасы бар, мен оқуға болатын термометр зондым бар. Сіз үшін бұл бағдарлама кез келген нәрсе болуы мүмкін, бірақ сізде Alexa арқылы оқығыңыз келетін енгізу құрылғылары және/немесе Alexa көмегімен басқарғыңыз келетін кейбір шығыс құрылғылары болуы мүмкін.

Мақсат - жоғарыда сипатталғандай негізгі бағдарламадан менің Эхо -мен оңай басқарылатын құрылғыға өту. Егер сізде бұл жабдық бар деп есептесеңіз, бұл жоба сізге ешқандай шығын әкелмеуі керек. Ақыр соңында, сіз келесідей нәрселерді айта алатын деңгейге жетесіз:

Мен: «Alexa, менің гаджетімнен сенсор 1 -дегі температураны тексеруін сұра.»

Alexa -ның жауабы: «Зонд 72.31 градусқа сәйкес келеді».

немесе

Мен: «Alexa, гаджетіме Джордж Вашингтон жазуды айт»

Жауап: Менің Raspberry Pi -ге қосылған дисплейде қазір «Джордж Вашингтон» жазуы бар

Келесі бөлімде мен бұл жұмысты орындау үшін сахна артында не болуы керек екенін сипаттаймын. Егер сіз мұны сіздің жобаңызда жұмыс жасағыңыз келсе және оның қалай жұмыс істейтініне мән бермесеңіз, оны өткізіп жіберіңіз (бірақ егер бірдеңе дұрыс болмаса, бұл қиын болуы мүмкін).

1 -қадам: Фон

Фон
Фон

Бұл суретте (несие: https://developer.amazon.com/kz-US/docs/alexa/alex… біз Alexa гаджеттерінің жалпы архитектурасын көре аламыз.

Сіз Echo құрылғысына бірдеңе айтқаныңызда, ол аудионы Alexa Cloud -қа жібереді, онда ол өңделеді және сізге жауап беру үшін жауап жасалады. Сіз ауа райы қандай екенін сұрағанда, бұл екеуі ғана қарым -қатынаста. Енді сіз Raspberry Pi -дегі шағын жобалардың біріне дауысты басқаруды қосқыңыз келеді делік. Борттағы барлық нәрсені өңдеу үшін маңызды аппараттық құралдар қажет болады. Жақсы шешім - бұл Alexa Cloud -ты пайдалану, ол өте күрделі және сөйлеудің күрделі үлгілерін басқаруда өте жақсы. Alexa гаджеттері мұны жақсы жолмен қамтамасыз етеді.

Alexa гаджеті bluetooth көмегімен Эхо құрылғысымен байланысады. Бұл байланыс орнатылғаннан кейін екеуі UTF-8 кодтау арқылы бір-біріне хабарлама жібереді. Эхо гаджетке бірдеңе бергенде, ол директива деп аталады. Басқа бағытты оқиға деп атайды. Осының барлығына нақты кіріспес бұрын, біз тағы бір негізгі элементті енгізуіміз керек: реттелетін Alexa Skills.

Alexa әзірлеушілерге барлық Echo құрылғыларында пайдалану үшін өздерінің өзара әрекеттері мен мінез -құлқын жобалауға мүмкіндік беретін өздерінің жеке дағдыларын құруға мүмкіндік береді. Мысалы, әзірлеуші сізге АҚШ -тың екі әуежайының арасындағы қашықтықты айтуға мүмкіндік беретін дағды жасай алады. Пайдаланушы: «Alexa, менің жеке қашықтық калькуляторымнан LAX пен JFK арасындағы қашықтық қандай екенін сұра», - десе, ол «2475 миль» деп жауап бере алады. Мұны қалай жасайды? Әзірлеуші арнайы дағдыларды жасаған кезде, олар «слоттары» бар «үлгідегі айтылымдармен» «арнайы ниет» деп аталатын нәрсені анықтайды. Мысалы, бұл дағдыда менде екі нүкте арасындағы қашықтықты есептеу үшін «calc_dist» ниеті болуы мүмкін. Мысал ретінде «{slot1} мен {slot2} арасындағы қашықтық» немесе «{slot1} мен {slot2} арасындағы қашықтық») айтылады. Жақшаларда көрсетілген слоттардың белгілі бір түрлері бар. Бұл жағдайда LAX, JFK, BOS, ATL сияқты әуежай кодтары болады. Пайдаланушы арнайы дағдыларды сұрағанда, Alexa Cloud қолданушының айтылған сөзін берілген үлгідегі айтылымдарды қолдана отырып сәйкестендіруге тырысады және осы сұрау үшін жарамды ұяшық мәндерін табуға тырысады. Бұл мысалда пайдаланушы «calc_dist» ниетін қалайтынын және 1 ұясы LAX, ал 2 ұяшығы JFK екенін біледі. Бұл кезде Alexa Cloud бұл жұмысты әзірлеушінің жеке кодына береді. Негізінде, бұл әзірлеушілерге қандай мақсатты алғанын және барлық бөлшектердің мәні қандай екенін айтады.

Әзірлеуші олардың коды қайда тұратындығын шешеді, бірақ AWS Lambda функциясын қолдану өте танымал. Егер сіз бұл не екенін білмесеңіз, бұл кез келген уақытта іске қосылатын кодты жүктеуге мүмкіндік беретін қызмет, содан кейін сізден тек сіздің кодыңыз іске қосылған уақытқа ақы алады. Егер біз өз мысалмен жалғастыратын болсақ, әзірлеушінің коды екі әуежай кодын қабылдайтын, олардың орналасқан жерін іздейтін, қашықтықты есептейтін және қолданушыға бірдеңе айту үшін Alexa бұлтына жауап жіберетін Python функциясы болуы мүмкін. Содан кейін Alexa Cloud бұл сөйлеу ақпаратын пайдаланушының құрылғысына жібереді және олар жауап алады.

Енді біз гаджетке ораламыз. Біз арнайы гаджеттермен жұмыс істеуге арналған дағдыларды жасай аламыз. Әзірлеуші қосылған гаджетке директива жіберетін дағды жаза алады. Бұл директивада гаджетке қажет болғанша қолдануға болатын пайдалы жүктеме бар. Бұл дағды сонымен қатар нұсқаулық жібере алады, содан кейін гаджеттен оқиғаны тыңдай алады, осылайша дағдылар коды гаджеттен жіберілген ақпаратқа қол жеткізе алады.

Бұл ағынды орнату өте қуатты құралды құруға мүмкіндік береді, себебі қымбат емес гаджеттер бұлттағы кодпен байланыс орнатуға және қол жетімді ең жақсы дауысты тану арқылы дауыстық командаларға жауап беруге қабілетті.

Айта кету керек, дағдылардың көпшілігі олармен өзара әрекеттесудің әр түрлі әдістеріне мүмкіндік береді. Мысалы, пайдаланушы «Alexa, менің реттелетін қашықтық калькуляторымнан LAX пен JFK арасындағы қашықтық қандай екенін сұраңыз» деп айтуға болады (немесе бір рет шақыру деп аталады) немесе олар: «Alexa, менің жеке қашықтық калькуляторымды ашыңыз ». Бұл соңғы мысалға әдетте Alexa қосымша ақпарат сұрауымен жауап береді. Бұл оқулық соңғысына қолдауды әдейі жоққа шығарады. Нақтырақ айтқанда, Lambda функциясын өзгертпестен, сіз дағдыларды тек бір рет шақыру арқылы шақыра аласыз. Бұл дизайн таңдауы модельге қарапайым болуға мүмкіндік береді (іске қосу мақсатын немесе сөйлесу ағымын қолдамайды) және мен әдетте гаджеттермен бір реттік шақыруларды қолдана отырып қарым-қатынас жасағым келетінін байқадым, өйткені олар әдетте жылдамырақ.

2 -қадам: гаджетті Alexa Voice Service Developer Console -ге тіркеңіз

Төменде қажетті қадамдардың сипаттамасы берілген. Мен осы қадамдардың барлығын қалай жасау керектігін көрсететін балама бейне жасадым. Бұл қадамды аяқтау үшін сіз біреуін немесе екеуін де пайдалана аласыз.

  1. Https://developer.amazon.com/alexa/console/avs/hom… өтіңіз.
  2. Егер сізде тегін тіркелгі болмаса, оны жасаңыз
  3. «Өнімдер» түймесін басыңыз
  4. Белгілерді толтырып, «Alexa гаджетін» таңдаңыз.
  5. Қалған өрістерде қалағаныңызды толтырыңыз
  6. Аяқтау түймешігін басыңыз

3 -қадам: AWS Lambda функциясын және арнайы дағдыларды жасаңыз

Alexa Skills Kit Developer Console -да жеке дағдыларды жасаңыз

Бұл оқулықтың кодын мына жерден табуға болады

Бұл қадамды аяқтамас бұрын, мұнда оқулықта көрсетілгендей, AWS Lambda функциясының қолдану пакетін қамтитын.zip файлын жасау қажет болады.

  1. Github -дан «lambda_function.py» және «талаптар.txt» бар «lambda» қалтасын жүктеңіз.
  2. Терминалды ашып, ағымдағы каталогты осы қалтаға өзгертіңіз.
  3. Келесі тізбекті іске қосыңыз:

pip install -r талаптар.txt -t skill_env

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

Сіздің.zip файлы енді lambda қалтасы орналасқан каталогта орналасады және «skill-code.zip» деп аталады.

AWS хостингінің құны туралы ескерту: Бұл оқулықта сізде AWS тіркелгісі болуы қажет (жасау тегін). Lambda функциялары ақшаны талап етеді, алайда олардың Вирджиния штатындағы қазіргі бағасы 128 МБ жадымен 100 мс үшін 0,000000208 долларды құрайды. Анықтама үшін, менің дағдыларымның әр шақыруы осы деңгейдегі шамамен 800 мс пайдалануды есептейді. $ 1.00USD есепшотын алу үшін сіз бұл функцияны шамамен 600 000 рет шақыруыңыз керек еді, бұл сізге бір шақыру үшін 5 секунд қажет болса, сізге 34 күн бойы үздіксіз қоңырау шалуға тура келеді. Егер сіз өзіңіздің дағдыларыңызды жарияламасаңыз және көптеген адамдар оны қолдана алмаса, шығын маңызды мәселе болмауы керек. Егер сіз AWS бойынша есепшоттар алуға алаңдайтын болсаңыз, егер пайдалану белгіленген шекті өтсе, сізге хабар беретін пайдалану дабылдарын орнатуды қарастырыңыз.

Төменде қажетті қадамдардың сипаттамасы берілген. Мен осы қадамдардың барлығын қалай жасау керектігін көрсететін балама бейне жасадым. Бұл қадамды аяқтау үшін сіз біреуін немесе екеуін де пайдалана аласыз.

  1. Https://aws.amazon.com/ сайтына өтіңіз және консольге кіріңіз немесе егер сізде жоқ болса, тегін тіркелгі жасаңыз.
  2. Қызметтерден Lambda іздеңіз және басыңыз
  3. «Функцияны құру» түймесін басыңыз
  4. «Авторды нөлден» таңдаңыз, оған атау беріңіз және жұмыс уақыты үшін Python 3 соңғы нұсқасын таңдаңыз
  5. «Ішкі кодты өңдеуді» «.zip файлын жүктеу» етіп өзгертіңіз және жоғарыда жасалған.zip файлын таңдаңыз
  6. Жаңа терезеде https://developer.amazon.com/alexa/console/ask сайтына өтіп, жүйеге кіріңіз.
  7. «Дағды жасау» түймесін басыңыз
  8. Оны белгілеп, «Арнаулы» үлгісін және «Өзіндік қамтамасыз етуді» таңдаңыз және «Дағды жасау» түймесін басыңыз.
  9. «Сызбадан бастау» түймесін басып, «Таңдау» түймесін басыңыз.
  10. «Ниеттер» астында «Қосу» түймесін басыңыз
  11. «Alexa_to_pi» деп аталатын реттелетін ниетті жасаңыз және үлгі ретінде «{person}» жазыңыз.
  12. «AMAZON. Person» түріндегі «адам» деп аталатын ойынды жасаңыз.
  13. «Pi_to_alexa» деп аталатын реттелетін ниетті жасаңыз және «{sensor_num} сенсорынан температураны тексеріңіз» дегенді толтырыңыз.
  14. «AMAZON. NUMBER» түріндегі «sensor_num» деп аталатын ниет ұясын жасаңыз.
  15. Интерфейстер астында «Арнайы интерфейс контроллері» қосыңыз.
  16. Endpoint астында «AWS Lambda ARN» тармағын таңдап, «Сіздің дағдылар идентификаторын» көшіріңіз.
  17. AWS консоліне оралыңыз
  18. «Іске қосу» түймесін басыңыз
  19. «Alexa Skills жиынтығын» таңдаңыз, Skill ID тексеру астында «Enable» құсбелгісін қойыңыз, жаңа көшірілген Skill ID қойыңыз және «Қосу» түймесін басыңыз.
  20. Жоғарғы оң жақ бұрыштағы Lambda ARN көшіріңіз
  21. Alexa әзірлеуші консоліне оралыңыз және Lambda ARN -ді «Әдепкі аймақ» өрісіне қойыңыз.
  22. Шақыру бөлімінде дағдыларды шақыру атауын «менің гаджетім» етіп орнатыңыз.
  23. «Үлгіні сақтау» түймесін, содан кейін «Үлгіні құру» түймесін басыңыз.
  24. Жоғарғы қойындыларда «Сынақ» түймесін басып, селекторды «Өшірулі» күйінен «Даму» күйіне өзгертіңіз.
  25. Lambda функциясының журналдары AWS -те «CloudWatch» қызметінде табылғанын ескеріңіз.

4 -қадам: Raspberry Pi -ге кодты орнатыңыз

Raspberry Pi сіздің Alexa құрылғысымен байланысуы үшін, басқа бірнеше файлдардан басқа, Bluetooth арқылы ақпаратты жіберуге және сол байланысты сақтауға көмектесетін код қажет. Amazon-дан ең жаңа файлдарды бастаудың ең оңай жолы-олардың Raspberry Pi Gadgets репозиторийін клондау. Ағымдағы жобаның каталогына өтіңіз және іске қосыңыз

git clone

Бұл олардың барлық репозиторийін Pi -ге барлық қажетті кодпен жүктейді. Онда Alexa гаджеттерінің кейбір мүмкіндіктерін көрсететін бірнеше жобалар бар. Егер сіз қосымша ақпарат алғыңыз келсе, олардың Github бетіндегі оқу мәтінін қараңыз.

Барлығын конфигурациялау үшін олардың орнату функциясын іске қосыңыз.

cd/home/pi/Alexa-гаджеттер-таңқурай-Pi-үлгілері

sudo python3 launch.py -орнату

Гаджет тіркелгі деректерінің көмегімен конфигурациялау қажет пе деген сұраққа нұсқауларды орындаңыз және «y» деп жауап беріңіз. Әзірлеуші консолінде гаджетті орнатудан Amazon ID мен гаджет құпиясын еске түсіріңіз, себебі ол мұнда сұралады. Мен Raspberry Pi Zero W. үшін «bt» беру режимін таңдадым. BLE барлық ескі Echo құрылғыларына қолдау көрсетпейді, бірақ сіз өзіңіздің аппараттық құралдарыңыз не істей алатынын біле аласыз. Егер сіз Pi-ді жұмыс үстелі режимінде қолдансаңыз, Amazon қосылу мәселелерін болдырмау үшін жоғарғы оң жақтағы Bluetooth белгішесін тінтуірдің оң жақ түймесімен басуды және «Bluetooth» тақтасынан жоюды «басуды ұсынады.

Ескертпе: бұл қадам қанша уақыт қажет болуы мүмкін.

Енді сіздің жобаңызға қайтып оралу үшін барлық қажетті қолдау файлдары болады және Эхо -мен байланыс орнатуға мүмкіндік беретін функцияларды қосуға болады.

Егер сіз таңдасаңыз, «Alexa-Gadgets-Raspberry-Pi-Samples/src» ішіндегі «мысалдар» қалтасын жоя аласыз.

Сіз өзіңіздің жобаңыздың кодын қалаған жеріңізде ала аласыз, бірақ мен оған үй каталогында қалта жасаймын, әйтпесе сіз менің қалтаңыздағы Github қалтасынан кодты жүктей аласыз,.ini файлдарын төменде сипатталғандай өңдеңіз.

cd /home /pi

mkdir my_project cd my_project my_gadget.py түрту my_gadget.ini басыңыз

Мен қазір «my_project» деп аталатын қалтада екі файл жасадым.. Ini файлы маңызды. Онда Amazon идентификаторы мен гаджет құпиясында төмендегілер бар екеніне көз жеткізіңіз:

[GadgetSettings]

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

Енді егжей -тегжейлі білмес бұрын python файлын қарастырайық:

json импорттау

AlexaGadget импортынан

MyGadget класы (AlexaGadget):

def _init _ (өзін):

супер ()._ бастамасы _ ()

def on_custom_mygadget_alexatopi (өзіндік, нұсқаулық):

payload = json.loads (directive.payload.decode («utf-8»)) басып шығару («Алынған деректер:» + str (пайдалы жүктеме)) write_text (str (пайдалы жүктеме ['деректер'] ['адам'] ['мәні ']))

def on_custom_mygadget_pitoalexa (өзіндік, нұсқаулық):

payload = json.loads (directive.payload.decode («utf-8»)) басып шығару («Алынған деректер:» + str (пайдалы жүктеме)) пайдалы жүктеме = {'деректер': «Зонд оқылады» + str (get_temp (жүктеме) ['data'] ['sensor_num'] ['value']))) + «градус.»} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', пайдалы жүктеме) MyGadget (). main ()

Алдымен сіз оның екі функцияны шақыратынын байқайсыз: write_text () және get_temp (). Менің кодымда мен бұл функцияларды бір файлда анықтаймын, бірақ олар менің аппараттық құралыма тәуелді, сондықтан мен оларды алып тастауды шештім. Мен бұл файлды дәл кодты іске қосқыңыз келсе, жалған деректерді басып шығару және қайтару үшін анықталған функциялармен тіркедім. Мен сіздің жобаңызбен жұмыс істеу үшін оны өзгертпес бұрын дәл осы кодпен тестілеуді ұсынар едім. Мен сондай -ақ.ini файлын тіркедім, бірақ сіз кіріп, идентификатор мен гаджет құпиясын өзгертіңіз. Жоғарғы функция Alexa -дан алынған деректерді алады. Төменгі функция деректерді бірдей форматта қабылдайды, бірақ Alexa құрылғысы оқиғаның өз жүктемесімен қайтарылуын бес секунд күтеді. Бұл жүктеме Alexa құрылғысының мазмұнын айтатындығымен ерекшеленеді.

Сізде бұл файлдар болғаннан кейін «my_project» қалтасына өтіп, python файлын іске қосыңыз.

sudo қайта жүктеу

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

Егер сіз бағдарламаны бірінші рет іске қоссаңыз, оны Echo құрылғысымен жұптастыру қажет болады. Сіздің жаңғырық құрылғыңыз Raspberry Pi -ге жақын екеніне көз жеткізіңіз, өйткені біз Bluetooth қосылымына рұқсат беруіміз керек.

Мобильді құрылғыдағы Alexa қосымшасында оң жақ төменгі бұрыштағы «құрылғыларды» басыңыз.

Жоғарғы сол жақтағы «Echo & Alexa» түймесін басыңыз.

Echo құрылғысын басыңыз.

«Сымсыз» астында «Bluetooth құрылғылары» түймесін түртіңіз.

«ЖАҢА ҚҰРЫЛҒЫНЫ ЖҰПТАУ» түймесін түртіңіз, сонда сіз гаджетті тізімнен көресіз.

Гаджетті түртіңіз. Сіз Pi сәтті жұптастырылғанын көресіз.

Pi -дегі шығуды қарап отырып, Эхоға дауыстық пәрмен беруге тырысыңыз:

Сіз: «Alexa, менің гаджетімнен сенсор біріншіден температураны тексеруін сұра»

Егер бәрі дұрыс жұмыс істесе, сіз естуіңіз керек:

Эхо: «Зондта 120.505 градус оқылады».

Сіз: «Alexa, менің гаджетіме Джордж Вашингтонды жазуды айт.»

Pi басып шығаруы керек:

«Алынған деректер: {'деректер': {'адам': {'аты': 'адам', 'мән': 'Джордж Вашингтон', 'растау Мәртебесі': 'ЖОҚ'}}}

Джордж Вашингтон »

5 -қадам: Жинау

Мұнда көрсетілген бейне - бұл температураны оқу (F және C -ге ұқсас бірдей зонд) және қарапайым дисплейге аттарды жазумен жұмыс істейтін гаджеттің мысалы.

Енді сізде жұмыс істейтін нәрсе бар деп үміттенемін, сіз өзіңіздің жобаңызды неғұрлым қабілетті ету үшін оны реттеуге тырысуыңыз керек. Есіңізде болсын, сіз Alexa Developer Console -да ниетті оңай өңдей аласыз және сіз қолданатын барлық слоттар сіздің Pi -ге пайдалы жүктемеде беріледі. Сонымен қатар, сіз Alexa -ға Raspberry Pi коды арқылы берілген жағдайда жүктемені өңдеу арқылы өзіңіз қалаған нәрсені айта аласыз.

Назар аударыңыз, бұл оқулық Alexa гаджетімен қажет болатын барлық мүмкіндіктердің түпкілікті шешімі емес. Сізге Alexa мен гаджет арасында әр бағытта деректерді берудің екі қарапайым функциясын беру әдейі шектелген. Егер сіз өзара әрекеттесудің күрделі үлгілерін құрғыңыз келсе, мен сізге барлық readme файлдарын https://github.com/alexa/Alexa-Gadgets-Raspberry-P… сайтында оқуға және олар ұсынатын барлық мысалдарды қолдануға кеңес берер едім.. Мен сізге Alexa Gadgets Toolkit пен Alexa Skills жиынтығының құжаттарын оқуды ұсынамын.

Ұсынылған: