Talaan ng mga Nilalaman:

Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS: 6 na Hakbang (na may Mga Larawan)
Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS: 6 na Hakbang (na may Mga Larawan)

Video: Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS: 6 na Hakbang (na may Mga Larawan)

Video: Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS: 6 na Hakbang (na may Mga Larawan)
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Hulyo
Anonim
Image
Image
Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS
Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS
Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS
Kinokontrol ng Alexa ang Voice Raspberry Pi Drone Sa IoT at AWS

Hi! Ang pangalan ko ay Armaan. Ako ay isang 13 taong gulang na lalaki mula sa Massachusetts. Ipinapakita ang tutorial na ito, tulad ng mahihinuha mo mula sa pamagat, kung paano bumuo ng isang Raspberry Pi Drone. Ipinapakita ng prototype na ito kung paano umuusbong ang mga drone at kung gaano kalaki ang bahagi na maaaring gampanan nila sa hinaharap. Tiyak na nakikita ko ang aking sarili na nagising sa loob ng 10 taon at humihiling ng isang drone na kumuha ng agahan para sa akin. Gumagamit ang drone ng Amazon Alexa, Amazon Web Services, IoT (Internet of Things), at pinakamahalaga sa isang Raspberry Pi na tatakbo. Ito ay sinadya upang ipakita at ipaalam ang tungkol sa mga drone at kung paano sila nagpapabuti araw-araw. Sana ay matagumpay ka at malaman ang tungkol sa mga drone sa proseso. Good luck at salamat sa pagbabasa. -Armaan

Mga gamit

Upang mabuo ang prototype mayroong iba't ibang mga pangangailangan sa hardware at software. Gumamit ako ng isang online na tutorial ng The Drone Dojo upang maitayo ang drone at isama ang mga teknolohiyang nakalista. Para sa drone maaari mong makita ang listahan ng mga bahagi dito:

Listahan ng Mga Bahaging Drone

Mga Kinakailangan sa Software:

  • Mga Serbisyo sa Amazon sa Amazon
  • Isang Laptop
  • Mission Planer Software
  • Balena Etcher
  • Natagpuan ang MicroSD Card na may Raspbian File dito
  • Amazon Alexa, pisikal o virtual

Hakbang 1: Mga Bahagi ng Pagtitipon at Pag-unawa

Mga Bahaging Pagtitipon at Pag-unawa
Mga Bahaging Pagtitipon at Pag-unawa

Ang bawat bahagi na nabanggit sa listahan ng supply ay kinakailangan, at sa gayon ay isang malinaw na pag-unawa sa bawat bahagi. Maaari mong makita ang mga bahagi sa online at sa sandaling natipon, ipagpatuloy ang pagbabasa. Ang isang playlist ng The Drone Dojo para sa isang buong pag-unawa sa mga bahagi ay matatagpuan dito. Ang isang 4-minutong paliwanag sa aking youtube channel ay matatagpuan dito. Pagdating sa mga drone ang tanging mga bahagi, sa kabila ng kung ano ang iniisip ng karamihan sa mga tao, ay hindi lamang mga motor at propeller. Nasa ibaba ang mga pangunahing layunin ng bawat bahagi.

Ang Raspberry Pi kasama ang Emlid Navio2

Ang bahaging ito ay halos isang sentral na processor at ang pangunahing punto ng drone. Ang Raspberry Pi ay kumikilos tulad ng CPU ng isang computer na nagpapadala ng mga utos sa Navio2 upang maisagawa sa pamamagitan ng PWM (Pulse Width Modulation Signals) sa iba pang mga bahagi ng drone

2. Ang ESC (Electronic Speed Controllers)

Ang mga dilaw na bahagi na ito ay matatagpuan sa ilalim ng frame. Ang mga ito ay 4 na naka-plug in sa Navio, isa para sa bawat motor. Sa pagtanggap ng mga signal ng PWM, paikutin nila ang mga motor at nagsimulang lumipad.

3. Mga Motors

Ang mga motor ay hindi nangangailangan ng labis na paliwanag sapagkat pamilyar ka sa kanila. Paikutin at paikutin nila ang mga propeller upang lumikha ng tulak.

4. Mga tagataguyod

Ang mga propeller ay lumilikha ng tulak para lumipad ang drone. Paikutin sila sa parehong direksyon tulad ng mga motor upang maiangat ang sasakyan.

5. Ang baterya at Power Module

Pinapalakas ng LiPo Battery ang buong drone sa pamamagitan ng frame gamit ang power module. Nagbibigay ito ng mga 15-20 minuto ng oras ng paglipad at kumikilos bilang isang mapagkukunan ng kuryente.

6. Ang GPS

Nakikipag-usap ang GPS sa mga satellite upang matukoy ang posisyon ng drone. Tinutukoy nito ang altitude, latitude, at longitude. Maaari itong magamit para sa Geofencing, mga pointpoint, at paglipat din sa ilang mga posisyon o direksyon.

7. Ang Modyul ng Telemetry

Ang module ng telemetry ay nag-uugnay sa aming drone sa isang ground control station, sa aming case Mission Planner, upang masubaybayan.

8. Ang RC Controller at Module kasama ang PPM Encoder

Gumagamit ang RC Controller ng radyo upang makapagpadala ng mga signal at utos sa RC Module upang manu-manong i-pilot ang drone. Isinalin ng PPM Encoder ang mga signal na ito para maiproseso at maipatupad ng Navio + RPI.

9. Ang Frame

Ang pula at puting frame na ito ay gumaganap bilang isang base o platform para sa iba pang mga bahagi na mailagay. Ang frame ay aerodynamic at magaan, samakatuwid perpekto para sa aming drone build.

Ngayon na may kaalaman sa bawat bahagi, sa wakas maaari na nating maitayo ang drone! Pasulong sa susunod na hakbang!

Hakbang 2: Pag-iipon ng Drone

Pag-iipon ng Drone
Pag-iipon ng Drone

Ang hakbang na ito ay marahil ang pinaka mahirap sa mga tuntunin ng pisikal na pagsisikap. Inirerekumenda ko ang pagkakaroon ng ibang tao para sa tulong o subukang gamitin ang tulong na kamay sa listahan ng mga bahagi. Masyadong mahaba ang proseso upang maipakita dito, kaya magbibigay ako ng isa pang link na ginamit ko ng The Drone Dojo.

Pagbuo ng isang Raspberry Pi Drone

Muli, dahil hindi ko na bibigyan ng labis na detalye, i-highlight ko lamang ang mga pangunahing kaalaman sa bawat hakbang.

1. Ayusin ang Iyong Mga Pantustos - Ipunin ang aming mga materyales at tiyaking madali silang ma-access

2. Planuhin ang Iyong Bumuo - Isaayos ang iyong mga bahagi sa frame upang makagawa ng isang blueprint ng iyong itatayo

3. Soldering Work - Ito ang gawaing medyo mahirap gawin nang mag-isa. Dapat mong solder ang mga ginintuang konektor ng bala na kasama ng mga motor sa ESC. Susunod, dapat mong kunin ang ilalim na bahagi ng frame at maghinang ng ESC sa ilalim na frame o Lupon ng Pamamahagi ng Power. Ang Module ng Baterya ay hihihinang din sa Power Distribution Board

4. Pag-set up ng Frame - Pagkatapos ay dapat mong i-tornilyo ang tuktok na bahagi ng frame kasama ang mga bisig. Maaari mong i-attach ang Raspberry Pi sa itaas sa anumang nais mo. (Gumamit ako ng duct tape). Pagkatapos ay maaari mong ma-secure ang ESC sa mga bisig gamit ang mga zip-kurbatang. Ngayon ay halos tapos na tayo.

5. Pagbubuklod sa RC Controller sa Receiver - Subukang sundin ang mga tagubilin sa playlist sa itaas upang maiugnay ang RC Controller gamit ang isang ESC.

6. Pagtatapos ng Mga Bahagi sa Frame - Duct tape o strap sa module ng telemetry papunta sa frame. Duct tape ang PPM Encoder sa isang braso din. Ngayon ay maaari mo nang i-wire ang ESC at PPM Encoder sa Navio.

7. GPS Mount + Battery - Ipunin ang GPS Mount na may iba't ibang mga turnilyo at piraso. Gamit ang mga zip-kurbatang, ilakip ang GPS sa Frame. Hindi ko kinakailangang gumamit ng GPS Mount dahil sa kanyang hina, ngunit nasa sa iyo ito. Susunod, maaari mong ipasok ang baterya sa pagitan ng Power Dist. Lupon. Isinali ko at na-tape ang module ng kuryente sa frame din. Ngayon ang iyong hardware ay medyo naka-set up. Ngayon para sa bahaging hinihintay namin!

8. Pag-install ng mga Propeller !!! - Maaari mong higpitan ang mga propeller gamit ang tsart na nabanggit sa playlist. Pagkatapos ay maaari mong mai-plug in ang ESC sa mga motor at sa wakas natapos na namin ang pagbuo ng drone.

Susunod ang software, kaya't pasulong!

Hakbang 3: Pag-configure ng Raspberry Pi at GCS (Mission Planner)

Pag-configure ng Raspberry Pi at GCS (Mission Planner)
Pag-configure ng Raspberry Pi at GCS (Mission Planner)

Muli, maaari kang makahanap ng mas detalyadong mga tagubilin sa playlist mula sa huling hakbang. Gayunpaman, marahil alam mo kung paano i-setup ang RasPi. Ngunit sa oras na ito, ginagawa namin ito nang walang ulo. Gumamit ng Balena Etcher upang sunugin ang OS mula sa website ng Navio OS sa MicroSD card. Habang naka-plug in ito sa iyong computer, pumunta sa wpa supplicant gamit ang notepad ++. Pagkatapos nito, ipasok ang ssid at password para sa Raspberry Pi upang kumonekta sa iyong WiFi. Pagkatapos ay dapat kang magdagdag ng isang file na tinatawag na SSH. Maaari itong sa pamamagitan ng Command Line o ibang pamamaraan. Ngayon ay maaari na kaming SSH. Maaari mong gamitin ang command prompt o Putty. Gumamit ako ng command prompt at nag-type ng "ssh pi @ navio" upang kumonekta sa aking kaso, o maaari mong makita ang IP address at ssh sa ganoong paraan. Sa pagkonekta, gamitin ang video na ito upang i-set up at i-configure ang Navio. Upang ma-setup ang telemetry dapat mo munang gumawa ng isang pag-edit sa Raspberry Pi. Sundin ito upang mai-edit at subukang kumonekta sa Mission Planner. Kung hindi gagana ang telemetry, maaari mong i-undo ang pag-edit at kumonekta gamit ang isang koneksyon sa UDB sa pamamagitan ng pagpasok sa iyong GCS (Ground Control Station tulad ng laptop) IP. Kapag nakakonekta sa Mission Planner, maaari mong gamitin ang setup wizard upang i-calibrate ang lahat ng bahagi ng drone. Kung kailangan mo ng tulong mag-refer muli sa playlist. Karaniwan, tuwing nagse-set up ka, halos palaging isang error. Ang pag-troubleshoot ay isa sa pinakamalaking bahagi ng proyektong ito. Hindi talaga kita matutulungan doon dahil hindi ko alam ang iyong mga error, ngunit ang karamihan sa mga error ay maaaring maayos sa tulong mula sa internet. Matapos ang lahat ay handa na, pagkatapos ang drone ay handa nang lumipad! Maaari mong i-setup ang iyong RC controller at flight mode sa Mission Planner. Subukang hawakan ang kaliwang stick sa pinakadulo sa kanan sa loob ng limang segundo upang braso ang drone. Hindi ko inirerekumenda ang paglipad nang hindi tumitingin sa isang tutorial dahil ang drone ay napaka marupok at madaling masira. Para sa akin, sa kauna-unahang pagkakataon na nilipad ko ito, sinira ko ang GPS Mount at ilang mga propeller. Kung hindi ka nangangailangan ng kontrol sa boses, maaari kang tumigil dito. Upang malaman ang tungkol sa AWS at programa ang drone ay magpatuloy!

Hakbang 4: Programming ang Drone upang Lumipad Sa Python

Programming ang Drone to Fly With Python
Programming ang Drone to Fly With Python

Bago makarating sa AWS, dapat muna nating maunawaan kung paano i-program ang drone upang lumipad. Matapos ang paunang pag-set up, ang pagsasama ng kontrol sa boses ay hindi dapat maging masyadong mahirap. Ang unang bagay na maaari naming subukang magkaroon ng isang kahulugan nito ay ang paggawa ng isang simpleng programa sa pag-takeoff at lupa. Pagkatapos i-set up ang Raspberry Pi, maaari naming SSH ito ulit dito. Maaari kang tumingin muli sa playlist o sundin ang aking tagubilin.

1. Una nating i-download ang ArduPilot Source Code sa isang direktoryo sa Raspberry Pi

mkdir src

Pagkatapos, kunin ang mga file mula sa GitHub gamit ang clone ng git

git clone -b Copter-3.6.11

Ngayon, mag-navigate tayo sa / src / ardupilot

cd src

cd ardupilot

Ngayon, simulan natin ang mga file ng mapagkukunan

git submodule update --init --recursive

2. Susunod, kailangan nating isulat ang firmware sa Raspberry Pi

Tiyaking mag-navigate sa / src / ardupilot / gamit ang cd bago gawin ang mga susunod na hakbang

Pagkatapos upang i-cofigure ang partikular sa Navio na ginagamit

./waf configure --board = navio2

Pagkatapos ay maaari kang sumulat sa

./waf --targets bin / arducopter

3. Maaari na nating mai-install ang source code sa Navio

Hinahayaan muna ang mag-navigate sa tamang direktoryo.

cd / etc / systemd / system

Pagkatapos i-edit ang file

sudo vi arducopter.service

Kung saan sinasabi nito ang ExecStart, ipasok ang sumusunod sa halip na kung ano na ang naroroon

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

Ngayon, upang maaksyunan ang source code ng ardupilot, maaari nating gamitin

sudo systemctl daemon-reload

Pagkatapos ay maaari kaming muling simulan

sudo systemctl restart ang arducopter

Sa huling hakbang, sa wakas natapos na namin ang pag-set up ng ArduPilot sa aming drone

4. Pag-install ng DroneKit

Ang DroneKit ay ang software na gagamitin namin upang ma-program ang drone upang lumipad. Upang maunawaan ang ilan sa mga code maaari mong makita ang dokumentasyon dito. Una dapat nating mai-install ang pakete sa aming drone bago magsulat ng isang script.

Maaari naming mai-install ang python package kasama

pip install dronekit == 2.9.1

Ito ay maaaring, o maaaring hindi pinakabagong bersyon, ngunit ito ang ginamit ko upang makakatulong ako sa pagto-troubleshoot.

Upang suriin kung naka-install, magagawa natin ang isang

pip freeze | grep dronekit

Ngayon handa na kami sa wakas na gawin ang aming unang script ng sawa

5. takeoff_and_land.py

BABALA! Iminumungkahi ko na magtaguyod ng isang pangunahing pag-unawa sa sawa, upang maaari mong malaman at maunawaan ang code. Kung nais mong isulat ang programa sa iyong sarili sundin ang video na ito.

## Una munang lumikha ng isang direktoryo upang maiimbak ang code na ito

cd dk ## Kung nais mong gawin ito sa iyong sarili pagkatapos ay gamitin ang vi takeoff_and_land.py ## upang lumikha ng isang programa

Kung hindi man, maaari mong tingnan o gamitin ang naka-attach na file at gumamit ng isang file transfer protocol. Maaari naming subukan ang program na ito pagkatapos. Una upang linawin na ito ay isang python file na dapat nating gamitin

chmod + x takeoff_and_land.py

Pagkatapos, upang subukang gamitin ang sumusunod na code upang tumakbo

python takeoff_and_land.py - ikonekta ang 127.0.0.1:14550

Sa unang pagkakataon na hindi rin ito gumana para sa akin. Kung mayroong isang pag-timeout ng link, pagkatapos ay huwag mag-alala mayroong isang bagay na maaari mong gawin. Magbukas ng isa pang prompt at ssh. Maaari mong subukang i-install ang isang bagay na tinatawag na mavproxy at subukang patakbuhin ito. Pagkatapos nito, maaari mong patakbuhin ang pareho nang sabay-sabay. Makakatulong ito na ikonekta ang drone. Kapag tapos na iyan, mayroon akong hamon para sa iyo. Subukang alamin kung ano ang ginagawa ng iba pang programa (set_velocity_body.py) at kung paano ito gagana. Kung gagawin mo, magandang trabaho.

6. Patuloy!

Magagamit na namin ang kaalamang ito upang makontrol ang boses ng aming drone. Gumagamit ang Alexa drone control ng maraming mga tampok na ito at higit pa. Good luck at magpatuloy!

Hakbang 5: Paggamit ng Amazon Alexa at Amazon Web Services upang Isama ang Control ng Boses

Paggamit ng Amazon Alexa at Amazon Web Services upang isama ang Voice Control
Paggamit ng Amazon Alexa at Amazon Web Services upang isama ang Voice Control
Paggamit ng Amazon Alexa at Amazon Web Services upang isama ang Voice Control
Paggamit ng Amazon Alexa at Amazon Web Services upang isama ang Voice Control

Ang hakbang na ito ay isa sa mga hindi gaanong naitala. Nangangahulugan ito na ito ang magiging pinakamahirap na mag-troubleshoot. Ang pagkuha lamang sa trabaho ay tumagal ng tungkol sa isang buwan, marahil higit pa. Ang pinakamahalagang bagay dito ay maging mapagpasensya. Ang tampok na ito, kung ipinatupad sa totoong buhay, ay maaaring maging pagbabago sa buhay. Maaari mo lamang sabihin kay Alexa na kunin ang iyong mga groseri para sa iyo sa halip na mapunta ang iyong sarili. Isipin mo yan! Kaya nang walang karagdagang pag-ado tara na!

1. Pagrehistro ng Raspberry Pi bilang isang Bagay sa AWS IoT

Upang magamit ang IoT (Internet of Things), mabuti kailangan namin ng isang bagay. Kaya kailangan naming mag-login sa AWS Console upang magamit muna ang AWS IoT. Pagkatapos ay pumunta sa IoT Core. Kapag nandiyan na, dapat mong i-click ang Pamahalaan at pagkatapos ay lumikha ng isang bagay. Pagkatapos magdagdag ng isang pangalan, para sa pagkonekta, kailangan namin ng isang sertipiko. Inirerekumenda ko ang pag-click sa sertipikasyon ng One-click. Pagkatapos pagkatapos makita ang screen ng sertipiko, tiyaking mag-download ng bawat key kasama ang root CA. Pagkatapos ay maaari kang pumunta at tapusin ang paglikha ng bagay. Susunod na kailangan naming lumikha ng isang patakaran. Bumalik sa IoT Core. Pagkatapos mag-click sa ligtas at mag-click sa mga patakaran. Pagkatapos ay pindutin ang lumikha ng patakaran. Maaari ka ring lumikha ng isang pangalan at magdagdag ng mga mapagkukunan. Sa ilalim ng pagkilos, i-type ang iot * at i-type * sa ilalim ng mapagkukunan at pindutin ang payagan para sa epekto. Pagkatapos ay bumalik sa iyong bagay at pumunta sa iyong sertipiko. Kapag nandito, mag-click sa mga patakaran. Maaari mong i-attach ang iyong patakaran para sa bagay at ang lahat ay nakatakda na!

2. Pag-set up ng Code sa Raspberry Pi at pakikipag-ugnay sa IoT

Para sa bahaging ito, kakailanganin mo ng isang SFTP Client (ginamit ko ang WinSCP) para sa paglipat ng file. Sa pagkonekta sa aming Raspberry Pi, kakailanganin naming magkaroon ng mga key ng sertipiko. Dapat mong ilipat ang mga key file sa Raspberry Pi. Dapat mo ring i-install ang AWSIoTPythonSDK sa Raspberry Pi. Pagkatapos ay pumunta sa direktoryo ng dk sa Raspberry Pi. Ginagamit mo ang file na Alexa Drone Control na ibinigay ko para sa pakikipag-usap sa IoT. Upang magamit ang file na ito Gumamit ako ng isang Shell Script para sa pagsisimula. Ipapakita ko ang code sa ibaba dahil hindi ko mai-upload ang file sa ilang kadahilanan. Kung ang programa ay hindi nakakakuha ng mga mensahe mula sa AWS IoT habang sinusubukan, huwag mag-alala! Maaaring ito ang aking kasalanan dahil ang Alexa Drone Control File ay maaaring hindi akma sa iyong Bagay. Kaya, upang ayusin ito, bumalik sa AWS IoT at pindutin ang alamin sa kaliwang panel. Sundin ang mga tagubilin at maaaring kailanganin mong i-restart. Pasensya na. Kapag ang iyong IoT ay nagsimulang magtrabaho kasama ang programa sa RasPi, maaari mong isama ang dronekit code mula sa ibinigay na file na Alexa Drone Control. Pagkatapos nito, gamitin ang Shell Script na ibinigay ko sa iyong mga sertipiko at Rest API Endpoint mula sa IoT.

# stop script sa erroret -e # Suriin upang makita kung mayroon ang root CA file, i-download kung hindi kung [! -f./root-CA.crt]; pagkatapos i-printf "\ n Pagda-download ng sertipiko ng AWS IoT Root CA mula sa AWS… / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # install AWS Device SDK for Python kung hindi pa naka-install kung [! -d./aws-iot-device-sdk-python]; pagkatapos printf "\ nInstalling AWS SDK… / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# run pub / sub sample na app gamit ang mga sertipiko na na-download nang package

printf "\ nRunning pub / sub sample application… / n" python dk / AlexaDroneControl.py --connect 127.0.0.1:14550 -e "Your IoT ARN" -R root-CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

Hindi ito gagana para sa inyong lahat dahil magkakaiba ang mga pangalan. Sa halip na ang mga key na ginamit ko ay palitan ang iyong mga key name kapag inilipat mo ang file. Siguraduhing lumabas dk bago ilipat ang file! Iyon lang dapat ang dapat mong gawin sa ngayon.

3. Pagbuo ng iyong Kasanayan sa Alexa

Ang hakbang na ito ay tila mas mahirap kaysa sa totoong ito. Una, dapat kaming mag-log in sa Alexa Developer console. Pagkatapos, pindutin lamang ang lumikha ng kasanayan. Kapag hiniling nito na pumili ng isang modelo para sa iyong kasanayan, pindutin lamang ang pasadyang. Kapag humiling ito na pumili ng isang pamamaraan, pindutin ang iyong probisyon. Maaari mo itong pangalanan kahit anong gusto mo. Walang kinakailangang template, kaya pumili ng simula mula sa simula. Susunod, pagkatapos likhain ang iyong kasanayan, dapat kang makarating sa screen ng tagabuo ng Kasanayan na may isang checklist sa kanan. Mula dito, maaari nating simulang buuin ang aming kasanayan. Una sa checklist ang pangalan ng paanyaya. Ito ang sasabihin mo kay Alexa na gamitin ang iyong kasanayan. Para sa akin, inilagay ko lamang ang aking pangalan sa pag-uusap bilang drone. Ngayon ay maaari na tayong pumunta sa aming mga hangarin, pagsasalita, at puwang. Dito, maaari kang gumawa ng mga utos para sa drone tulad ng umakyat sa 1 metro o pumunta pakanan o pababa. Ang mine ay gumagana lamang sa isang metro sa ngayon. Maaari mong i-click ang JSON Editor sa ilalim ng kaliwang panel. Maaari mong i-paste ang sumusunod na code dito.

Matapos i-paste ang code sa JSON Editor, maaari kang mag-click sa pangatlong hakbang ng checklist at bubuo ito para sa iyo ng modelo ng pakikipag-ugnayan. Sa hakbang na ito, magagawa ka sa ngayon. Maaari mong iwanang blangko ang endpoint slot sa ngayon!

Hakbang 4: Pagbuo ng Iyong Lambda Function

Ngayon, ang hakbang na ito ay isa na kakailanganin mong malaman para sa iyong sarili. Sasabihin ko sa iyo kung paano ito ikonekta sa Kasanayan sa Alexa, ngunit kakailanganin mong i-code ito sa iyong sarili. Kaya, pumunta muna sa AWS management console. Pagkatapos, pumunta sa Lambda. Maaari ka ring lumikha ng isang pagpapaandar na pinangalanan ito kahit anong gusto mo. Siguraduhin na akda ito mula sa simula at gawin ang runtime kung ano ang gusto mong wika sa programa. Ginamit ko ang Node.js. Upang idagdag ang Kasanayan sa Alexa, magdagdag ng isang gatilyo at piliin ang Alexa Skills Kit (ASK). Kopyahin ang iyong Lambda ARN at bumalik sa Alexa Skill. Ngayon, pumunta sa endpoint. Maaari mong i-paste ang iyong ARN, i-save, at bumuo ng isang bagong modelo. Pagkatapos, kunin ang Alexa Skill ID, at i-paste ito sa seksyon ng gatilyo kung saan tatanungin ka nito sa Lambda. Susunod, mag-scroll pababa sa Lambda at hanapin ang pangunahing mga setting at gawin ang timeout na 10 segundo. Ngayon, nasa sa iyo na alamin ang code. Para sa mga pahiwatig, maaari mong ang mga website sa ibaba.

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

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

at maaari mong gamitin ang file na na-attach ko, ngunit hindi ito kumpleto at hindi gagana.

/ ** * Kontrolin ang iyong APM / Pixhawk quadcopter gamit ang iyong boses, gamit ang Amazon Alexa, Lambda, 2lemetry MQTT.* / var awsIot = nangangailangan ('aws-iot-device-sdk'); var config = nangangailangan ("./ config"); var deviceName = "EchoDroneControl"; // ang aparatong ito talaga ang controller var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certipikasyon, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (bagong Petsa (). getTime ()), "rehiyon": "us-east-1", "debug": totoo}; var ctx = null; var client = null; // Ruta ang papasok na kahilingan batay sa uri (LaunchRequest, IntentRequest, atbp.) Ang katawang JSON ng kahilingan ay ibinigay sa parameter ng kaganapan. exports.handler = function (event, konteksto) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = konteksto; kung (event.session.application.applicationId! == app_id) {ctx.fail ("Di-wastong Application ID"); } client = awsIot.device (mqtt_config); client.on ("kumonekta", function () {console.log ("Nakakonekta sa AWS IoT"); // callback ();});

kung (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } kung (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } iba pa kung (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } iba pa kung (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx. magtagumpay (); }} mahuli (e) {console.log ("EXCEPTION sa handler:" + e); ctx.fail ("Exception:" + e); }}; / ** * Tinawag kapag nagsimula ang sesyon. * / pagpapaandar saSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Tinawag kapag inilunsad ng gumagamit ang kasanayan nang hindi tumutukoy kung ano ang gusto nila. * / function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // Ipadala sa paglulunsad ng iyong kasanayan. getWelcomeResponse (callback); } / ** * Tinawag kapag tinukoy ng gumagamit ang isang hangarin para sa kasanayang ito. * / function onIntent (intentRequest, session) {//, callback) {console.log ("onIntent requestId =" + intentRequest.requestId + ", sessionId =" + session.sessionId); var layunin = hangarinRequest.intent, hangarinName = hangarinRequest.intent.name; console.log ("REQUEST to string =" + JSON.stringify (intentRequest)); var callback = null; // Ipadala sa mga handler ng hangarin ng iyong kasanayan kung ("GoIntent" === intentName) {doGoIntent (hangarin, sesyon); } iba pa kung ("CommandIntent" === intentName) {doCommandIntent (hangarin, session); } iba pa kung ("TurnIntent" === intentName) {doTurnIntent (hangarin, session); } iba pa kung ("HelpIntent" === intentName) {getWelcomeResponse (); } iba pa {magtapon ng "Di-wastong hangarin"; }} / ** * Tinawag kapag natapos ng gumagamit ang session. * Hindi tinawag kapag bumalik ang kasanayan dapatEndSession = totoo. * / function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Magdagdag ng lohika ng paglilinis dito} // --------------- Mga pagpapaandar na kontrolin ang pag-uugali ng kasanayan -------------------- --- function getWelcomeResponse () {// Kung nais naming simulan ang sesyon upang magkaroon ng ilang mga katangian maaari naming idagdag ang mga narito. var sessionAttribut = {}; var cardTitle = "Maligayang pagdating"; var speechOutput = "Maligayang pagdating sa DRONE CONTROL."; // TODO: online ba o offline ang drone? Kung online, ARMED ba ito? var repromptText = "Handa na ang drone para sa utos."; var shouldEndSession = false; ctx.success (buildResponse (sessionAttribut, buildSpeechletResponse (cardTitle, speechOutput, repromptText, dapatEndSession))); } Hinahawakan ng} / ** * ang layunin ng GO. * / function doGoIntent (hangarin, session, callback) {// var cardTitle = "Drone GO…"; var repromptText = ""; var sessionAttribut = {}; var shouldEndSession = false; var speechOutput = ""; direksyon ng var = layunin.slots. Direction.value; var distansya = hangarin.slots. Distansya.value; var unit = layunin.slots. Unit.value; var validDirections = ["pasulong", "pasulong", "paatras", "pabalik", "kanan", "kaliwa", "pataas", "pababa", "tuwid", "maaga", "diretso sa unahan"]; var validUnits = ["paa", "talampakan", "metro", "metro", "bakuran", "yard"]; repromptText = "Sabihin mo sa akin kung gaano kalayo ang pupunta at sa anong direksyon."; var fail = false; // validate inputs if (! (parseInt (distansya)> = 1)) {speechOutput = "Hindi ko maintindihan ang distansya na nais mong maglakbay ako."; mabigo = totoo; ctx.success (buildResponse (sessionAttribut, buildSpeechletResponse (cardTitle, speechOutput, repromptText, dapatEndSession))); } kung (validDirections.indexOf (direksyon) == -1) {speechOutput = "Hindi ko maintindihan ang direksyon na nais mong maglakbay ako."; mabigo = totoo; ctx.success (buildResponse (sessionAttribut, buildSpeechletResponse (cardTitle, speechOutput, repromptText, dapatEndSession))); } kung (validUnits.indexOf (unit) == -1) {speechOutput = "Hindi ko maintindihan ang unit na nais mong maglakbay ako."; mabigo = totoo; ctx.success (buildResponse (sessionAttribut, buildSpeechletResponse (cardTitle, speechOutput, repromptText, dapatEndSession))); } kung (! mabibigo) {var cardTitle = "Drone going" + direksyon + "" + distansya + "" + unit; speechOutput = "Pupunta" + direksyon + "" + distansya + "" + unit; mqttPublish (hangarin, sessionAttribut, cardTitle, speechOutput, repromptTxt, dapatEndSession); }}

function doCommandIntent (hangarin, session, callback) {

// var cardTitle = "Drone CommAND…"; var repromptText = null; var sessionAttribut = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Sabihin mo sa akin kung ano ang utos para sa drone."; var task = layunin.slots. Task.value; var validTasks = ["launch", "land", "r. t. l.", "hold", "stay", "stop", "return to launch", "abort"]; kung (validTasks.indexOf (gawain) == -1) {speechOutput = "Hindi ko maintindihan ang utos."; ctx.success (buildResponse (sessionAttribut, buildSpeechletResponse (cardTitle, speechOutput, repromptText, dapatEndSession))); } iba pa {var cardTitle = "Pagpapatupad ng Drone command" + na gawain; speechOutput = "Pagpapatupad ng utos" + gawain; mqttPublish (hangarin, sessionAttribut, cardTitle, speechOutput, repromptTxt, dapatEndSession); }}

pagpapaandar doTurnIntent (hangarin, session, callback) {

// var cardTitle = "Drone Turn…"; var repromptText = null; var sessionAttribut = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "Sabihin mo sa akin kung paano mo nais na buksan ang drone."; direksyon ng var = layunin.slots. Direction.value; var validDirections = ["kanan", "kaliwa", "paligid"]; kung (validDirections.indexOf (direksyon) == -1) {speechOutput = "Hindi ko maintindihan ang direksyon ng pagliko."; ctx.success (buildResponse (sessionAttribut, buildSpeechletResponse (cardTitle, speechOutput, repromptText, dapatEndSession))); } iba pa {var cardTitle = "Drone pag-on" + direksyon; speechOutput = direksyon na "Pag-on" +; mqttPublish (hangarin, sessionAttribut, cardTitle, speechOutput, repromptTxt, dapatEndSession); }}

pagpapaandar mqttPublish (hangarin, sessionAttribut, cardTitle, speechOutput, repromptTxt, dapatEndSession)

{var strIntent = JSON.stringify (hangarin); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z / drone / echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on ("close", (function () {console.log ("MQTT CLIENT CLOSE - iniisip na tapos na ito, matagumpay."););})); client.on ("error", (function (err, ipinagkaloob) {console.log ("MQTT CLIENT ERROR !!" + err);})); }

// ------------- Mga tumutulong na bumuo ng lahat ng mga tugon ----------------

function buildSpeechletResponse (pamagat, output, repromptText, dapatEndSession) {return {outputSpeech: {type: "PlainText", text: output}, card: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, dapatEndSession: shouldEndSession}} function buildResponse (sessionAttributo, speechletResponse) {return {bersyon: "1.0", sessionAttribut: sessionAttribut, tugon: speechletResponse}}

Inirerekumendang: