Përmbajtje:

Zëri i kontrolluar nga Alexa Raspberry Pi Drone Me IoT dhe AWS: 6 hapa (me fotografi)
Zëri i kontrolluar nga Alexa Raspberry Pi Drone Me IoT dhe AWS: 6 hapa (me fotografi)

Video: Zëri i kontrolluar nga Alexa Raspberry Pi Drone Me IoT dhe AWS: 6 hapa (me fotografi)

Video: Zëri i kontrolluar nga Alexa Raspberry Pi Drone Me IoT dhe AWS: 6 hapa (me fotografi)
Video: CS50 2013 - Week 10, continued 2024, Korrik
Anonim
Image
Image
Zëri Alexa i kontrolluar me Raspberry Pi Drone Me IoT dhe AWS
Zëri Alexa i kontrolluar me Raspberry Pi Drone Me IoT dhe AWS
Zëri i kontrolluar nga Alexa Raspberry Pi Drone Me IoT dhe AWS
Zëri i kontrolluar nga Alexa Raspberry Pi Drone Me IoT dhe AWS

Pershendetje! Emri im është Arman. Unë jam një djalë 13-vjeçar nga Massachusetts. Ky tutorial tregon, siç mund të përfundoni nga titulli, si të ndërtoni një Drone Raspberry Pi. Ky prototip demonstron se si dronët po evoluojnë dhe gjithashtu sa një rol të madh mund të luajnë ata në të ardhmen. Unë definitivisht mund ta shoh veten duke u zgjuar në 10 vjet dhe duke i kërkuar një droni të marrë mëngjes për mua. Droni përdor Amazon Alexa, Amazon Web Services, IoT (Internet of Things) dhe më e rëndësishmja një Raspberry Pi për të funksionuar. Ka për qëllim të demonstrojë dhe informojë në lidhje me dronët dhe mënyrën se si ato po përmirësohen çdo ditë. Shpresojmë që të jeni të suksesshëm dhe të mësoni rreth dronëve në proces. Fat i mirë dhe faleminderit për leximin. -Armen

Furnizimet

Për të ndërtuar prototipin ka nevoja të ndryshme për harduer dhe softuer. Kam përdorur një mësim online nga The Drone Dojo për të ndërtuar dronin dhe integrova teknologjitë e listuara. Për dronin ju mund të gjeni listën e pjesëve pikërisht këtu:

Lista e pjesëve të droneve

Kërkesat e softuerit:

  • Shërbimet e uebit të Amazon
  • Një laptop
  • Softueri i Misionit të Planifikimit
  • Balena Etcher
  • Kartela MicroSD me Skedarin Raspbian gjendet këtu
  • Amazon Alexa, fizike ose virtuale

Hapi 1: Mbledhja dhe Kuptimi i Pjesëve

Mbledhja dhe Kuptimi i Pjesëve
Mbledhja dhe Kuptimi i Pjesëve

Çdo pjesë e përmendur në listën e furnizimit është e nevojshme, dhe kështu është një kuptim i qartë i secilës pjesë. Ju mund t'i gjeni pjesët në internet dhe pasi të mblidhen, vazhdoni të lexoni. Një listë për luajtje nga The Drone Dojo për një kuptim të plotë të pjesëve mund të gjendet këtu. Një shpjegim 4-minutësh në kanalin tim në youtube mund të gjendet këtu. Kur bëhet fjalë për dronët, pjesët e vetme, pavarësisht asaj që mendojnë shumica e njerëzve, nuk janë vetëm motorë dhe helikë. Më poshtë janë qëllimet themelore të secilës pjesë.

Raspberry Pi me Emlid Navio2

Kjo pjesë është pothuajse një procesor qendror dhe pika kryesore e dronit. Raspberry Pi vepron si CPU e një kompjuteri i cili dërgon komanda në Navio2 për të ekzekutuar përmes PWM (Sinjalet e Modulimit të Gjerësisë së Pulsit) në pjesët e tjera të dronit

2. ESC's (Kontrollorët Elektronikë të Shpejtësisë)

Këto pjesë të verdha gjenden nën kornizë. Ata janë 4 të kyçur në Navio, një për secilin motor. Me marrjen e sinjaleve PWM, ata rrotullojnë motorët dhe fillojnë fluturimin.

3. Motorët

Motorët nuk kanë nevojë për shumë shpjegime sepse ndoshta jeni të njohur me to. Ata rrotullohen dhe rrotullojnë helikat për të krijuar shtytje.

4. Helikat

Helikat krijojnë shtytje për fluturimin e dronit. Ata rrotullohen në të njëjtin drejtim me motorët për të ngritur automjetin.

5. Moduli i baterisë dhe energjisë

Bateria LiPo fuqizon të gjithë dronin përmes kornizës duke përdorur modulin e energjisë. Ai jep rreth 15-20 minuta kohë fluturimi dhe vepron si një burim energjie.

6. GPS

GPS komunikon me satelitët për të përcaktuar pozicionin e dronit. Ajo përcakton lartësinë, gjerësinë dhe gjatësinë. Mund të përdoret për Gjeofencimin, pikat e rrugës, dhe gjithashtu lëvizjen në pozicione ose drejtime të caktuara.

7. Moduli i Telemetrisë

Moduli i telemetrisë lidh dronin tonë me një stacion kontrolli tokësor, në rastin tonë Planifikuesi i Misionit, që do të monitorohet.

8. Kontrolluesi RC dhe Moduli së bashku me PPM Encoder

Kontrolluesi RC përdor radio për të transmetuar sinjale dhe komanda në modulin RC për të pilotuar dronin me dorë. Kodifikuesi PPM përkthen këto sinjale që Navio + RPI të përpunohen dhe ekzekutohen.

9. Korniza

Kjo kornizë kuq e bardhë vepron si një bazë ose platformë për pjesët e tjera që do të vendosen. Korniza është aerodinamike dhe e lehtë, prandaj e përsosur për ndërtimin e dronit tonë.

Tani me njohuri për çdo pjesë, më në fund mund të ndërtojmë dronin! Përpara në hapin tjetër!

Hapi 2: Montimi i dronit

Montimi i Dronit
Montimi i Dronit

Ky hap është ndoshta më i vështiri për sa i përket përpjekjeve fizike. Unë rekomandoj që të keni një person tjetër për ndihmë ose të përpiqeni të përdorni dorën e ndihmës në listën e pjesëve. Procesi është shumë i gjatë për t'u demonstruar këtu, kështu që unë do të siguroj një lidhje tjetër që kam përdorur nga The Drone Dojo.

Ndërtimi i një droni Raspberry Pi

Përsëri, pasi nuk do të hyj në shumë detaje, unë vetëm do të nxjerr në pah bazat e secilit hap.

1. Organizoni Furnizimet tuaja - Mblidhni materialet tona dhe sigurohuni që ato të jenë lehtësisht të arritshme

2. Planifikoni ndërtimin tuaj - Organizoni pjesët tuaja në kornizë për të bërë një plan të asaj që do të ndërtoni

3. Puna e bashkimit - Kjo është puna që është pak e vështirë të bëhet vetëm. Ju duhet të lidhni lidhëset e artë të plumbave që vijnë me motorët në ESC. Tjetra, ju duhet të merrni pjesën e poshtme të kornizës dhe t'i lidhni ESC -të në kornizën e poshtme ose Bordin e Shpërndarjes së Energjisë. Moduli i Baterisë gjithashtu do t'i bashkohet Bordit të Shpërndarjes së Energjisë

4. Vendosja e kornizës - Pastaj duhet të vidhosni pjesën e sipërme të kornizës së bashku me krahët. Pastaj mund ta lidhni Raspberry Pi në krye në çdo mënyrë që dëshironi. (Kam përdorur shirit ngjitës). Pastaj mund t'i siguroni ESC-të në krahë me zinxhirë. Tani pothuajse kemi mbaruar.

5. Lidhja e Kontrollorit RC me Marrësin - Provoni të ndiqni udhëzimet në listën e dëgjimit më sipër për të lidhur Kontrolluesin RC duke përdorur një ESC.

6. Përfundimi i Pjesëve në Kornizë - Shirit ngjitës ose rrip në modulin e telemetrisë në kornizë. Gjithashtu ngjiteni koduesin PPM në një krah. Tani mund të lidhni koduesin ESC dhe PPM në Navio.

7. Montim GPS + Bateri - Mblidhni GPS Mount me vida dhe pjesë të ndryshme. Duke përdorur lidhëse zip, lidhni GPS në Frame. Unë nuk e përdor domosdoshmërisht GPS Mount për shkak të brishtësisë së tij, por varet nga ju. Tjetra, mund të futni baterinë midis Dist Dist Power. Bordi. Kam lidhur dhe ngjitur modulin e energjisë në kornizë gjithashtu. Tani pajisja juaj kompjuterike është shumë e konfiguruar. Tani për pjesën që kemi pritur!

8. Instalimi i helikave !!! - Mund t'i shtrëngoni helikat duke përdorur tabelën e përmendur në listën për luajtje. Pastaj mund t'i lidhni ESC -të me motorët dhe ne më në fund kemi përfunduar ndërtimin e dronit.

Softueri është i radhës, kështu me radhë!

Hapi 3: Konfigurimi i Raspberry Pi dhe GCS (Planifikuesi i Misionit)

Konfigurimi i Raspberry Pi dhe GCS (Planifikuesi i Misionit)
Konfigurimi i Raspberry Pi dhe GCS (Planifikuesi i Misionit)

Përsëri, mund të gjeni udhëzime më të hollësishme në listën e dëgjimit nga hapi i fundit. Sidoqoftë, me siguri e dini se si ta konfiguroni RasPi. Por këtë herë, ne po e bëjmë atë pa kokë. Përdorni Balena Etcher për të djegur sistemin operativ nga faqja e internetit Navio OS në kartën MicroSD. Ndërsa është i lidhur me kompjuterin tuaj, shkoni te kërkuesi wpa duke përdorur notepad ++. Pas kësaj, futni ssid dhe fjalëkalimin për Raspberry Pi për t'u lidhur me WiFi tuaj. Pastaj duhet të shtoni një skedar të quajtur SSH. Kjo mund të bëhet përmes Linjës së Komandës ose një metode tjetër. Tani ne mund të SSH. Ju mund të përdorni komandën e shpejtë ose Putty. Kam përdorur komandën e shpejtë dhe kam shtypur "ssh pi@navio" për t'u lidhur në rastin tim, ose mund të gjeni adresën IP dhe ssh në atë mënyrë. Pas lidhjes, përdorni këtë video për të konfiguruar dhe konfiguruar Navio. Për të konfiguruar telemetrinë, së pari duhet të bëni një redaktim në Raspberry Pi. Ndiqni këtë për të bërë redaktimin dhe përpiquni të lidheni me Planifikuesin e Misionit. Nëse telemetria nuk funksionon, mund ta zhbëni redaktimin dhe të lidheni duke përdorur një lidhje UDB duke futur IP -në tuaj të GCS (Stacioni i Kontrollit Tokësor siç është laptopi). Pasi të lidheni me Mission Planner, mund të përdorni magjistarin e konfigurimit për të kalibruar të gjitha pjesët e dronit. Nëse keni nevojë për ndihmë referojuni përsëri listës për luajtje. Zakonisht, sa herë që konfiguroni, pothuajse gjithmonë ka një gabim. Zgjidhja e problemeve është një nga pjesët më të mëdha të këtij projekti. Unë nuk mund t'ju ndihmoj vërtet pasi nuk jam në dijeni të gabimeve tuaja, por shumica e gabimeve mund të rregullohen me ndihmën e internetit. Pasi gjithçka është gati, atëherë droni është gati të fluturojë! Ju mund të konfiguroni kontrolluesin tuaj RC dhe mënyrat e fluturimit në Mission Planner. Mundohuni ta mbani shkopin e majtë në pjesën e poshtme-të djathtë për pesë sekonda për të armatosur dronin. Unë nuk ju rekomandoj të fluturoni pa shikuar një tutorial sepse droni është shumë i brishtë dhe i lehtë për t'u thyer. Për mua, herën e parë që e fluturova, theva GPS Mount dhe disa helika. Nëse nuk keni nevojë për kontroll zëri, atëherë mund të ndaleni këtu. Për të mësuar rreth AWS dhe programimit të dronit vazhdoni!

Hapi 4: Programimi i dronit për të fluturuar me Python

Programimi i dronit për të fluturuar me Python
Programimi i dronit për të fluturuar me Python

Para se të hyjmë në AWS, së pari duhet të kuptojmë se si të programojmë dronin për të fluturuar. Pas konfigurimit fillestar, integrimi i kontrollit të zërit nuk duhet të jetë shumë i vështirë. Gjëja e parë që mund të përpiqemi të kuptojmë është të bëjmë një program të thjeshtë ngritjeje dhe zbarkimi. Pas vendosjes së Raspberry Pi, ne mund të futemi përsëri në të. Mund të shikoni përsëri listën e dëgjimit ose të ndiqni udhëzimet e mia.

1. Së pari le të shkarkojmë kodin burimor ArduPilot në një drejtori në Raspberry Pi

mkdir src

Pastaj, merrni skedarët nga GitHub duke përdorur git klon

git clone -b Copter -3.6.11

Tani, le të lundrojmë te /src /ardupilot

cd src

cd ardupilot

Tani, le të inicializojmë skedarët burim

përditësimi i nënmodulit git -init -rekursiv

2. Tjetra, ne duhet të përpilojmë firmware -in në Raspberry Pi

Sigurohuni që të lundroni te/src/ardupilot/me cd para se të bëni hapat e ardhshëm

Pastaj për të cofigure posaçërisht në Navio duke përdorur

./waf konfiguroni --board = navio2

Pastaj mund të përpiloni me

./waf -bin objektiva/arducopter

3. Tani mund të instalojmë kodin burimor në Navio

Së pari ju lejon të lundroni në drejtorinë e duhur.

cd/etc/systemd/system

Pastaj redaktoni skedarin

sudo vi arducopter.shërbim

Aty ku thuhet ExecStart, futni sa vijon në vend të asaj që është tashmë atje

ExecStart =/bin/sh -c "/home/pi/src/arducopter/build/navio2/bin/arducopter $ {ARDUPILOT_OPTS}"

Tani, për të vënë në veprim kodin burimor ardupilot, mund të përdorim

sudo systemctl daemon-ringarkoni

Pastaj mund të rinisim me

sudo systemctl rinis arducopter

Me hapin e fundit, më në fund kemi përfunduar ngritjen e ArduPilot në dronin tonë

4. Instalimi i DroneKit

DroneKit është softueri që ne do të përdorim për të programuar që droni të fluturojë. Për të kuptuar disa nga kodet mund të gjeni dokumentacionin këtu. Së pari ne duhet të instalojmë paketën në dronin tonë para se të shkruajmë një skenar.

Ne mund të instalojmë paketën python me

pip install dronekit == 2.9.1

Ky mund, ose mund të mos jetë versioni më i ri, por është ai që kam përdorur në mënyrë që të ndihmoj me zgjidhjen e problemeve.

Për të kontrolluar nëse është instaluar, mund të bëjmë një

ngrirja e pipave | grep dronekit

Tani ne jemi më në fund gati për të bërë shkrimin tonë të parë piton

5. takeoff_and_land.py

KUJDES! Unë sugjeroj krijimin e një kuptimi bazë të python, në mënyrë që të mësoni dhe kuptoni kodin. Nëse doni ta shkruani vetë programin ndiqeni këtë video.

## Së pari mos krijoni një drejtori për të ruajtur këtë kod

cd dk ## Nëse doni ta bëni vetë atëherë përdorni vi takeoff_and_land.py ## për të krijuar një program

Përndryshe, mund të hidhni një sy ose të përdorni skedarin e bashkangjitur dhe të përdorni një protokoll të transferimit të skedarëve. Ne mund ta provojmë këtë program më vonë. Së pari për të sqaruar se është një skedar python që duhet të përdorim

chmod +x takeoff_and_land.py

Pastaj, për të provuar përdorni kodin e mëposhtëm për të ekzekutuar

python takeoff_and_land.py -lidheni 127.0.0.1:14550

Herën e parë nuk funksionoi as për mua. Nëse ka një afat kohor të lidhjes, atëherë mos u shqetësoni se ka diçka që mund të bëni. Hapni një kërkesë tjetër dhe ssh. Mund të provoni të instaloni diçka të quajtur mavproxy dhe të provoni ta ekzekutoni. Pas kësaj, mund të ekzekutoni të dy njëkohësisht. Kjo duhet të ndihmojë në lidhjen e dronit. Pasi të bëhet kjo, unë kam një sfidë për ju. Mundohuni të kuptoni se çfarë bën programi tjetër (set_velocity_body.py) dhe si ta bëni atë të funksionojë. Nëse e bëni, punë e mirë.

6. Përpara!

Tani mund ta përdorim këtë njohuri për ta bërë dronin tonë të kontrolluar nga zëri. Kontrolli i dronit Alexa përdor shumë nga këto karakteristika dhe më shumë. Fat i mirë dhe në vazhdim!

Hapi 5: Përdorimi i Amazon Alexa dhe Amazon Web Services për të integruar kontrollin zanor

Përdorimi i Amazon Alexa dhe Amazon Web Services për të integruar kontrollin zanor
Përdorimi i Amazon Alexa dhe Amazon Web Services për të integruar kontrollin zanor
Përdorimi i Amazon Alexa dhe Amazon Web Services për të integruar kontrollin zanor
Përdorimi i Amazon Alexa dhe Amazon Web Services për të integruar kontrollin zanor

Ky hap është një nga ato më pak të dokumentuar. Kjo do të thotë se do të jetë më e vështira për tu zgjidhur. Vetëm marrja e saj në punë më mori rreth një muaj, ndoshta më shumë. Gjëja më e rëndësishme këtu është të jesh i durueshëm. Kjo veçori, nëse zbatohet në jetën reale, mund të ndryshojë jetën. Thjesht mund t'i thuash Alexa që të marrë ushqimet për ty në vend që të shkosh vetë. Imagjinoni atë! Pra, pa zhurmë të mëtejshme, le të hyjmë në të!

1. Regjistrimi i Raspberry Pi si një gjë në AWS IoT

Për të përdorur IoT (Internet of Things), mirë na duhet një gjë. Pra, ne duhet të identifikohemi në AWS Console për të përdorur AWS IoT së pari. Pastaj shkoni në IoT Core. Pasi të jeni atje, duhet të klikoni Menaxho dhe pastaj krijoni një gjë. Pas shtimit të një emri, për t'u lidhur, ne kemi nevojë për një certifikatë. Unë do të rekomandoja të klikoni në certifikimin me një klik. Pastaj pasi të shihni ekranin e certifikatës, sigurohuni që të shkarkoni secilin çelës duke përfshirë CA rrënjë. Atëherë mund të shkoni dhe të përfundoni krijimin e sendit. Tjetra ne duhet të krijojmë një politikë. Kthehuni përsëri në Bërthamën IoT. Pastaj klikoni në të sigurt dhe klikoni politikat. Pastaj klikoni në krijimin e politikës. Pastaj mund të krijoni një emër dhe të shtoni burime. Nën veprim, shtypni iot * dhe llojin * nën resursin dhe goditni lejoni efektin. Pastaj kthehuni te sendi juaj dhe shkoni te certifikata juaj. Pasi të jeni këtu, klikoni mbi politikat. Pastaj mund të bashkëngjitni politikën tuaj për atë gjë dhe gjithçka është gati!

2. Vendosja e Kodit mbi Raspberry Pi dhe bashkëveprimi me IoT

Për këtë pjesë, do t'ju duhet një SFTP Client (kam përdorur WinSCP) për transferimin e skedarëve. Pas lidhjes me Raspberry Pi tonë, do të na duhet të kemi çelësat e certifikatës në dorë. Ju duhet të transferoni skedarët kryesorë në Raspberry Pi. Ju gjithashtu duhet të instaloni me pip AWSIoTPythonSDK në Raspberry Pi. Pastaj hyni në drejtorinë dk në Raspberry Pi. Ju përdorni skedarin Alexa Control Control që dhashë për komunikim me IoT. Për të përdorur këtë skedar kam përdorur një Shell Script për fillimin. Unë do të tregoj kodin më poshtë pasi nuk mund ta ngarkoj skedarin për ndonjë arsye. Nëse programi nuk merr mesazhe nga AWS IoT gjatë testimit, mos u shqetësoni! Ky mund të jetë faji im pasi Skedari i Kontrollit të Drone Alexa mund të mos i përshtatet Gjërave tuaja. Pra, për ta rregulluar atë, kthehuni te AWS IoT dhe shtypni mëso në panelin e majtë. Ndiqni udhëzimet dhe mund t'ju duhet të rifilloni. Me fal per ate. Sapo IoT juaj të fillojë të punojë me programin në RasPi, mund të integroni kodin dronekit nga skedari Alexa Control Control që dhashë. Pas kësaj, përdorni Shell Script që dhashë me certifikatat tuaja dhe Rest API Endpoint nga IoT.

# stop script në erroret -e # Kontrolloni për të parë nëse ekziston skedari rrënjësor CA, shkarkoni nëse jo nëse [! -f./root-CA.crt]; pastaj printf "\ nShkarkimi i certifikatës AWS IoT Root CA nga AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK për Python nëse nuk është instaluar tashmë nëse [! -d./aws-iot-device-sdk-python]; pastaj printf "\ nInstalimi i AWS SDK … / n" git klon https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# ekzekuto aplikacionin pub/nën mostër duke përdorur certifikatat e shkarkuara në paketë

printf. PiGroundStation01.private.key

Kjo nuk do të funksionojë për të gjithë ju pasi emrat janë të ndryshëm. Në vend të çelësave që kam përdorur zëvendësoni me emrat tuaj të çelësave kur transferoni skedarin. Sigurohuni që të dilni nga dk para se të transferoni skedarin! Kjo duhet të jetë gjithçka që duhet të bëni tani për tani.

3. Ndërtimi i Aftësisë tuaj Alexa

Ky hap duket shumë më i vështirë se sa është në të vërtetë. Së pari, duhet të regjistrohemi në tastierën Alexa Developer. Pastaj, thjesht goditni krijoni aftësi. Kur ju kërkon të zgjidhni një model për aftësinë tuaj, thjesht goditni me porosi. Kur ju kërkon të zgjidhni një metodë, godisni dispozitën tuaj. Mund ta emërtoni si të doni. Asnjë model nuk kërkohet, kështu që zgjidhni fillimin nga e para. Tjetra, pasi të keni krijuar aftësinë tuaj, duhet të arrini në ekranin e Ndërtuesit të Aftësive me një listë kontrolli në të djathtë. Nga këtu, ne mund të fillojmë të ndërtojmë aftësitë tona. E para në listën kontrolluese është emri i thirrjes. Kjo është ajo që do t'i thuash Alexa që të thërrasë aftësinë tënde. Për mua, unë thjesht vendosa emrin tim të thirrjes si dron. Tani mund të shkojmë te qëllimet, shprehjet dhe lojërat tona. Këtu, mund të bëni komanda për dronin, të tilla si të ngjiteni 1 metër ose të shkoni djathtas ose poshtë. I imi punon vërtet me një metër tani për tani. Mund të klikoni në Editorin JSON në fund të panelit të majtë. Pastaj mund të ngjisni kodin e mëposhtëm në të.

Pasi të keni ngjitur kodin në Editorin JSON, mund të klikoni në hapin e tretë të listës kontrolluese dhe do të krijojë modelin tuaj të ndërveprimit për ju. Me këtë hap, do të përfundoni tani për tani. Mund ta lini vendin e fundit përfundimtar bosh tani për tani!

Hapi 4: Ndërtimi i funksionit tuaj Lambda

Tani, ky hap është ai që do të duhet ta kuptoni vetë. Unë do t'ju tregoj se si ta lidhni atë me Aftësinë Alexa, por do t'ju duhet ta kodoni vetë. Pra, së pari shkoni në tastierën e menaxhimit AWS. Pastaj, shkoni në Lambda. Pastaj mund të krijoni një funksion duke e emëruar atë që dëshironi. Sigurohuni që ta shkruani nga e para dhe bëni kohën e funksionimit çfarëdo gjuhe programimi që dëshironi. Kam përdorur Node.js. Për të shtuar Aftësinë Alexa, shtoni një shkas dhe zgjidhni Alexa Skills Kit (ASK). Kopjoni ARN -në tuaj Lambda dhe kthehuni te Aftësia Alexa. Tani, shkoni në pikën përfundimtare. Ju mund të ngjisni ARN tuaj, të ruani dhe të ndërtoni një model të ri. Pastaj, merrni ID -në e Alexa Skill dhe ngjiteni në seksionin e këmbëzës ku ju pyet në Lambda. Tjetra, lëvizni poshtë në Lambda dhe gjeni cilësimet themelore dhe bëni kohën e përfundimit 10 sekonda. Tani, ju takon juve të kuptoni kodin. Për sugjerime, mund të përdorni faqet e internetit më poshtë.

github.com/aws/aws-iot-device-sdk-js

www.hackster.io/veggiebenz/voice-controlle…

dhe mund të përdorni skedarin që kam bashkangjitur, por nuk është i plotë dhe nuk do të funksionojë.

/ *** Kontrolloni kuadopterin tuaj APM / Pixhawk me zërin tuaj, duke përdorur Amazon Alexa, Lambda, 2lemetry MQTT.*/ var awsIot = kërkojnë ('aws-iot-pajisje-sdk'); var config = kërko ("./ config"); var pajisjeName = "EchoDroneControl"; // kjo pajisje është vërtet kontrolluesi var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + Emri i pajisjes, // + "-Lambda-" + (Data e re (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var klient = null; // Drejtoni kërkesën në hyrje bazuar në llojin (LaunchRequest, IntentRequest, etj.) Trupi JSON i kërkesës jepet në parametrin e ngjarjes. export.handler = funksioni (ngjarja, konteksti) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = kontekst; if (event.session.application.applicationId! == app_id) {ctx.fail ("ID e pavlefshme e aplikacionit"); } klient = awsIot.device (mqtt_config); client.on ("lidheni", funksioni () {console.log ("I lidhur me AWS IoT"); // kthimi i thirrjes ();}});

nëse (ngjarja.sesioni.i ri) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.quest, event.session); } tjetër nëse (event.request.type === "IntentRequest") {onIntent (event.quest, event.session); } tjetër nëse (event.request.type === "SessionEndedRequest") {onSessionEnded (event.quest, event.session); ctx.success (); }} catch (e) {console.log ("PCERJASHTIM në mbajtës:" + e); ctx.fail ("Përjashtim:" + e); }}; /*** Thirret kur fillon sesioni. */ funksion onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Thirret kur përdoruesi fillon aftësinë pa specifikuar atë që ata duan. */ funksion onLaunch (startRequest, session, callback) {console.log ("onLaunch requestId =" + launRequest.requestId + ", sessionId =" + session.sessionId); // Dërgimi në nisjen e aftësive tuaja. getWelcomeResponse (përgjigje në telefon); } /*** Thirret kur përdoruesi specifikon një qëllim për këtë aftësi. */funksion onIntent (qëllimRequest, sesion) {//, callback) {console.log ("onIntent requestId =" + qëllimRequest.requestId + ", sessionId =" + session.sessionId); var qëllim = qëllimRequest.intent, qëllimName = qëllimRequest.intent.name; console.log ("REQUEST to string =" + JSON.stringify (qëllimRequest)); var callback = null; // Dërgimi te mbajtësit e synimeve të aftësive tuaja nëse ("GoIntent" === Emri i qëllimit) {doGoIntent (qëllimi, sesioni); } else if ("CommandIntent" === Emri i qëllimit) {doCommandIntent (qëllimi, sesioni); } else if ("TurnIntent" === Emri i qëllimit) {doTurnIntent (qëllimi, sesioni); } else if ("HelpIntent" === qëllimName) {getWelcomeResponse (); } else {hedh "Qëllim i pavlefshëm"; }} /*** Thirret kur përdoruesi përfundon sesionin. * Nuk thirret kur aftësia kthehet duhetEndSession = true. */ funksion onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Shtoni këtu logjikën e pastrimit} // --------------- Funksionet që kontrollojnë sjelljen e aftësive -------------------- --- funksioni getWelcomeResponse () {// Nëse do të donim të iniconim seancën për të pasur disa atribute, mund t'i shtonim këtu. var sessionAttributes = {}; var cardTitle = "Mirësevini"; var speechOutput = "Mirë se vini në KONTROLLIN E DRONIT."; // TODO: është dron në internet apo jashtë linje? Nëse është në internet, a është i ARMEDZUAR? var repromptText = "Dron gati për komandë."; var shouldEndSession = false; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** trajton qëllimin GO. */ funksion doGoIntent (qëllimi, sesioni, përgjigjja e thirrjes) {// var cardTitle = "Dron GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; drejtimi var = synimi.lotat. Direction.vlera; var distanca = synimi.lotat. Distanca.vlera; var njësi = qëllim.slots. Unit.value; var validDirections = ["përpara", "përpara", "prapa", "mbrapa", "djathtas", "majtas", "lart", "poshtë", "drejt", "përpara", "drejt përpara"]; var validUnits = ["këmbë", "këmbë", "metër", "metra", "oborr", "oborre"]; repromptText = "Më thuaj sa larg të shkoj dhe në cilin drejtim."; var fail = false; // vërtetoni hyrjet nëse (! (parseInt (distanca)> = 1)) {speechOutput = "Nuk mund ta kuptoja distancën që dëshironi të udhëtoj."; dështoj = e vërtetë; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (drejtim) == -1) {speechOutput = "Nuk mund ta kuptoja drejtimin që dëshironi të udhëtoj."; dështoj = e vërtetë; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Nuk mund ta kuptoja njësinë në të cilën dëshironi të udhëtoj."; dështoj = e vërtetë; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } nëse (! dështon) {var cardTitle = "Dron shkon" + drejtim + "" + distancë + "" + njësi; speechOutput = "Shkon" + drejtim + "" + distancë + "" + njësi; mqttPublish (synimi, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funksioni doCommandIntent (qëllimi, sesioni, përgjigjja) {

// var cardTitle = "Urdhëroni me dron …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Më thuaj cili është komanda për dronin."; var task = qëllim.slots. Task.vlera; var validTasks = ["nisje", "tokë", "r. t. l.", "mbaj", "qëndro", "ndal", "kthehu në nisje", "aborto"]; if (validTasks.indexOf (task) == -1) {speechOutput = "Nuk mund ta kuptoja komandën."; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Ekzekutimi i komandës së Drone" + detyrë; speechOutput = "Ekzekutimi i komandës" + detyrë; mqttPublish (synimi, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funksioni doTurnIntent (qëllimi, sesioni, përgjigjja e thirrjes) {

// var cardTitle = "Kthesë me dron …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Më thuaj si dëshiron ta kthesh dronin."; drejtimi var = synimi.lotat. Direction.vlera; var validDirections = ["djathtas", "majtas", "rreth"]; if (validDirections.indexOf (drejtim) == -1) {speechOutput = "Nuk mund ta kuptoja drejtimin e kthesës."; ctx.success (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Kthesë me dron" + drejtim; speechOutput = "Kthesë" + drejtim; mqttPublish (synimi, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

funksioni mqttPublish (synimi, sesioniAtributet, titulli i kartës, fjalimiOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (synimi); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); klient.fund (); client.on ("close", (function () {console.log ("MQTT CLIENT CLOSE - mendon se është bërë, me sukses."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("gabim", (funksioni (gabim, i dhënë) {console.log ("GABIMI I KLIENTIT MQTT !!" + gaboj);})); }

// --------------- Ndihmuesit që ndërtojnë të gjitha përgjigjet -----------------------

funksion buildSpeechletResponse (titulli, dalja, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, card: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {{type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} funksion buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, përgjigje: speechletResponse}}

Recommended: