Obsah:

Přidejte vlastní ovládání Alexa k projektu Raspberry Pi: 5 kroků
Přidejte vlastní ovládání Alexa k projektu Raspberry Pi: 5 kroků

Video: Přidejte vlastní ovládání Alexa k projektu Raspberry Pi: 5 kroků

Video: Přidejte vlastní ovládání Alexa k projektu Raspberry Pi: 5 kroků
Video: Mini PC na Intel N100 - AC8-N, výkonná platforma bez ventilátoru, instalace OS Home Assistant 2024, Červenec
Anonim
Přidejte vlastní ovládání Alexa do projektu Raspberry Pi
Přidejte vlastní ovládání Alexa do projektu Raspberry Pi

Tento projekt je určen pro kohokoli, kdo má projekt Raspberry Pi využívající Python, který chce přidat hlasové ovládání prostřednictvím svých stávajících zařízení Amazon Echo. Nemusíte být zkušený programátor, ale mělo by vám být příjemné používat příkazový řádek a přizpůsobovat stávající kód vašim potřebám.

Původně jsem se pustil do projektu, který má umožnit hlasové ovládání mého Raspberry Pi pomocí Alexa, aby mohl ohřívat vodu v konvici na konkrétní teplotu. I když interakce, kterou jsem chtěl, byla celkem jednoduchá (předat jedno číslo od Alexa Raspberry Pi), stálo hodně práce dostat se do tohoto stavu ze stávajících tutoriálů. Doufám, že tento tutoriál usnadní tento proces ostatním tak rychle, jak to jen bude možné.

V mém příkladu začínám s Raspberry Pi Zero W s Raspbianem. Na svém Pi mám program Python3, který je schopen psát text na displej SPI, a mám sondu teploměru, kterou dokážu přečíst. Pro vás může být tento program téměř cokoli, ale myšlenkou je, že byste mohli mít některá vstupní zařízení, která chcete číst přes Alexa a/nebo některá výstupní zařízení, která chcete ovládat pomocí Alexa.

Cílem je přejít od základního programu, jako je ten, který je popsán výše, k zařízení, které můžete snadno ovládat pomocí mého Echa. Za předpokladu, že již tento hardware máte, by vás tento projekt neměl stát žádné peníze. Nakonec se dostanete do bodu, kdy můžete říci například:

Já: "Alexo, požádej můj gadget o kontrolu teploty na čidle 1."

Alexova odpověď: „Sonda ukazuje 72,31 stupňů.“

nebo

Já: "Alexo, řekni mému gadgetu, aby napsal George Washingtona"

Odpověď: Na displeji připojeném k mému Raspberry Pi se nyní zobrazuje „George Washington“

V další části popíšu, co se musí stát v zákulisí, aby to fungovalo. Pokud chcete, aby to na vašem projektu fungovalo, a nezajímá vás, jak to funguje, klidně to přeskočte (i když to může být obtížnější, pokud se něco pokazí).

Krok 1: Pozadí

Pozadí
Pozadí

Na tomto obrázku (kredit: https://developer.amazon.com/en-US/docs/alexa/alex… vidíme obecnou architekturu pro Alexa Gadgets.

Když něco řeknete svému zařízení Echo, odešle zvuk do cloudu Alexa, kde se zpracuje a kde se vygeneruje odpověď, která vám odpoví. Když se zeptáte, jaké je počasí, komunikují jen tito dva. Nyní předpokládejme, že chcete přidat hlasové ovládání k jednomu z vašich malých projektů na Raspberry Pi. Zpracování všeho na palubě by vyžadovalo značný hardware a velmi propracovanou základnu kódů, aby se věci daly do pohybu. Lepším řešením by bylo využít Alexa Cloud, který je velmi propracovaný a velmi dobře zvládl složité vzorce řeči. Gadgety Alexa vám k tomu poskytují dobrý způsob.

Gadget Alexa komunikuje se zařízením Echo pomocí bluetooth. Jakmile je toto spojení navázáno, předávají si oba zprávy pomocí kódování UTF-8. Když Echo něco předá gadgetu, nazývá se to direktiva. Druhý směr se označuje jako událost. Než se pustíme do přesného toku toho všeho, měli bychom představit další klíčový prvek: vlastní dovednosti Alexa.

Alexa umožňuje vývojářům vytvářet si vlastní dovednosti, což jim umožňuje navrhovat vlastní interakce a chování pro použití na všech zařízeních Echo. Vývojář by například mohl vytvořit vlastní dovednost, která by vám sdělila vzdálenost mezi dvěma letišti v USA. Uživatel by řekl: „Alexo, zeptejte se mé vlastní kalkulačky vzdáleností, jaká je vzdálenost mezi LAX a JFK“a mohl by odpovědět „2475 mil“. Jak to dělá? Když vývojář vytvoří vlastní dovednost, definuje to, čemu se říká „vlastní záměry“, pomocí „ukázkových promluv“obsahujících „sloty“. Například v této dovednosti bych mohl mít záměr „calc_dist“vypočítat vzdálenost mezi dvěma body. Ukázkový projev by byl „jaká je vzdálenost mezi {slot1} a {slot2}“nebo „jak daleko mezi {slot1} a {slot2}“. Sloty zobrazené v závorkách mají specifické typy. V tomto případě by těmito typy byly letištní kódy jako LAX, JFK, BOS, ATL. Když uživatel požádá o vlastní dovednost, Alexa Cloud se pokusí pomocí dodaných ukázkových výpovědí přizpůsobit to, co uživatel říká vlastnímu záměru, a pokusí se najít platné hodnoty slotů pro tento požadavek. V tomto příkladu by zjistil, že uživatel chtěl záměr "calc_dist" a že slot1 je LAX a slot2 je JFK. V tomto okamžiku Alexa Cloud předá práci vlastnímu kódu vývojáře. V zásadě mimo jiné říká vývojářskému kódu, jaký záměr obdržel a jaké byly všechny hodnoty slotů.

Vývojář se může rozhodnout, kde žije jeho kód, ale velmi populární možností je použít funkci AWS Lambda. Pokud nevíte, co to je, je to v podstatě služba, která vám umožňuje nahrát kód, který lze spustit kdykoli, a poté vám účtuje pouze dobu, po kterou se váš kód spustí. Pokud budeme pokračovat v našem příkladu, vývojářským kódem může být funkce Pythonu, která obdrží dva letištní kódy, vyhledá jejich umístění, vypočítá vzdálenosti a poté odešle odpověď zpět do cloudu Alexa, aby uživateli něco řekla. Alexa Cloud by pak poslal tyto řečové informace zpět do zařízení uživatele a oni by dostali odpověď.

Nyní se můžeme vrátit k gadgetu. Můžeme vytvářet vlastní dovednosti, které jsou navrženy tak, aby fungovaly konkrétně s gadgety. Vývojář může napsat dovednost, která vyšle směrnici připojenému gadgetu. Tato směrnice má užitečné zatížení, které lze použít, jakkoli to gadget potřebuje. Tato dovednost může také odeslat směrnici a poté poslouchat událost z gadgetu, aby kód dovednosti měl přístup k informacím odeslaným z gadgetu.

Zřízení tohoto toku umožňuje vytvořit velmi účinný nástroj, protože levné gadgety mohou mít schopnost komunikovat s kódem v cloudu a reagovat na hlasové příkazy pomocí některého z nejlepších dostupných rozpoznávání hlasu.

Je třeba poznamenat, že většina dovedností umožňuje různé způsoby interakce s nimi. Uživatel například může skočit přímo do záměru tím, že řekne „Alexa, zeptejte se mé vlastní kalkulačky vzdáleností, jaká je vzdálenost mezi LAX a JFK“(nazývá se jednorázové vyvolání), nebo může jednoduše použít záměr spuštění: „Alexa, otevřít vlastní kalkulačku vzdáleností “. Po tomto posledním příkladu obvykle Alexa odpoví výzvou pro další informace. Tento tutoriál záměrně vynechává podporu pro druhé. Přesněji řečeno, bez úpravy funkce Lambda můžete tuto dovednost vyvolat pouze pomocí jednorázového vyvolání. Tato volba designu umožňuje, aby byl model jednodušší (nemusí podporovat spouštěcí záměry ani tok konverzací) a zjistil jsem, že se svými gadgety obvykle chci komunikovat pomocí jednorázových vyvolání, protože jsou obvykle rychlejší.

Krok 2: Zaregistrujte gadget na vývojářské konzoli Alexa Voice Service

Následuje popis potřebných kroků. Vytvořil jsem ekvivalentní video, které ukazuje, jak všechny tyto kroky provést. K dokončení tohoto kroku můžete použít jeden nebo oba.

  1. Přejděte na
  2. Pokud ještě nemáte účet zdarma, vytvořte si jej
  3. Klikněte na „Produkty“
  4. Vyplňte štítky a vyberte „Alexa Gadget“
  5. Do zbývajících polí zadejte, co chcete
  6. Klikněte na Dokončit

Krok 3: Vytvořte funkci AWS Lambda a vlastní dovednosti

Vytvořte si vlastní dovednosti na vývojářské konzoli Alexa Skills Kit

Kód pro tento tutoriál najdete zde

Před dokončením tohoto kroku budete muset vytvořit soubor.zip, který obsahuje balíček nasazení pro funkci AWS Lambda, jak je znázorněno v tutoriálu zde.

  1. Stáhněte si z mého Githubu složku „lambda“, která obsahuje „lambda_function.py“a „requirements.txt“
  2. Otevřete terminál a změňte aktuální adresář tak, aby byl v této složce.
  3. Spusťte následující sekvenci:

pip install -r requirements.txt -t skill_env

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

Váš soubor.zip bude nyní umístěn v adresáři, kde byla složka lambda, a bude se nazývat „skill-code.zip“.

Poznámka k nákladům na hostování na AWS: Tento tutoriál vyžaduje, abyste měli účet AWS (vytvoření zdarma). Funkce Lambda stojí peníze, ale jejich současné ceny v oblasti N. Virginie jsou 0,000000208 $ za 100 ms používání se 128 MB paměti. Pro srovnání, každé vyvolání mých dovedností účtuje přibližně 800 ms používání v této úrovni. Abyste získali účet ve výši 1,00 USD, museli byste tuto funkci vyvolat asi 600 000krát, což vám (pokud vám to trvá 5 sekund na vyvolání) zabere více než 34 dní nepřetržitého volání vaší funkce. Náklady by neměly představovat významný problém, pokud nezveřejníte své dovednosti a nezačne je používat velké množství lidí. Pokud vám dělá starosti získání účtů na AWS, zvažte nastavení alarmů využití, které vás upozorní, pokud využití překročí definovanou prahovou hodnotu.

Následuje popis potřebných kroků. Vytvořil jsem ekvivalentní video, které ukazuje, jak všechny tyto kroky provést. K dokončení tohoto kroku můžete použít jeden nebo oba.

  1. Přejděte na https://aws.amazon.com/ a přihlaste se do konzoly nebo si vytvořte bezplatný účet, pokud jej nemáte.
  2. Vyhledejte a klikněte na Lambda v rámci služeb
  3. Klikněte na „Vytvořit funkci“
  4. Vyberte „Autor od začátku“, pojmenujte jej a vyberte nejnovější verzi Pythonu 3 pro běh
  5. Změňte „upravit vložený kód“na „nahrát soubor.zip“a vyberte výše vytvořený soubor.zip
  6. V novém okně přejděte na https://developer.amazon.com/alexa/console/ask a přihlaste se
  7. Klikněte na „Vytvořit dovednost“
  8. Označte jej, vyberte model „Vlastní“a „Poskytněte si vlastní“a klikněte na „Vytvořit dovednost“
  9. Klikněte na „Začít od nuly“a klikněte na „Vybrat“
  10. V části „Záměry“klikněte na „Přidat“
  11. Vytvořte vlastní záměr s názvem „alexa_to_pi“a jako ukázku promluvy zadejte „napsat {osoba}“
  12. Vytvořte slot záměru s názvem „osoba“typu „AMAZON. Person“
  13. Vytvořte vlastní záměr s názvem „pi_to_alexa“a zadejte „zkontrolujte teplotu ze senzoru {sensor_num}
  14. Vytvořte záměrný slot s názvem „sensor_num“s typem „AMAZON. NUMBER“
  15. V části Rozhraní zapněte „Vlastní ovladač rozhraní“
  16. V části Koncový bod vyberte „AWS Lambda ARN“a zkopírujte „ID vaší dovednosti“
  17. Přejděte zpět do konzoly AWS
  18. Klikněte na „Přidat spoušť“
  19. Vyberte „Alexa Skills Kit“, zaškrtněte „Povolit“v části Ověření ID dovednosti, vložte ID dovednosti, které jste právě zkopírovali, a klikněte na Přidat
  20. Zkopírujte Lambda ARN v pravém horním rohu
  21. Přejděte zpět do konzoly Alexa Developer Console a vložte Lambda ARN do pole „Výchozí oblast“
  22. V části Vyvolání nastavte Název vyvolání dovednosti na „můj gadget“
  23. Klikněte na „Uložit model“a poté na „Vytvořit model“
  24. Klikněte na „Test“na horních kartách a změňte volič z „Vypnuto“na „Vývoj“
  25. Všimněte si, že protokoly pro funkci Lambda se nacházejí ve službě „CloudWatch“na AWS.

Krok 4: Nastavte kód na svém Raspberry Pi

Aby váš Raspberry Pi mohl komunikovat se zařízením Alexa, potřebuje kromě několika dalších souborů nějaký kód, který usnadní předávání informací přes bluetooth a udržování tohoto připojení. Nejjednodušší způsob, jak začít s nejaktuálnějšími soubory od Amazonu, je klonovat jejich úložiště Raspberry Pi Gadgets. Přejděte do adresáře aktuálního projektu a spusťte

klon git

Tím se do vašeho Pi načte celé jejich úložiště se všemi potřebnými kódy. Má několik příkladů projektů, které předvádějí některé schopnosti Alexa Gadgets. Pokud byste chtěli více informací, přečtěte si soubor readme na jejich stránce Github.

Spusťte jejich funkci nastavení, abyste měli vše nakonfigurováno.

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

sudo python3 launch.py --setup

Postupujte podle pokynů a na otázku, zda chcete konfigurovat pomocí přihlašovacích údajů gadgetu, odpovězte „y“. Připomeňte si Amazon ID a Gadget Secret z nastavení vašeho gadgetu na konzole pro vývojáře, protože to bude požadováno zde. Pro svůj Raspberry Pi Zero W. jsem zvolil režim přenosu „bt“. BLE není podporováno všemi staršími zařízeními Echo, ale můžete se podívat, čeho je váš hardware schopen. Pokud používáte svůj Pi v režimu Desktop, Amazon doporučuje kliknout pravým tlačítkem na ikonu bluetooth v pravém horním rohu a kliknout na „Odstranit“Bluetooth z panelu”, aby se předešlo problémům s připojením.

Poznámka: tento krok může chvíli trvat v závislosti na tom, kolik je třeba nainstalovat.

Nyní budete mít všechny potřebné podpůrné soubory, abyste se mohli vrátit k projektu a začít přidávat funkce umožňující komunikaci s vaším Echo.

Pokud se rozhodnete, můžete odstranit složku „examples“v „Alexa-Gadgets-Raspberry-Pi-Samples/src“

Můžete mít svůj projektový kód, kdekoli chcete, ale já pro něj vytvořím složku v domovském adresáři, alternativně si můžete stáhnout složku s kódem z mého Githubu, nezapomeňte upravit soubory.ini, jak je popsáno níže.

cd /home /pi

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

Nyní jsem vytvořil dva soubory ve složce s názvem „my_project“. Soubor.ini je důležitý. Ujistěte se, že ve vašem Amazon ID a Gadget Secret obsahuje následující a náhradní:

[Nastavení gadgetu]

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

Nyní se podívejme na soubor pythonu, než přejdeme k podrobnostem:

importovat json

z agt importu AlexaGadget

třída MyGadget (AlexaGadget):

def _init _ (self):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (vlastní, směrnice):

užitečné zatížení = json.loads (směrnice.payload.decode ("utf-8")) tisk ("Přijatá data:" + str (užitečné zatížení)) write_text (str (užitečné zatížení ['data'] ['osoba'] ['hodnota ']))

def on_custom_mygadget_pitoalexa (vlastní, směrnice):

užitečné zatížení = json.loads (směrnice.payload.decode ("utf-8")) tisk ("Přijatá data:" + str (užitečné zatížení)) užitečné zatížení = {'data': "Sonda čte" + str (get_temp (užitečné zatížení) ['data'] ['sensor_num'] ['hodnota'])) + "stupně."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', payload) MyGadget (). main ()

Nejprve si všimnete, že volá dvě funkce: write_text () a get_temp (). V mém kódu definuji tyto funkce ve stejném souboru, ale jsou závislé na mém hardwaru, takže jsem se rozhodl je vynechat. Připojil jsem tento soubor s funkcemi definovanými pouze pro tisk a vrácení fiktivních dat v případě, že chcete spustit tento přesný kód. Navrhoval bych testování s tímto přesným kódem, než jej upravíte, aby fungovalo s vaším projektem. Připojil jsem také soubor.ini, ale nezapomeňte jít dovnitř a změnit ID a tajný kód gadgetu. Nejlepší funkce přijímá data předaná z Alexa. Spodní funkce přijímá data ve stejném formátu, ale zařízení Alexa počká pět sekund, než bude událost předána zpět s vlastním užitečným zatížením. Toto užitečné zatížení je zvláštní tím, že zařízení Alexa bude mluvit o svém obsahu.

Jakmile budete mít tyto soubory, přejděte do složky „my_project“a spusťte soubor python.

sudo restart

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

Pokud program spouštíte poprvé, budete jej muset spárovat se zařízením Echo. Ujistěte se, že se vaše zařízení Echo nachází poblíž Raspberry Pi, protože musíme povolit připojení bluetooth.

V aplikaci Alexa na svém mobilním zařízení klikněte na „zařízení“v pravém dolním rohu.

Vlevo nahoře klikněte na „Echo & Alexa“.

Klikněte na své zařízení Echo.

V části „WIRELESS“klepněte na „Zařízení Bluetooth“.

Klepněte na „PÁROVAT NOVÉ ZAŘÍZENÍ“a váš gadget byste měli vidět v seznamu.

Klepněte na svůj gadget. Měli byste vidět zprávu Pi, že byla úspěšně spárována.

Při sledování výstupu na vašem Pi zkuste dát hlasový příkaz Echo:

Vy: "Alexo, požádej můj gadget o kontrolu teploty ze senzoru 1"

Pokud vše fungovalo správně, měli byste slyšet:

Echo: „Sonda čte 120,505 stupňů.“

Ty: „Alexo, řekni mému gadgetu, aby napsal George Washingtona.“

Pi by měl vytisknout:

Přijatá data: {'data': {'person': {'name': 'person', 'value': 'George Washington', 'confirmationStatus': 'NONE'}}}

George Washington"

Krok 5: Zabalení

Zde zobrazené video je příkladem gadgetu, který pracuje se čtením teploty (stejná sonda ve F vs. C) a zapisováním jmen na jednoduchý displej.

Nyní, když doufáme, že něco funguje, byste se měli pokusit přizpůsobit to, aby byl váš vlastní projekt schopnější. Pamatujte, že záměry můžete snadno upravit v konzole Alexa Developer Console a že všechny sloty, které používáte, budou předány vašemu Pi v užitečném zatížení. Kromě toho můžete Alexovi říci cokoli, co byste chtěli, pouze úpravou užitečného zatížení, které předáte zpět v události, z vašeho kódu Raspberry Pi.

Vezměte prosím na vědomí, že tento tutoriál není zamýšlen jako konečné řešení všech funkcí, které byste mohli chtít s Gadgetem Alexa. Je záměrně omezeno, aby vám poskytlo dvě jednoduché funkce pro přenos dat v každém směru mezi Alexou a Gadgetem. Pokud máte zájem o vytváření sofistikovanějších modelů interakcí, doporučuji vám přečíst si všechny soubory readme na https://github.com/alexa/Alexa-Gadgets-Raspberry-P… a vyzkoušet všechny příklady, které poskytují. Také bych vám doporučil přečíst si dokumentaci k Alexa Gadgets Toolkit a Alexa Skills Kit.

Doporučuje: