Tartalomjegyzék:

Egyéni Alexa vezérlő hozzáadása a Raspberry Pi projekthez: 5 lépés
Egyéni Alexa vezérlő hozzáadása a Raspberry Pi projekthez: 5 lépés

Videó: Egyéni Alexa vezérlő hozzáadása a Raspberry Pi projekthez: 5 lépés

Videó: Egyéni Alexa vezérlő hozzáadása a Raspberry Pi projekthez: 5 lépés
Videó: Высокая плотность 2022 2024, Július
Anonim
Adjon hozzá egyéni Alexa vezérlőt a Raspberry Pi Projecthez
Adjon hozzá egyéni Alexa vezérlőt a Raspberry Pi Projecthez

Ez a projekt mindenkinek szól, akinek van Raspberry Pi projektje, amely Python -ot használ, és szeretne hangvezérlést adni a meglévő Amazon Echo eszközein keresztül. Nem kell tapasztalt programozónak lenned, de kényelmesen használhatod a parancssort, és a meglévő kódot az igényeidhez igazíthatod.

Kezdetben elindítottam egy projektet, amely lehetővé teszi a Raspberry Pi hangvezérlését Alexával, hogy fel tudja melegíteni a vizet egy vízforralóban egy meghatározott hőmérsékletre. Bár a kívánt interakció meglehetősen egyszerű volt (adjon át egy számot Alexától a Raspberry Pi -nek), sok munka kellett ahhoz, hogy a meglévő oktatóanyagokból elérje ezt az állapotot. Remélem, hogy ez az oktatóanyag a lehető leggyorsabbá teszi ezt a folyamatot mások számára.

Példámban egy Raspberry Pi Zero W -vel kezdem Raspbiannal. Van egy Python3 programom a Pi -n, amely képes szöveget írni egy SPI kijelzőre, és van egy hőmérő szondám, amit tudok olvasni. Számára ez a program szinte bármi lehet, de az ötlet az, hogy rendelkezhet olyan bemeneti eszközökkel, amelyeket Alexa -n keresztül szeretne olvasni, és/vagy olyan kimeneti eszközökkel, amelyeket az Alexa segítségével szeretne vezérelni.

A cél az, hogy egy olyan alapprogramból, mint a fent leírt, olyan eszközré váljunk, amelyet könnyedén vezérelhet az Echo készülékemmel. Feltételezve, hogy már rendelkezik ezzel a hardverrel, ez a projekt nem kerülhet pénzbe. A végén eljut arra a pontra, ahol a következőket mondhatja:

Én: "Alexa, kérd meg a modulomat, hogy ellenőrizze az 1 -es érzékelő hőmérsékletét."

Alexa válasza: "A szonda 72,31 fokot mutat."

vagy

Én: "Alexa, mondd meg a modulomnak, hogy írjon George Washington"

Válasz: A Raspberry Pi készülékhez csatlakoztatott kijelzőn most "George Washington" felirat olvasható

A következő részben leírom, hogy mi kell a kulisszák mögött, hogy ez működjön. Ha csak azt szeretné, hogy ez működjön a projekten, és nem érdekli, hogyan működik, nyugodtan hagyja ki (bár ez megnehezítheti, ha valami baj történik).

1. lépés: Háttér

Háttér
Háttér

Ezen a képen (hitel: https://developer.amazon.com/en-US/docs/alexa/alex… láthatjuk az Alexa Gadgets általános architektúráját.

Amikor mondasz valamit az Echo eszközödnek, az elküldi a hangot az Alexa Cloud -ba, ahol feldolgozza, és ahol válasz keletkezik, hogy válaszoljon neked. Amikor megkérdezi, milyen az időjárás, csak ez a kettő kommunikál. Tegyük fel, hogy hangvezérlést szeretne hozzáadni a Raspberry Pi egyik kis projektjéhez. A fedélzeten lévő összes adat feldolgozása jelentős hardvert és nagyon kifinomult kódbázist igényel a dolgok elindításához. Jobb megoldás lenne az Alexa Cloud kihasználása, amely nagyon kifinomult és nagyon jól kezelte az összetett beszédmintákat. Az Alexa Gadgets jó módszert kínál erre.

Az Alexa Gadget Bluetooth segítségével kommunikál egy Echo eszközzel. Miután ez a kapcsolat létrejött, a kettő UTF-8 kódolással továbbítja egymásnak az üzeneteket. Amikor az Echo átad valamit a modulnak, azt direktívának hívják. A másik irányt eseménynek nevezik. Mielőtt mindezek pontos folyamatába kezdenénk, be kell vezetnünk egy másik kulcsfontosságú elemet: az egyéni Alexa Skills -t.

Az Alexa lehetővé teszi a fejlesztők számára, hogy saját egyéni készségeiket hozzák létre, ami lehetővé teszi számukra, hogy saját interakcióikat és viselkedéseiket az Echo eszközökön való használatra tervezzék. Például egy fejlesztő létrehozhat egy egyedi készséget, amely megmondja az USA két repülőtere közötti távolságot. Egy felhasználó azt mondaná: "Alexa, kérdezd meg az egyéni távolságkalkulátoromat, hogy milyen távolság van a LAX és a JFK között". Hogyan teszi ezt? Amikor a fejlesztő egyéni készséget végez, úgy határozzák meg az úgynevezett "egyéni szándékokat" a "résidőket" tartalmazó "minta kijelentésekkel". Például ebben a készségben a "calc_dist" szándékkal kiszámíthatom a két pont közötti távolságot. A mondat egy minta lenne: "mennyi a távolság {slot1} és {slot2} között", vagy "milyen messze van {slot1} és {slot2} között". A zárójelben látható nyílásoknak speciális típusai vannak. Ebben az esetben ezek a típusok olyan repülőtéri kódok lennének, mint a LAX, JFK, BOS, ATL. Amikor a felhasználó az egyéni készséget kéri, az Alexa Cloud a mellékelt mintaszólalások segítségével megpróbálja egyeztetni a felhasználó mondanivalóját az egyéni szándékkal, és megpróbálja megtalálni a kérés érvényes helyértékeit. Ebben a példában azt találná, hogy a felhasználó a "calc_dist" szándékot akarta, és az 1. hely LAX, a 2. hely pedig JFK. Ezen a ponton az Alexa Cloud átadja a munkát a fejlesztő saját kódjának. Alapvetően megmondja a fejlesztőknek, hogy milyen szándékkal érkeztek, és mi volt a hely összes értéke, többek között.

A fejlesztő eldöntheti, hol él a kódja, de nagyon népszerű lehetőség az AWS Lambda funkció használata. Ha nem tudja, mi ez, akkor lényegében egy olyan szolgáltatásról van szó, amely lehetővé teszi, hogy bármikor futtatható kódot töltsön fel, majd csak a kód futási idejét számolja fel. Ha folytatjuk a példánkat, akkor a fejlesztői kód lehet egy Python -függvény, amely megkapja a két repülőtéri kódot, megkeresi azok helyét, kiszámítja a távolságokat, majd visszaküldi a választ az Alexa Cloudhoz, hogy beszéljen valamit a felhasználóval. Az Alexa Cloud ezt követően visszaadja ezeket a beszédinformációkat a felhasználó eszközére, és megkapják a választ.

Most visszatérhetünk a modulhoz. Létrehozhatunk egyéni készségeket, amelyeket kifejezetten a modulokkal való használatra terveztek. A fejlesztő írhat olyan készséget, amely direktívát küld a csatlakoztatott modulnak. Ennek az irányelvnek van egy hasznos terhelése, amely felhasználható, bár a modulnak szüksége van rá. Ez a készség direktívát is küldhet, majd meghallgathat egy eseményt a modulból, hogy a készségkód hozzáférhessen a modulról küldött információkhoz.

Ennek a folyamatnak a létrehozása lehetővé teszi egy nagyon hatékony eszköz létrehozását, mivel az olcsó modulok képesek kommunikálni a felhőben lévő kóddal, és válaszolni a hangutasításokra a rendelkezésre álló legjobb hangfelismerő eszközök segítségével.

Meg kell jegyezni, hogy a legtöbb készség lehetővé teszi a velük való interakció különféle módjait. Például egy felhasználó rögtön belekezdhet a szándékba azzal, hogy azt mondja: „Alexa, kérdezze meg az egyéni távolságkalkulátoromat, hogy mekkora a távolság a LAX és a JFK között” (ezt egyszeri hívásnak hívják), vagy egyszerűen csak indítási szándékot használ: „Alexa, nyissa meg az egyéni távolságkalkulátoromat . Ezt az utolsó példát jellemzően az Alexa követné, és további információkat kér. Ez az oktatóanyag szándékosan kihagyja az utóbbi támogatását. Pontosabban, a Lambda függvény módosítása nélkül csak egyszeri meghívással lehet meghívni a készséget. Ez a tervezési választás lehetővé teszi, hogy a modell egyszerűbb legyen (nem kell támogatnia az indítási szándékot vagy a beszélgetési folyamatot), és azt tapasztaltam, hogy általában úgy akarok interakcióba lépni a moduljaimmal, hogy egyszeri hívásokat alkalmazok, mivel ezek általában gyorsabbak.

2. lépés: Regisztrálja a modult az Alexa Voice Service Developer Console -on

Az alábbiakban leírjuk a szükséges lépéseket. Létrehoztam egy ezzel egyenértékű videót, amely bemutatja, hogyan kell elvégezni ezeket a lépéseket. A lépés végrehajtásához használhatja mindkettőt, vagy mindkettőt.

  1. Lépjen a https://developer.amazon.com/alexa/console/avs/hom… oldalra
  2. Ha még nincs ingyenes fiókja, hozzon létre egyet
  3. Kattintson a "Termékek" gombra
  4. Töltse ki a címkéket, és válassza az "Alexa Gadget" lehetőséget
  5. Töltse ki a kívánt mezőt a többi mezőhöz
  6. Kattintson a Befejezés gombra

3. lépés: Hozza létre az AWS Lambda funkciót és az egyéni készségeket

Hozzon létre egyéni készségeket az Alexa Skills Kit fejlesztői konzolon

Ennek az oktatóanyagnak a kódja itt található

Mielőtt befejezi ezt a lépést, létre kell hoznia egy.zip fájlt, amely tartalmazza az AWS Lambda funkció telepítési csomagját, amint az itt bemutatott.

  1. Töltse le a "lambda" mappát a Github -ból, amely tartalmazza a "lambda_function.py" és a "követelmények.txt" fájlokat
  2. Nyissa meg a terminált, és módosítsa az aktuális könyvtárat a mappába.
  3. Futtassa a következő sorrendet:

pip install -r követelmények.txt -t skill_env

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

A.zip fájlja most abban a könyvtárban lesz, ahol a lambda mappa volt, és "skill-code.zip" lesz.

Megjegyzés az AWS -en történő tárolás költségeiről: Ez az oktatóanyag megköveteli, hogy rendelkezzen AWS -fiókkal (szabadon létrehozható). A Lambda funkciók pénzbe kerülnek, azonban jelenlegi áraik az N. Virginia régióban 0,000000208 USD / 100 ms használat 128 MB memóriával. Referenciaként a készségeim minden hívása körülbelül 800 ms használatot számláz ki ezen a szinten. Ha 1,00 dollár értékű számlát szeretne összegyűjteni, akkor ezt a funkciót körülbelül 600 000 alkalommal kell meghívnia, ami (ha 5 másodpercig tart), ha 34 napig megszakítás nélkül hívja a funkciót. A költségek nem lehetnek jelentős kérdések, hacsak nem teszed közzé készségedet, és rengeteg ember elkezdi használni. Ha aggódik amiatt, hogy számlákat kap az AWS -ről, fontolja meg a használati riasztások beállítását, amelyek értesítik Önt, ha a használat túllép egy meghatározott küszöböt.

Az alábbiakban leírjuk a szükséges lépéseket. Létrehoztam egy ezzel egyenértékű videót, amely bemutatja, hogyan kell elvégezni ezeket a lépéseket. A lépés végrehajtásához használhatja bármelyiket, vagy mindkettőt.

  1. Lépjen a https://aws.amazon.com/ oldalra, és jelentkezzen be a konzolba, vagy hozzon létre ingyenes fiókot, ha még nincs
  2. Keresse meg és kattintson a Lambda elemre a szolgáltatások alatt
  3. Kattintson a "Funkció létrehozása" gombra
  4. Válassza a "Szerző a semmiből" lehetőséget, adjon neki nevet, és válassza ki a legújabb Python 3 verziót a futásidőben
  5. Változtassa meg a "szerkesztési kód inline" -t ".zip fájl feltöltésére", és válassza ki a fent létrehozott.zip fájlt
  6. Egy új ablakban lépjen a https://developer.amazon.com/alexa/console/ask oldalra, és jelentkezzen be
  7. Kattintson a "Készség létrehozása" gombra
  8. Címkézze meg, válassza az „Egyéni” modellt és a „Saját lehetőséget”, majd kattintson a „Készség létrehozása” gombra
  9. Kattintson a "Start from Scratch" gombra, majd a "Select" gombra
  10. A "Szándékok" alatt kattintson a "Hozzáadás" gombra
  11. Hozzon létre egy egyéni szándékot "alexa_to_pi" néven, és töltse ki az "write {person}" kifejezést mint példa.
  12. Hozzon létre egy szándéknyilatkozatot "személy" néven, "AMAZON. Person" típussal
  13. Hozzon létre egy "pi_to_alexa" nevű egyéni szándékot, és töltse ki "ellenőrizze a hőmérsékletet az érzékelőből {sensor_num}
  14. Hozzon létre egy "sensor_num" nevű szándéknyilatkozatot "AMAZON. NUMBER" típussal
  15. Az Interfészek alatt kapcsolja be az "Egyéni interfészvezérlőt"
  16. A végpont alatt válassza az "AWS Lambda ARN" lehetőséget, és másolja le az "Ön készség -azonosítóját"
  17. Lépjen vissza az AWS konzolhoz
  18. Kattintson az "Aktiváló hozzáadása" gombra
  19. Válassza az "Alexa Skills Kit" lehetőséget, jelölje be az "Engedélyezés" lehetőséget a Készség -azonosító ellenőrzése alatt, illessze be az imént másolt készség -azonosítót, majd kattintson a Hozzáadás gombra.
  20. Másolja a Lambda ARN -t a jobb felső sarokban
  21. Lépjen vissza az Alexa fejlesztői konzolra, és illessze be a Lambda ARN -t az "Alapértelmezett régió" mezőbe
  22. A Meghívás alatt állítsa a készséghívási nevet "a modul"
  23. Kattintson a "Modell mentése", majd a "Modell létrehozása" gombra
  24. Kattintson a "Teszt" gombra a felső lapokon, és állítsa a választót "Ki" -ről "Fejlesztés" -re
  25. Ne feledje, hogy a Lambda funkció naplói az AWS "CloudWatch" szolgáltatásában találhatók.

4. lépés: Állítsa be a kódot a Raspberry Pi -n

Ahhoz, hogy a Raspberry Pi kommunikálni tudjon az Alexa eszközzel, néhány kódra van szüksége, hogy megkönnyítse az információk Bluetooth -on keresztüli továbbítását és a kapcsolat fenntartását, néhány egyéb fájl mellett. A legegyszerűbb módja annak, hogy az Amazon legfrissebb fájljaival kezdje el a Raspberry Pi Gadgets tároló klónozását. Keresse meg az aktuális projekt könyvtárát, és futtassa

git klón

Ez betölti a teljes tárházat az összes szükséges kóddal a Pi -re. Van néhány példa projektje, amelyek bemutatják az Alexa Gadgets néhány képességét. Ha további információra van szüksége, nézze meg a readme -t a Github oldalán.

Futtassa a beállítási funkciót, hogy mindent konfiguráljon.

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

sudo python3 launch.py --setup

Kövesse az utasításokat, és válaszoljon „y” -ra, amikor megkérdezi, szeretné -e konfigurálni a Gadget hitelesítő adataival. Emlékezzen az Amazon ID -re és a Gadget Secretre, amikor beállította a modulját a fejlesztői konzolon, mivel itt kérni fogja. A "bt" átviteli módot választottam a Raspberry Pi Zero W készülékhez. A BLE -t nem támogatja minden régebbi Echo eszköz, de utánanézhet, mire képes a hardvere. Ha a Pi-t asztali módban használja, az Amazon azt javasolja, hogy a csatlakozási problémák elkerülése érdekében kattintson a jobb egérgombbal a jobb felső sarokban található Bluetooth ikonra, majd kattintson a "Bluetooth" eltávolítása a panelről "gombra.

Megjegyzés: ez a lépés eltarthat egy ideig attól függően, hogy mennyit kell telepíteni.

Most már rendelkeznie kell minden szükséges támogatási fájllal, hogy visszatérjen a projekthez, és elkezdje hozzáadni azokat a funkciókat, amelyek lehetővé teszik az Echo -val való kommunikációt.

Ha úgy dönt, törölheti a "példák" mappát az "Alexa-Gadgets-Raspberry-Pi-Samples/src" mappából

Bárhol megtalálhatja a projektkódot, de létrehozok egy mappát a saját könyvtárában, vagy letöltheti a mappát a kóddal a Github -ból, csak győződjön meg róla, hogy szerkeszti az.ini fájlokat az alábbiak szerint.

cd /home /pi

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

Most létrehoztam két fájlt a "my_project" nevű mappában. Az.ini fájl fontos. Győződjön meg arról, hogy a következőket tartalmazza, és helyettesítheti az Amazon azonosítóját és a Modul titkát:

[GadgetSettings]

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

Most nézzük meg a python fájlt, mielőtt belemegyünk a részletekbe:

import json

az agt importból AlexaGadget

osztályú MyGadget (AlexaGadget):

def _init _ (saját):

szuper ()._ init _ ()

def on_custom_mygadget_alexatopi (saját, irányelv):

payload = json.loads (direktíva.payload.decode ("utf-8")) print ("Fogadott adatok:" + str (hasznos terhelés)) write_text (str (hasznos terhelés ['adatok'] ['személy'] ['érték ']))

def on_custom_mygadget_pitoalexa (önálló, irányelv):

payload = json.loads (direktíva.payload.decode ("utf-8")) print ("Fogadott adatok:" + str (hasznos terhelés)) payload = {'data': "A szonda olvas" + str (get_temp (payload) ['data'] ['sensor_num'] ['value'])) + "fok."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', hasznos terhelés) MyGadget (). main ()

Először észreveszi, hogy két függvényt hív meg: write_text () és get_temp (). A kódomban ezeket a funkciókat ugyanabban a fájlban definiálom, de ezek a hardvertől függenek, ezért úgy döntöttem, hogy kihagyom őket. Mellékeltem ezt a fájlt azokkal a funkciókkal, amelyek csak hamis adatok nyomtatására és visszaküldésére szolgálnak, ha pontosan ezt a kódot szeretné futtatni. Javaslom, hogy teszteljen ezzel a pontos kóddal, mielőtt módosítja azt, hogy működjön a projektjével. A.ini fájlt is csatoltam, de mindenképpen menjen be, és módosítsa az azonosítót és a modul titkát. A felső funkció az Alexa -tól átvitt adatokat fogadja. Az alsó funkció ugyanabban a formátumban fogadja az adatokat, de az Alexa eszköz öt másodpercet vár, amíg egy esemény saját hasznos terheléssel kerül vissza. Ez a hasznos teher annyiban különleges, hogy az Alexa eszköz kimondja a tartalmát.

Ha megvannak ezek a fájlok, keresse meg a "my_project" mappát, és futtassa a python fájlt.

sudo újraindítás

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

Ha először futtatja a programot, akkor azt párosítania kell az Echo eszközével. Győződjön meg arról, hogy az Echo eszköze a Raspberry Pi közelében van, mivel engedélyeznünk kell a Bluetooth -kapcsolatot.

Mobileszközén az Alexa alkalmazásban kattintson a jobb alsó sarokban található "eszközök" elemre.

Kattintson a bal felső sarokban található "Echo & Alexa" elemre.

Kattintson az Echo eszközre.

A „VEZETÉK nélküli” alatt érintse meg a „Bluetooth -eszközök” lehetőséget.

Koppintson az "ÚJ KÉSZÜLÉK PÁROSÍTÁSA" elemre, és látnia kell a modulját a listában.

Koppintson a modulra. Látnia kell a Pi jelentést, hogy sikeresen párosították.

Miközben a Pi kimenetét nézi, próbáljon hangutasítást adni az Echo -nak:

Te: "Alexa, kérd meg a modulomat, hogy ellenőrizze az első érzékelő hőmérsékletét"

Ha minden megfelelően működött, a következőket kell hallania:

Echo: "A szonda 120,505 fokot mutat."

Te: "Alexa, mondd meg a modulomnak, hogy írjon George Washington -t."

A Pi -nek ki kell nyomtatnia:

Fogadott adatok: {'adatok': {'személy': {'név': 'személy', 'érték': 'George Washington', 'confirmationStatus': 'NINCS}}}

George Washington"

5. lépés: Csomagolás

Az itt látható videó egy példa arra, hogy a kütyü a hőmérséklet leolvasásával dolgozik (ugyanaz a szonda F és C között), és neveket ír egy egyszerű kijelzőre.

Most, hogy remélhetőleg működik valami, meg kell próbálnia ezt személyre szabni, hogy a saját projektje képesebb legyen. Ne feledje, hogy könnyen szerkesztheti a szándékokat az Alexa Developer Console -ban, és hogy az összes használt rés átadódik a Pi -nek a hasznos terhelésben. Továbbá, Alexa bármit mondhat, amit szeretne, ha csak a Raspberry Pi kódból szerkeszti az eseményben visszaszállított hasznos teherbírást.

Kérjük, vegye figyelembe, hogy ez az oktatóanyag nem a végső megoldás az Alexa Gadget által kínált összes képességre. Szándékosan korlátozott, hogy két egyszerű funkciót biztosítson az adatok továbbításához minden irányban Alexa és egy Gadget között. Ha érdekesebb bonyolultabb interakciós modellek készítése, javaslom, hogy olvassa el a https://github.com/alexa/Alexa-Gadgets-Raspberry-P… webhelyen található összes readme fájlt, és próbálja ki az általuk nyújtott példákat.. Azt is javaslom, hogy olvassa el az Alexa Gadgets Toolkit és az Alexa Skills Kit dokumentációját.

Ajánlott: