Taula de continguts:

Afegiu el control personalitzat Alexa al projecte Raspberry Pi: 5 passos
Afegiu el control personalitzat Alexa al projecte Raspberry Pi: 5 passos

Vídeo: Afegiu el control personalitzat Alexa al projecte Raspberry Pi: 5 passos

Vídeo: Afegiu el control personalitzat Alexa al projecte Raspberry Pi: 5 passos
Vídeo: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, Desembre
Anonim
Afegiu el control personalitzat Alexa al Projecte Raspberry Pi
Afegiu el control personalitzat Alexa al Projecte Raspberry Pi

Aquest projecte està pensat per a qualsevol persona que tingui un projecte Raspberry Pi que utilitzi Python i que vulgui afegir control de veu mitjançant els seus dispositius existents Amazon Echo. No cal que sigueu un programador experimentat, però us heu de sentir còmode utilitzant la línia d’ordres i adaptant el codi existent per adaptar-lo a les vostres necessitats.

Inicialment vaig començar un projecte per permetre que el meu Raspberry Pi pogués ser controlat per veu amb Alexa per tal que pogués escalfar l’aigua d’un bullidor a una temperatura específica. Tot i que la interacció que volia era bastant senzilla (passar un número d'Alexa al Raspberry Pi), va caldre molta feina per arribar a aquest estat a partir dels tutorials existents. Espero que aquest tutorial faci que aquest procés sigui el més ràpid possible per a la resta.

En el meu exemple, començo amb un Raspberry Pi Zero W amb Raspbian. Tinc un programa Python3 al meu Pi que és capaç d’escriure text en una pantalla SPI i tinc una sonda de termòmetre que puc llegir. Per a vosaltres, aquest programa pot ser gairebé qualsevol cosa, però la idea és que pugueu tenir alguns dispositius d’entrada que vulgueu llegir mitjançant Alexa i / o alguns dispositius de sortida que vulgueu controlar mitjançant Alexa.

L’objectiu és passar d’un programa bàsic com el descrit anteriorment a un dispositiu que pugui controlar fàcilment amb el meu Echo. Suposant que ja disposeu d’aquest maquinari, aquest projecte no us hauria de costar. Al final, arribareu al punt en què podeu dir coses com:

Jo: "Alexa, demana al meu aparell que comprovi la temperatura del sensor 1."

Resposta d'Alexa: "La sonda llegeix 72,31 graus".

o bé

Jo: "Alexa, digues al meu aparell que escrigui George Washington"

Resposta: La pantalla connectada al meu Raspberry Pi ara diu "George Washington"

A la següent secció, descriuré què ha de passar entre bastidors perquè aquest treball funcioni. Si només voleu que això funcioni al vostre projecte i no us interessi el seu funcionament, no dubteu a ometre-lo (tot i que pot ser que sigui més difícil si alguna cosa surt malament).

Pas 1: antecedents

Antecedents
Antecedents

En aquesta imatge (crèdit: https://developer.amazon.com/en-US/docs/alexa/alex… podem veure l’arquitectura general dels gadgets d’Alexa.

Quan dius alguna cosa al dispositiu Echo, envia l'àudio a Alexa Cloud, on es processa i es genera una resposta que et respon. Quan es pregunta quin temps fa, són aquests dos els que estan en comunicació. Ara suposem que voleu afegir control de veu a un dels vostres petits projectes en un Raspberry Pi. Per processar tot el que hi hagi a bord, caldria un maquinari important i una base de codis molt sofisticada per fer funcionar les coses. Una millor solució seria aprofitar Alexa Cloud, que és molt sofisticat i ha aconseguit molt bé la gestió de patrons de parla complexos. Els gadgets Alexa us ofereixen una bona manera de fer-ho.

Un gadget Alexa es comunica amb un dispositiu Echo mitjançant bluetooth. Un cop establerta aquesta connexió, els dos es transmeten missatges mitjançant la codificació UTF-8. Quan l’Echo passa alguna cosa al gadget, s’anomena directiva. L’altra direcció es coneix com un esdeveniment. Abans d’entrar en el flux exacte de tot això, hauríem d’introduir un altre element clau: les habilitats personalitzades d’Alexa.

Alexa permet als desenvolupadors crear les seves pròpies habilitats personalitzades, cosa que els permet dissenyar les seves pròpies interaccions i comportaments per utilitzar-los en tots els dispositius Echo. Per exemple, un desenvolupador podria crear una habilitat personalitzada per indicar-vos la distància entre dos aeroports dels EUA. Un usuari diria: "Alexa, pregunta a la meva calculadora de distància personalitzada quina distància hi ha entre LAX i JFK" i podria respondre amb "2475 milles". Com ho fa? Quan un desenvolupador crea una habilitat personalitzada, defineix el que s'anomena "intents personalitzats" amb "expressions de mostra" que contenen "ranures". Per exemple, en aquesta habilitat podria tenir la intenció "calc_dist" de calcular la distància entre dos punts. Un enunciat de mostra seria "quina distància hi ha entre {slot1} i {slot2}" o "a quina distància hi ha entre {slot1} i {slot2}". Les ranures que es mostren entre claudàtors tenen tipus específics. En aquest cas, aquests tipus serien codis d’aeroports com ara LAX, JFK, BOS, ATL. Quan un usuari sol·licita l'habilitat personalitzada, Alexa Cloud intenta fer coincidir el que l'usuari diu amb una intenció personalitzada mitjançant els enunciats de mostra subministrats i intenta trobar valors de ranura vàlids per a aquesta sol·licitud. En aquest exemple, es trobaria que l'usuari volia la intenció "calc_dist" i que slot1 és LAX i slot2 és JFK. En aquest moment, Alexa Cloud transmet la feina al propi codi del desenvolupador. Bàsicament, indica als codis dels desenvolupadors quina intenció va rebre i quins van ser tots els valors de les ranures, entre altres detalls.

El desenvolupador pot decidir on viu el seu codi, però una opció molt popular és utilitzar una funció AWS Lambda. Si no sabeu què és, és essencialment un servei que us permet carregar codi que es pot executar en qualsevol moment i que només us cobra per la quantitat de temps que s’executa el vostre codi. Si continuem amb el nostre exemple, el codi del desenvolupador podria ser una funció Python que rep els dos codis d’aeroport, busca les ubicacions, calcula les distàncies i, a continuació, envia una resposta al núvol d’Alexa per parlar amb l’usuari. A continuació, el núvol d’Alexa enviaria aquesta informació de veu al dispositiu de l’usuari i obtindrien la resposta.

Ara podem tornar al gadget. Podem crear habilitats personalitzades dissenyades per treballar específicament amb gadgets. Un desenvolupador pot escriure una habilitat que envia una directiva a un gadget connectat. Aquesta directiva té una càrrega útil que es pot utilitzar, però el gadget ho necessita. Aquesta habilitat també pot enviar una directiva i, a continuació, escoltar un esdeveniment des del gadget perquè el codi d'habilitat tingui accés a la informació enviada des del gadget.

Establir aquest flux permet crear una eina molt potent perquè els gadgets econòmics poden tenir la possibilitat de comunicar-se amb el codi al núvol i de respondre a les ordres de veu mitjançant alguns dels millors reconeixements de veu disponibles.

Cal tenir en compte que la majoria de les habilitats permeten diverses maneres d’interactuar amb elles. Per exemple, un usuari pot saltar directament cap a una intenció dient "Alexa, pregunteu a la meva calculadora de distància personalitzada quina distància hi ha entre LAX i JFK" (anomenada invocació d'un sol tret) o simplement utilitzar una intenció de llançament: "Alexa, obre la meva calculadora de distància personalitzada ". Aquest darrer exemple sol ser seguit per Alexa que respongués amb una sol·licitud de més informació. Aquest tutorial omet intencionadament el suport d’aquest últim. Més concretament, sense modificar la funció Lambda, només podeu invocar l’habilitat mitjançant una invocació d’un sol cop. Aquesta opció de disseny permet que el model sigui més senzill (no ha de donar suport a les intencions de llançament ni al flux de converses) i he comprovat que normalment vull interactuar amb els meus gadgets fent servir invocacions d'una sola vegada, ja que normalment són més ràpides.

Pas 2: registreu el gadget a la consola per a desenvolupadors del servei de veu d'Alexa

A continuació es descriu els passos necessaris. He creat un vídeo equivalent que mostra com fer tots aquests passos. Podeu utilitzar qualsevol dels dos o tots dos per completar aquest pas.

  1. Aneu a
  2. Si encara no teniu cap compte gratuït, feu-ne un
  3. Feu clic a "Productes"
  4. Empleneu les etiquetes i seleccioneu "Gadget Alexa"
  5. Empleneu el que vulgueu per a la resta de camps
  6. Feu clic a Finalitza

Pas 3: Creeu una funció AWS Lambda i una habilitat personalitzada

Creeu una habilitat personalitzada a la consola per a desenvolupadors d'Alexa Skills Kit

El codi d’aquest tutorial es pot trobar aquí

Abans de completar aquest pas, haureu de crear un fitxer.zip que contingui el paquet de desplegament per a la funció AWS Lambda tal com es mostra al tutorial aquí.

  1. Descarregueu la carpeta "lambda" del meu Github que conté "lambda_function.py" i "requirements.txt"
  2. Obriu el terminal i canvieu el directori actual perquè estigui dins d'aquesta carpeta.
  3. Executeu la seqüència següent:

pip install -r requirements.txt -t skill_env

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

El fitxer.zip ara es troba al directori on es trobava la carpeta lambda i es dirà "skill-code.zip".

Una nota sobre el cost de l'allotjament a AWS: aquest tutorial requereix que tingueu un compte d'AWS (de creació gratuïta). Les funcions Lambda costen diners, però, el seu preu actual a la regió de Virginia és de 0,000000208 $ per 100 ms d’ús amb 128 MB de memòria. Com a referència, cada invocació de la meva habilitat factura uns 800 ms d’ús en aquest nivell. Per acumular una factura d’1,00 USD, hauríeu d’invocar aquesta funció unes 600.000 vegades, cosa que (si us necessita 5 segons per invocació) us portaria més de 34 dies sense trucar a la vostra funció. El cost no hauria de ser un problema important tret que publiqueu la vostra habilitat i un gran nombre de persones comencin a utilitzar-la. Si us preocupa rebre factures a AWS, penseu a configurar alarmes d’ús que us notifiquin si l’ús supera un llindar definit.

A continuació es descriu els passos necessaris. He creat un vídeo equivalent que mostra com fer tots aquests passos. Podeu utilitzar qualsevol dels dos o tots dos per completar aquest pas.

  1. Aneu a https://aws.amazon.com/ i inicieu la sessió a la consola o creeu un compte gratuït si no en teniu cap
  2. Cerqueu i feu clic a Lambda a sota de serveis
  3. Feu clic a "Crea una funció"
  4. Seleccioneu "Autor des de zero", doneu-li un nom i trieu l'última versió de Python 3 per a l'execució
  5. Canvieu "edita el codi en línia" per "carregar un fitxer.zip" i seleccioneu el fitxer.zip creat més amunt
  6. En una finestra nova, aneu a https://developer.amazon.com/alexa/console/ask i inicieu la sessió
  7. Feu clic a "Crea habilitat"
  8. Etiqueu-lo, trieu el model "Personalitzat" i "Subministreu el vostre" i feu clic a "Crea habilitat"
  9. Feu clic a "Comença des de zero" i feu clic a "Tria"
  10. A "Intencions", feu clic a "Afegeix"
  11. Creeu una intenció personalitzada anomenada "alexa_to_pi" i empleneu "write {person}" com a enunciat de mostra
  12. Feu un espai intencional anomenat "persona" amb el tipus "AMAZON. Person"
  13. Creeu una intenció personalitzada anomenada "pi_to_alexa" i empleneu "comproveu la temperatura des del sensor {sensor_num}
  14. Feu un espai intencional anomenat "sensor_num" amb el tipus "AMAZON. NUMBER"
  15. A Interfícies, activeu "Controlador d'interfície personalitzat"
  16. A Endpoint, seleccioneu "AWS Lambda ARN" i copieu el vostre "Identificador d'habilitat".
  17. Torneu a tornar a la consola AWS
  18. Feu clic a "Afegeix un activador"
  19. Seleccioneu "Alexa Skills Kit", marqueu "Habilita" a la verificació de l'identificació d'habilitats, enganxeu l'identificador d'habilitats que acabeu de copiar i feu clic a Afegeix
  20. Copieu l'ARN Lambda a l'extrem superior dret
  21. Torneu a la Consola per a desenvolupadors d'Alexa i enganxeu l'ARN Lambda al camp "Regió predeterminada"
  22. A Invocació, configureu el nom de la invitació d’habilitats perquè sigui "el meu gadget".
  23. Feu clic a "Desa el model" i, a continuació, a "Construeix el model"
  24. Feu clic a "Prova" a les pestanyes superiors i canvieu el selector de "Desactivat" a "Desenvolupament".
  25. Tingueu en compte que els registres de la funció Lambda es troben al servei "CloudWatch" a AWS.

Pas 4: configureu el codi al vostre Raspberry Pi

Perquè el vostre Raspberry Pi es comuniqui amb el dispositiu Alexa, necessita algun codi per facilitar la transmissió d’informació per Bluetooth i el manteniment d’aquesta connexió, a més d’altres fitxers. La manera més senzilla d’iniciar els fitxers més actualitzats d’Amazon és clonar el dipòsit de gadgets Raspberry Pi. Aneu al directori del projecte actual i executeu-lo

git clon

Això carregarà tot el dipòsit amb tot el codi necessari al vostre Pi. Té alguns exemples de projectes que mostren algunes de les capacitats d’Alexa Gadgets. Si voleu obtenir més informació, consulteu-lo a la seva pàgina de Github.

Executeu la seva funció de configuració per configurar-ho tot.

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

sudo python3 launch.py --setup

Seguiu les instruccions i responeu "y" quan se us demani si voleu configurar-les amb les vostres credencials de gadget. Recordeu que l’identificador d’Amazon i el gadget secret no van configurar el vostre gadget a la consola del desenvolupador, ja que aquí se us demanarà. He triat el mode de transmissió "bt" per al meu Raspberry Pi Zero W. BLE no és compatible amb tots els dispositius Echo més antics, però podeu cercar de què és capaç el vostre maquinari. Si feu servir el vostre Pi en mode Escriptori, Amazon recomana fer clic amb el botó dret a la icona de bluetooth de la part superior dreta i fer clic a "Elimina" Bluetooth "del tauler" per evitar problemes de connectivitat.

Nota: aquest pas pot trigar una estona en funció de la quantitat que cal instal·lar.

Ara tindreu tots els fitxers de suport necessaris per tornar al vostre projecte i començar a afegir les funcions que permetin la comunicació amb el vostre Eco.

Si ho desitgeu, podeu suprimir la carpeta "exemples" de "Alexa-Gadgets-Raspberry-Pi-Samples / src"

Podeu tenir el codi del projecte allà on vulgueu, però en crearé una carpeta al directori inicial, o bé podeu descarregar la carpeta amb el codi del meu Github, només heu d'editar els fitxers.ini tal com es descriu a continuació.

cd / home / pi

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

Ara he creat dos fitxers en una carpeta anomenada "el meu_projecte". El fitxer.ini és important. Assegureu-vos que conté el següent i substituïu-lo al vostre identificador d'Amazon i al gadget secret:

[Configuració de gadgets]

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

Ara fem una ullada al fitxer python abans d’entrar en els detalls:

importació json

de la importació agt AlexaGadget

classe MyGadget (AlexaGadget):

def _init _ (auto):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (auto, directiva):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Dades rebudes:" + str (payload)) write_text (str (payload ['data'] ['person'] ['value ']))

def on_custom_mygadget_pitoalexa (auto, directiva):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Dades rebudes:" + str (càrrega útil)) payload = {'data': "La sonda llegeix" + str (get_temp (càrrega útil) ['data'] ['sensor_num'] ['value']))) + "graus."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', càrrega útil) MyGadget (). main ()

Primer notareu que crida a dues funcions: write_text () i get_temp (). Al meu codi, defineixo aquestes funcions al mateix fitxer, però depenen del meu maquinari, de manera que he optat per ometre-les. He adjuntat aquest fitxer amb aquestes funcions definides per imprimir i retornar dades fictícies per si voleu executar aquest codi exacte. Suggeriria provar amb aquest codi exacte abans de modificar-lo per treballar amb el vostre projecte. També he adjuntat el fitxer.ini, però assegureu-vos d’entrar i de canviar l’identificador i el secret del gadget. La funció superior rep les dades transmeses per Alexa. La funció inferior rep dades en el mateix format, però el dispositiu Alexa esperarà cinc segons perquè es retransmeti un esdeveniment amb la seva pròpia càrrega útil. Aquesta càrrega útil és especial perquè el dispositiu Alexa en parlarà el contingut.

Un cop tingueu aquests fitxers, aneu a la carpeta "my_project" i executeu el fitxer python.

sudo reiniciar

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

Si és la primera vegada que executeu el programa, haureu de vincular-lo al vostre dispositiu Echo. Assegureu-vos que el dispositiu Echo sigui a prop del Raspberry Pi, ja que hem de permetre una connexió bluetooth.

A l'aplicació Alexa del dispositiu mòbil, feu clic a "dispositius" a l'extrem inferior dret.

Feu clic a "Eco i Alexa" a la part superior esquerra.

Feu clic al dispositiu Echo.

A "SENSE FIL", toqueu "Dispositius Bluetooth".

Toqueu "APARELLA UN NOU DISPOSITIU" i hauríeu de veure el vostre gadget a la llista.

Toqueu el vostre gadget. Hauríeu de veure l'informe Pi que s'ha emparellat correctament.

Mentre mireu la sortida del vostre Pi, proveu de donar una ordre de veu a Echo:

Vostè: "Alexa, demana al meu aparell que comprovi la temperatura des del sensor primer"

Si tot funcionava correctament, hauríeu de sentir:

Eco: "La sonda llegeix 120.505 graus".

Vostè: "Alexa, digueu al meu aparell que escrigui George Washington".

El Pi hauria d'imprimir:

Dades rebudes: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

George Washington"

Pas 5: finalitzar

El vídeo que es mostra aquí és un exemple del dispositiu que funciona amb la lectura de la temperatura (la mateixa sonda en F vs. C) i l’escriptura de noms en una pantalla senzilla.

Ara que espero que tingueu alguna cosa en funcionament, hauríeu d’intentar personalitzar-ho per fer el vostre propi projecte més capaç. Recordeu que podeu editar fàcilment les intencions a la Consola per a desenvolupadors d’Alexa i que totes les ranures que utilitzeu es passaran al vostre Pi a la càrrega útil. A més, podeu fer que Alexa digui qualsevol cosa que vulgueu només editant la càrrega útil que transmetreu en el cas des del vostre codi Raspberry Pi.

Tingueu en compte que aquest tutorial no pretén ser la solució final per a totes les funcions que podeu desitjar amb un gadget Alexa. Es limita intencionalment a proporcionar-vos dues funcions simples per passar dades en cada direcció entre Alexa i un gadget. Si esteu interessats en crear models d’interacció més sofisticats, us animo a llegir tots els fitxers Llegiu-los a https://github.com/alexa/Alexa-Gadgets-Raspberry-P… i proveu tots els exemples que ofereixen.. També us suggeriria que llegiu la documentació del Alexa Gadgets Toolkit i del Alexa Skills Kit.

Recomanat: