Съдържание:

Добавете персонализиран Alexa контрол към Raspberry Pi Project: 5 стъпки
Добавете персонализиран Alexa контрол към Raspberry Pi Project: 5 стъпки

Видео: Добавете персонализиран Alexa контрол към Raspberry Pi Project: 5 стъпки

Видео: Добавете персонализиран Alexa контрол към Raspberry Pi Project: 5 стъпки
Видео: Linptech ES1 - microwave presence sensor for mihome, Home Assistant Gateway 3 integration 2024, Ноември
Anonim
Добавете персонализиран Alexa контрол към Raspberry Pi Project
Добавете персонализиран Alexa контрол към Raspberry Pi Project

Този проект е предназначен за всеки, който има проект на Raspberry Pi, който използва Python, който иска да добави гласов контрол чрез съществуващите си устройства Amazon Echo. Не е нужно да сте опитен програмист, но трябва да се чувствате удобно да използвате командния ред и да адаптирате съществуващия код, за да отговаря на вашите нужди.

Първоначално се заех с проект, който да позволи на Raspberry Pi да бъде гласово контролиран с Alexa, така че да може да загрява вода в чайник до определена температура. Въпреки че взаимодействието, което исках, беше съвсем просто (предайте един номер от Alexa на Raspberry Pi), беше необходима много работа, за да стигнете до това състояние от съществуващите уроци. Надявам се, че този урок ще направи този процес възможно най -бърз за другите.

В моя пример започвам с Raspberry Pi Zero W с Raspbian. Имам програма Python3 на моя Pi, която е способна да записва текст на SPI дисплей и имам сонда за термометър, която мога да чета. За вас тази програма може да бъде почти всичко, но идеята е, че може да имате някои входни устройства, които искате да четете чрез Alexa и/или някои изходни устройства, които искате да контролирате с помощта на Alexa.

Целта е да преминете от основна програма, като тази, описана по -горе, до устройство, което лесно можете да управлявате с моя Echo. Ако приемем, че вече имате този хардуер, този проект не трябва да ви струва пари. В крайна сметка ще стигнете до точката, в която можете да кажете неща като:

Аз: "Алекса, помоли притурката ми да провери температурата на сензор 1."

Отговорът на Алекса: "Сондата отчита 72,31 градуса."

или

Аз: "Алекса, кажи на притурката ми да напише Джордж Вашингтон"

Отговор: На дисплея, свързан с моя Raspberry Pi, сега пише „Джордж Вашингтон“

В следващия раздел ще опиша какво трябва да се случи зад кулисите, за да работи тази работа. Ако просто искате да накарате това да работи върху вашия проект и не ви пука как работи, не се колебайте да го пропуснете (макар че може да затрудни, ако нещо се обърка).

Стъпка 1: Предистория

Заден план
Заден план

На това изображение (кредит: https://developer.amazon.com/en-US/docs/alexa/alex… можем да видим общата архитектура на Alexa Gadgets.

Когато кажете нещо на вашето Echo устройство, то изпраща звука до облака Alexa, където се обработва и където се генерира отговор, който да ви отговори. Когато попитате какво е времето, точно тези двамата общуват. Сега да предположим, че искате да добавите гласов контрол към един от вашите малки проекти на Raspberry Pi. Обработката на всичко на борда ще изисква значителен хардуер и много сложна кодова база, за да вървят нещата. По -добро решение би било да се използва Alexa Cloud, който е много сложен и е станал много добър в справянето със сложни речеви модели. Alexa Gadgets предоставя добър начин да направите това.

Притурката Alexa комуникира с Echo устройство чрез Bluetooth. След като тази връзка се установи, двамата си предават съобщения, използвайки кодиране UTF-8. Когато Echo предава нещо на притурката, това се нарича директива. Другата посока се нарича събитие. Преди да преминем в точния поток на всичко това, трябва да въведем друг ключов елемент: персонализирани умения на Alexa.

Alexa позволява на разработчиците да създават свои собствени персонализирани умения, което им позволява да проектират свои собствени взаимодействия и поведение за използване на всички Echo устройства. Например, програмист може да създаде персонализирано умение, за да ви каже разстоянието между две летища в САЩ. Един потребител би казал: „Алекса, попитай моя персонализиран калкулатор на разстоянието какво е разстоянието между LAX и JFK“и той може да отговори с „2475 мили“. Как се прави това? Когато разработчикът прави персонализирано умение, те определят това, което се нарича „персонализирани намерения“с „примерни изказвания“, съдържащи „слотове“. Например в това умение може да имам намерение „calc_dist“да изчисля разстоянието между две точки. Примерно изказване би било "какво е разстоянието между {slot1} и {slot2}" или "колко далеч между {slot1} и {slot2}". Прорезите, показани в скоби, имат специфични типове. В този случай тези типове биха били летищни кодове като LAX, JFK, BOS, ATL. Когато потребител поиска персонализирано умение, Alexa Cloud се опитва да съпостави казаното от потребителя с персонализирано намерение, като използва предоставените примерни изказвания и се опитва да намери валидни стойности на слота за тази заявка. В този пример ще се установи, че потребителят иска намерението „calc_dist“и че слот1 е LAX, а слот2 е JFK. В този момент облакът Alexa предава работата на собствения код на разработчика. По принцип той казва на кода на разработчиците какво намерение е получил и какви са всички стойности на слота, наред с други подробности.

Разработчикът може да реши къде живее техният код, но много популярен вариант е да се използва AWS Lambda функция. Ако не знаете какво е това, това е по същество услуга, която ви позволява да качвате код, който може да се изпълнява по всяко време и след това да ви таксува само за времето, през което кодът ви се изпълнява. Ако продължим с нашия пример, кодът на разработчика може да бъде функция на Python, която получава двата кода на летището, търси техните местоположения, изчислява разстоянията и след това изпраща отговор обратно до облака Alexa, за да говори нещо на потребителя. След това облакът Alexa ще изпрати тази речева информация обратно на устройството на потребителя и те ще получат отговора.

Сега можем да се върнем към притурката. Можем да създадем персонализирани умения, предназначени да работят специално с притурки. Разработчикът може да напише умение, което изпраща директива към свързана притурка. Тази директива има полезен товар, който може да се използва, въпреки че е необходим на притурката. Това умение може също да изпрати директива и след това да изслуша събитие от притурката, така че кодът на умението да има достъп до информация, изпратена от притурката.

Установяването на този поток позволява създаването на много мощен инструмент, тъй като евтините притурки могат да имат способността да комуникират с код в облака и да реагират на гласови команди, използвайки някои от най -добрите налични разпознавания на глас.

Трябва да се отбележи, че повечето умения позволяват различни начини за взаимодействие с тях. Например, потребител може да скочи направо в намерение, като каже „Алекса, попитай моя персонализиран калкулатор на разстоянието какво е разстоянието между LAX и JFK“(наречено еднократно извикване) или може просто да използва намерение за стартиране: „Alexa, отворете моя персонализиран калкулатор на разстояние . Този последен пример обикновено ще бъде последван от Alexa, който отговаря с подкана за повече информация. Този урок умишлено пропуска поддръжката за последното. По-конкретно, без да променяте функцията Lambda, можете да извикате умението само с еднократно извикване. Този избор на дизайн позволява моделът да бъде по-прост (не трябва да поддържа намерения за стартиране или поток на разговор) и установих, че обикновено искам да взаимодействам с притурките си, като използвам еднократни извиквания, тъй като те обикновено са по-бързи.

Стъпка 2: Регистрирайте притурката в конзолата за разработчици на Alexa Voice Service

По -долу е дадено описание на необходимите стъпки. Създадох еквивалентен видеоклип, който показва как да направите всички тези стъпки. Можете да използвате или и двете, за да завършите тази стъпка.

  1. Придвижете се до
  2. Ако все още нямате безплатен акаунт, направете го
  3. Кликнете върху „Продукти“
  4. Попълнете етикети и изберете „Alexa Gadget“
  5. Попълнете каквото искате за останалите полета
  6. Щракнете върху Готово

Стъпка 3: Създайте AWS Lambda функция и персонализирани умения

Създайте персонализирани умения в конзолата за разработчици на Alexa Skills Kit

Кодът за този урок може да бъде намерен тук

Преди да завършите тази стъпка, ще трябва да създадете.zip файл, който съдържа пакета за внедряване за функцията AWS Lambda, както е показано в урока тук.

  1. Изтеглете папката "lambda" от моя Github, която съдържа "lambda_function.py" и "requirements.txt"
  2. Отворете терминала и променете текущата директория в тази папка.
  3. Изпълнете следната последователност:

pip install -r requirements.txt -t skill_env

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

Вашият.zip файл сега ще се намира в директорията, където е била ламбда папката и ще се нарича "skill-code.zip".

Бележка за цената на хостинга на AWS: Този урок изисква да имате акаунт в AWS (безплатен за създаване). Ламбда функциите струват пари, но сегашните им цени в региона на Северна Вирджиния са $ 0,000000208 на 100ms използване с 128MB памет. За справка, всяко извикване на моите умения изчислява около 800ms използване в този ред. За да съберете сметка от $ 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" и попълнете "write {person}" като примерно изказване
  12. Направете слот за намерение, наречен „човек“с тип „AMAZON. Person“
  13. Създайте персонализирано намерение, наречено „pi_to_alexa“и попълнете „проверете температурата от сензора {sensor_num}
  14. Направете слот за намерение, наречен "sensor_num" с тип "AMAZON. NUMBER"
  15. Под Интерфейси включете „Контролер за персонализиран интерфейс“
  16. Под Endpoint изберете „AWS Lambda ARN“и копирайте „Your Skill ID“
  17. Върнете се обратно в AWS Console
  18. Кликнете върху „Добавяне на тригер“
  19. Изберете „Alexa Skills Kit“, поставете отметка в „Enable“под Verification ID за проверка, поставете току -що копирания ID на умението и щракнете върху add
  20. Копирайте Lambda ARN в горния десен ъгъл
  21. Придвижете се обратно до конзолата за разработчици на Alexa и поставете Lambda ARN в полето „Регион по подразбиране“
  22. Под Извикване задайте Името за извикване на умения да бъде „моята притурка“
  23. Кликнете върху „Запазване на модел“и след това върху „Създаване на модел“
  24. Кликнете върху „Тест“в горните раздели и променете селектора от „Изключено“на „Развитие“
  25. Обърнете внимание, че регистрационните файлове за функцията Lambda се намират в услугата "CloudWatch" на AWS.

Стъпка 4: Настройте кода на вашия Raspberry Pi

За да комуникира Raspberry Pi с устройството Alexa, той се нуждае от код, за да улесни предаването на информация по bluetooth и поддържането на тази връзка, в допълнение към няколко други файла. Най-лесният начин да започнете с най-актуалните файлове от Amazon е да клонирате тяхното хранилище на Raspberry Pi Gadgets. Придвижете се до директорията на текущия си проект и стартирайте

git clone

Това ще зареди цялото им хранилище с целия необходим код във вашия Pi. Той има някои примерни проекти, които показват някои от възможностите на Alexa Gadgets. Ако искате повече информация, вижте readme на тяхната страница Github.

Изпълнете тяхната настройка, за да конфигурирате всичко.

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

sudo python3 launch.py --setup

Следвайте подканите и отговорете с „y“, когато бъдете попитани дали искате да конфигурирате с помощта на идентификационните си данни за притурката. Припомнете си Amazon ID и Gadget Secret от настройката на вашата притурка в конзолата за програмисти, тъй като тя ще бъде поискана тук. Избрах "bt" режим на предаване за моя Raspberry Pi Zero W. BLE не се поддържа от всички по -стари Echo устройства, но можете да потърсите на какво е способен вашият хардуер. Ако използвате вашия Pi в режим Desktop, Amazon препоръчва да щракнете с десния бутон върху иконата на Bluetooth в горния десен ъгъл и да кликнете върху „Премахване на„ Bluetooth “от панела“, за да избегнете проблеми с връзката.

Забележка: тази стъпка може да отнеме известно време в зависимост от това колко трябва да се инсталира.

Сега ще имате всички необходими файлове за поддръжка, за да се върнете към вашия проект и да започнете да добавяте функциите, за да позволите комуникация с вашия Echo.

Ако изберете, можете да изтриете папката "examples" в "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 ID и Gadget Secret:

[GadgetSettings]

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

Сега, нека да разгледаме файла python, преди да влезем в подробностите:

импортиране на json

от agt внос AlexaGadget

клас MyGadget (AlexaGadget):

def _init _ (себе си):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (self, директива):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Получени данни:" + str (полезен товар)) write_text (str (полезен товар ['data'] ['person'] ['value ']))

def on_custom_mygadget_pitoalexa (self, директива):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Получени данни:" + str (полезен товар)) payload = {'data': "Сондата чете" + 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 устройство. Уверете се, че вашето Echo устройство е близо до Raspberry Pi, тъй като трябва да разрешим Bluetooth връзка.

В приложението Alexa на мобилното си устройство кликнете върху „устройства“в долния десен ъгъл.

Кликнете върху „Echo & Alexa“горе вляво.

Кликнете върху вашето Echo устройство.

Под „БЕЗЖИЧНО“докоснете „Bluetooth устройства“.

Докоснете „СЧИТВАНЕ НА НОВО УСТРОЙСТВО“и трябва да видите притурката си в списъка.

Докоснете притурката си. Трябва да видите отчета Pi, че той е сдвоен успешно.

Докато гледате изхода на вашия Pi, опитайте да дадете гласова команда на Echo:

Вие: "Алекса, помоли притурката ми да провери температурата от сензор 1"

Ако всичко работи правилно, трябва да чуете:

Ехо: "Сондата отчита 120.505 градуса."

Вие: "Алекса, кажи на моята притурка да напише Джордж Вашингтон."

Pi трябва да отпечата:

Получени данни: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

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

Стъпка 5: Приключване

Видеоклипът, показан тук, е пример за работа на притурката с отчитане на температурата (същата сонда във F срещу C) и изписване на имена на обикновен дисплей.

Сега, когато се надяваме, че нещо работи, трябва да опитате да го персонализирате, за да направите своя собствен проект по -способен. Не забравяйте, че можете лесно да редактирате намеренията в конзолата за разработчици на Alexa и че всички слотове, които използвате, ще бъдат предадени на вашия Pi в полезния товар. Освен това можете да накарате Alexa да каже всичко, което искате, като просто редактирате полезния товар, който предавате обратно в събитието от вашия код на Raspberry Pi.

Моля, обърнете внимание, че този урок не е окончателно решение за всички възможности, които бихте искали с Alexa Gadget. Умишлено е ограничено да ви даде две прости функции за предаване на данни във всяка посока между Alexa и притурка. Ако се интересувате от изграждането на по-сложни модели на взаимодействие, бих ви насърчил да прочетете всички файлове за readme в https://github.com/alexa/Alexa-Gadgets-Raspberry-P… и да изпробвате всички примери, които те предоставят. Предлагам също така да прочетете документацията за инструментариума на Alexa Gadgets и комплекта Alexa Skills Kit.

Препоръчано: