Բովանդակություն:

Alexa Voice Controled Raspberry Pi Drone IoT- ով և AWS- ով. 6 քայլ (նկարներով)
Alexa Voice Controled Raspberry Pi Drone IoT- ով և AWS- ով. 6 քայլ (նկարներով)

Video: Alexa Voice Controled Raspberry Pi Drone IoT- ով և AWS- ով. 6 քայլ (նկարներով)

Video: Alexa Voice Controled Raspberry Pi Drone IoT- ով և AWS- ով. 6 քայլ (նկարներով)
Video: How to use 2 channel relay to control AC and DC loads in Arduino 2024, Հուլիսի
Anonim
Image
Image
Alexa Voice- ի կողմից վերահսկվող Raspberry Pi անօդաչու թռչող սարքը IoT- ով և AWS- ով
Alexa Voice- ի կողմից վերահսկվող Raspberry Pi անօդաչու թռչող սարքը IoT- ով և AWS- ով
Alexa Voice- ի կողմից վերահսկվող Raspberry Pi դրոն IoT- ով և AWS- ով
Alexa Voice- ի կողմից վերահսկվող Raspberry Pi դրոն IoT- ով և AWS- ով

Ողջու՜յն! Իմ անունը Արման է: Ես 13-ամյա տղա եմ Մասաչուսեթսից: Այս ձեռնարկը, ինչպես կարող եք եզրակացնել տիտղոսից, ցույց է տալիս, թե ինչպես կարելի է կառուցել Raspberry Pi Drone: Այս նախատիպը ցույց է տալիս, թե ինչպես են անօդաչու թռչող սարքերը զարգանում և նաև, թե որքան մեծ դեր կունենան դրանք ապագայում: Ես հաստատ տեսնում եմ, որ ես արթնանում եմ 10 տարի հետո և խնդրում եմ անօդաչու թռչող սարք ինձ համար նախաճաշել: Անօդաչու սարքն օգտագործում է Amazon Alexa- ն, Amazon Web Services- ը, IoT- ը (իրերի ինտերնետը) և ամենակարևորը Raspberry Pi- ն աշխատելու համար: Այն կոչված է ցուցադրելու և տեղեկացնելու անօդաչու թռչող սարքերի և այն մասին, թե ինչպես են դրանք բարելավվում ամեն օր: Հուսով եմ, որ դուք հաջողակ եք և սովորում եք անօդաչու թռչող սարքերի մասին: Հաջողություն և շնորհակալություն կարդալու համար: -Արմաան

Պարագաներ

Նախատիպը կառուցելու համար կան տարբեր ապարատային և ծրագրային կարիքներ: Անօդաչու թռչող սարքը կառուցելու համար ես օգտագործեցի The Drone Dojo- ի առցանց ձեռնարկը և ինտեգրեցի թվարկված տեխնոլոգիաները: Անօդաչուի համար դուք կարող եք գտնել մասերի ցուցակը հենց այստեղ ՝

Անօդաչու թռչող սարքերի մասերի ցուցակ

Softwareրագրային ապահովման պահանջներ.

  • Amazon վեբ ծառայություններ
  • Նոութբուք
  • Առաքելություն պլանավորող ծրագրակազմ
  • Բալենա Էթչեր
  • MicroSD քարտ Raspbian ֆայլով ՝ այստեղ
  • Amazon Alexa, ֆիզիկական կամ վիրտուալ

Քայլ 1. Մասերի հավաքում և հասկացում

Մասերի հավաքում և հասկացում
Մասերի հավաքում և հասկացում

Մատակարարման ցանկում նշված յուրաքանչյուր մաս անհրաժեշտ է, և յուրաքանչյուր մասի հստակ պատկերացում: Դուք կարող եք գտնել մասերը առցանց և հավաքվելուց հետո շարունակեք կարդալ: Մասերի ամբողջական ընկալման համար The Drone Dojo- ի երգացանկը կարելի է գտնել այստեղ: Իմ youtube- ի ալիքի 4 րոպեանոց բացատրությունը կարող եք գտնել այստեղ: Ինչ վերաբերում է անօդաչու թռչող սարքերին, միակ մասերը, չնայած մարդկանց մեծամասնության կարծիքով, միայն շարժիչներն ու շարժիչները չեն: Ստորև ներկայացված են յուրաքանչյուր մասի հիմնական նպատակները:

The Raspberry Pi with Emlid Navio2

Այս մասը բավականին կենտրոնական պրոցեսոր է և անօդաչու թռչող սարքի հիմնական կետը: Raspberry Pi- ն գործում է որպես համակարգչի պրոցեսոր, որը հրամաններ է ուղարկում Navio2- ին ՝ անօդաչուի այլ մասերին PWM (Pulse Width Modulation Signals) միջոցով կատարելու համար:

2. ESC's (Էլեկտրոնային արագության կարգավորիչներ)

Այս դեղին մասերը գտնվում են շրջանակի տակ: Նրանք 4 -ով միացված են Navio- ին, մեկը յուրաքանչյուր շարժիչի համար: Ստանալով PWM ազդանշանները, նրանք պտտում են շարժիչները և սկսում թռիչքը:

3. Շարժիչներ

Շարժիչները շատ բացատրությունների կարիք չունեն, քանի որ հավանաբար ծանոթ եք նրանց: Նրանք պտտվում և պտտվում են պտուտակները `առաջ մղում ստեղծելու համար:

4. Պտուտակներ

Պտուտակներ ստեղծում են անօդաչուի թռիչքի համար մղիչ ուժ: Նրանք պտտվում են նույն ուղղությամբ, ինչ շարժիչները `մեքենան բարձրացնելու համար:

5. Մարտկոցի և էներգիայի մոդուլ

LiPo մարտկոցը ամբողջ անօդաչուն սնուցում է շրջանակի միջոցով ՝ օգտագործելով էներգիայի մոդուլը: Այն տալիս է մոտ 15-20 րոպե թռիչքի ժամանակ և հանդես է գալիս որպես էներգիայի աղբյուր:

6. GPS- ը

GPS- ը հաղորդակցվում է արբանյակների հետ ՝ անօդաչուի դիրքը որոշելու համար: Այն որոշում է բարձրությունը, լայնությունը և երկայնությունը: Այն կարող է օգտագործվել երկրաչափության, ճանապարհային կետերի, ինչպես նաև որոշակի դիրքերի կամ ուղղությունների տեղափոխման համար:

7. Հեռաչափության մոդուլ

Հեռաչափության մոդուլը մեր անօդաչու թռչող սարքը միացնում է ցամաքային կառավարման կայանին, մեր դեպքում `Առաքելության պլանավորողին, որը պետք է վերահսկվի:

8. RC վերահսկիչն ու մոդուլը ՝ PPM կոդավորիչի հետ միասին

RC Controller- ը ռադիոյով ազդանշաններ և հրամաններ փոխանցելու է RC մոդուլին ՝ անօդաչու սարքը ձեռքով փորձարկելու համար: PPM կոդավորիչը թարգմանում է այս ազդանշանները Navio + RPI- ի համար `մշակելու և գործարկելու համար:

9. Շրջանակը

Այս կարմիր և սպիտակ շրջանակը գործում է որպես հիմք կամ հարթակ մյուս մասերի տեղադրման համար: Շրջանակն աերոդինամիկ է և թեթև, հետևաբար կատարյալ է մեր անօդաչու թռչող սարքի կառուցման համար:

Այժմ, իմանալով յուրաքանչյուր մասի մասին, մենք վերջապես կարող ենք անօդաչու սարք կառուցել: Շարունակելով հաջորդ քայլին:

Քայլ 2. Անօդաչու թռչող սարքի հավաքում

Անօդաչու թռչող սարքի հավաքում
Անօդաչու թռչող սարքի հավաքում

Այս քայլը թերևս ամենաբարդն է ֆիզիկական ջանքերի առումով: Ես խորհուրդ եմ տալիս մեկ այլ անձի օգնության համար կամ փորձել օգտագործել օգնության ձեռքը մասերի ցանկում: Գործընթացը չափազանց երկար է այստեղ ցուցադրելու համար, ուստի ես կտրամադրեմ մեկ այլ հղում, որն օգտագործել եմ The Drone Dojo- ի կողմից:

Raspberry Pi Drone- ի կառուցում

Կրկին, քանի որ ես շատ չեմ մանրամասնի, ես պարզապես կարևորեմ յուրաքանչյուր քայլի հիմունքները:

1. Կազմակերպեք ձեր պաշարները - Հավաքեք մեր նյութերը և համոզվեք, որ դրանք հեշտ հասանելի են

2. Պլանավորեք ձեր կառուցումը

3. Sոդման աշխատանք - Սա այն աշխատանքն է, որը մի փոքր դժվար է անել միայնակ: Շարժիչներով եկող ոսկե փամփուշտի միակցիչները պետք է կպցնել ESC- ին: Հաջորդը, դուք պետք է վերցնեք շրջանակի ներքևի մասը և ESC- ները կպցրեք ներքևի շրջանակին կամ էներգիայի բաշխման տախտակին: Մարտկոցի մոդուլը կմիացվի նաև էներգիայի բաշխման տախտակին

4. Շրջանակի կարգավորում - Դուք այնուհետև թևերի հետ միասին պետք է պտուտակեք շրջանակի վերին հատվածը: Այնուհետև կարող եք ամրացնել Raspberry Pi- ն ցանկացած ձևի վերևում: (Ես օգտագործեցի սոսնձող ժապավեն): Այնուհետև կարող եք ամրացնել ESC- ն զենքի վրա `ամրակապով: Այժմ մենք գրեթե ավարտված ենք:

5. RC Controller- ի ընդունիչին կապելը - Փորձեք հետևել վերը նշված երգացանկի հրահանգներին `RC Controller- ը ESC- ի միջոցով կապելու համար:

6. Շրջանակի մասերի վերջնականացում - Կպչուն ժապավեն կամ ժապավեն հեռաչափության մոդուլի վրա `դեպի շրջանակ: Կպչեք նաև PPM կոդավորիչը ձեռքին: Այժմ կարող եք ESC- ի և PPM կոդավորիչը միացնել Navio- ին:

7. GPS տեղադրում + մարտկոց - հավաքեք GPS սարքը տարբեր պտուտակներով և կտորներով: Օգտագործելով zip- կապեր, GPS- ը կցեք Շրջանակին: Ես պարտադիր չէ, որ օգտագործում եմ GPS սարքը ՝ դրա փխրունության պատճառով, բայց դա ձեզն է: Հաջորդը, դուք կարող եք մարտկոցը տեղադրել Power Dist- ի միջև: Տախտակ: Ես ամրացրի և կպչեցի հոսանքի մոդուլին շրջանակին նույնպես: Այժմ ձեր սարքավորումները բավականին կարգավորված են: Հիմա այն հատվածին, որին մենք սպասում էինք:

8. Պտուտակների տեղադրում !!! - Դուք կարող եք սեղմել պտուտակները ՝ օգտագործելով երգացանկում նշված գծապատկերը: Այնուհետև կարող եք ESC- ները միացնել շարժիչներին, և մենք վերջապես ավարտեցինք անօդաչուի պատրաստումը:

Հաջորդը ծրագրային ապահովումն է, այսպես շարունակ:

Քայլ 3: Raspberry Pi- ի և GCS- ի (Առաքելության պլանավորող) կազմաձևում

Raspberry Pi- ի և GCS- ի (Առաքելության պլանավորող) կազմաձևում
Raspberry Pi- ի և GCS- ի (Առաքելության պլանավորող) կազմաձևում

Կրկին, դուք կարող եք ավելի մանրամասն հրահանգներ գտնել երգացանկում վերջին քայլից: Այնուամենայնիվ, հավանաբար գիտեք, թե ինչպես տեղադրել RasPi- ն: Բայց այս անգամ մենք դա անում ենք անգլուխ: Օգտագործեք Balena Etcher ՝ OS- ն Navio OS կայքից MicroSD քարտի մեջ այրելու համար: Մինչ այն միացված է ձեր համակարգչին, մուտք գործեք wpa խնդրագիր ՝ օգտագործելով նոթատետր ++: Դրանից հետո մուտքագրեք ssid- ը և Raspberry Pi- ի գաղտնաբառը ձեր WiFi- ին միանալու համար: Այնուհետեւ դուք պետք է ավելացնեք մի ֆայլ, որը կոչվում է SSH: Դա կարող է լինել Հրամանի տողի կամ այլ մեթոդի միջոցով: Այժմ մենք կարող ենք SSH: Դուք կարող եք օգտագործել հրամանի տողը կամ tyեփամածիկը: Ես գործի եմ դրել հրամանի տողը և մուտքագրել «ssh pi@navio» ՝ իմ դեպքում միանալու համար, կամ կարող եք գտնել IP հասցեն և ssh այդ կերպ: Միանալուց հետո օգտագործեք այս տեսանյութը ՝ Navio- ն կարգավորելու և կազմաձևելու համար: Հեռաչափությունը կարգավորելու համար նախ պետք է խմբագրել Raspberry Pi- ը: Հետևեք սա խմբագրում կատարելու համար և փորձեք միանալ Mission Planner- ին: Եթե հեռաչափությունը չի գործում, կարող եք հետարկել խմբագրումը և միանալ UDB կապի միջոցով ՝ մուտքագրելով ձեր GCS (վերգետնյա կառավարման կայան, օրինակ ՝ նոութբուքը) IP հասցեն: Mission Planner- ին միանալուց հետո կարող եք օգտագործել կարգաբերման հրաշագործը ՝ անօդաչուի բոլոր մասերը չափաբերելու համար: Եթե օգնության կարիք ունեք, կրկին հղեք տեսացանկին: Սովորաբար, երբ դուք կարգավորում եք, գրեթե միշտ սխալ կա: Խնդիրների վերացումը այս նախագծի ամենամեծ մասերից մեկն է: Ես իսկապես չեմ կարող ձեզ օգնել այնտեղ, քանի որ տեղյակ չեմ ձեր սխալների մասին, բայց սխալների մեծ մասը կարելի է շտկել ինտերնետի օգնությամբ: Ամեն ինչ պատրաստ լինելուց հետո անօդաչուն պատրաստ է թռիչքի: Դուք կարող եք կարգավորել ձեր RC վերահսկիչը և թռիչքի ռեժիմները Mission Planner- ում: Փորձեք հինգ վայրկյան պահել ձախ ձողը աջից ներքև ՝ անօդաչու թռչող սարքը զինելու համար: Ես խորհուրդ չեմ տալիս թռչել առանց ձեռնարկին նայելու, քանի որ դրոնը շատ փխրուն է և հեշտ է կոտրվել: Ինձ համար, առաջին անգամ, երբ թռիչք կատարեցի այն, կոտրեցի GPS- ի սարքը և որոշ պտուտակներ: Եթե ձեզ ձայնային կառավարում չի պահանջվում, ապա կարող եք կանգ առնել այստեղ: AWS- ի և ծրագրավորման մասին անօդաչու սարքը շարունակելու համար շարունակեք:

Քայլ 4. Անօդաչու թռչող ծրագրավորում Python- ի հետ թռչելու համար

Անօդաչու թռչելու ծրագրավորում Python- ի հետ
Անօդաչու թռչելու ծրագրավորում Python- ի հետ

Նախքան AWS- ին մուտք գործելը, մենք նախ պետք է հասկանանք, թե ինչպես ծրագրավորել անօդաչու թռչելը: Նախնական կարգավորումից հետո ձայնային կառավարման ինտեգրումը չպետք է չափազանց դժվար լինի: Առաջին բանը, որ մենք կարող ենք փորձել հասկանալ, պարզ թռիչք և վայրէջք կատարող ծրագիր է: Raspberry Pi- ի տեղադրումից հետո մենք կարող ենք նորից SSH ներդնել դրա մեջ: Դուք կարող եք կրկին նայել երգացանկին կամ հետևել իմ հրահանգներին:

1. Նախ եկեք ներբեռնենք ArduPilot- ի աղբյուրի ծածկագիրը Raspberry Pi- ի գրացուցակում

mkdir src

Այնուհետև ֆայլերը ձեռք բերեք GitHub- ից ՝ օգտագործելով git clone

git clone -b Copter -3.6.11

Այժմ, եկեք նավարկենք դեպի /src /ardupilot

cd src

cd ardupilot

Հիմա եկեք նախաստորագրենք աղբյուրի ֆայլերը

git ենթամոդուլի թարմացում --init -հետադարձ

2. Հաջորդը, մենք պետք է կազմաձևենք որոնվածը Raspberry Pi- ի վրա

Համոզվեք, որ նավարկեք դեպի/src/ardupilot/cd- ով ՝ հաջորդ քայլերն անելուց առաջ

Այնուհետև հատուկ ձևափոխել Navio- ն ՝ օգտագործելով

./waf կազմաձևել -տախտակ = navio2

Այնուհետև կարող եք կազմել

./waf -թիրախային աղբարկղ/արկոդոպորտ

3. Այժմ մենք կարող ենք տեղադրել աղբյուրի կոդը Navio- ին

Նախ թույլ է տալիս նավարկել դեպի ճիշտ գրացուցակ:

cd/etc/systemd/system

Այնուհետեւ խմբագրեք ֆայլը

sudo vi arducopter.service

Այնտեղ, որտեղ գրված է ExecStart, տեղադրեք հետևյալը ՝ արդեն եղածի փոխարեն

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

Այժմ, ardupilot- ի սկզբնական կոդը գործի դնելու համար, կարող ենք օգտագործել

sudo systemctl daemon-reload

Այնուհետև կարող ենք վերսկսել

sudo systemctl վերագործարկել arducopter

Վերջին քայլով մենք վերջապես ավարտեցինք ArduPilot- ի տեղադրումը մեր անօդաչու թռչող սարքի վրա

4. DroneKit- ի տեղադրում

DroneKit- ը այն ծրագրաշարն է, որը մենք կօգտագործենք անօդաչուի թռիչքը ծրագրավորելու համար: Որոշ ծածկագրեր հասկանալու համար կարող եք գտնել փաստաթղթերը այստեղ: Նախ մենք պետք է փաթեթը տեղադրենք մեր անօդաչուի վրա, նախքան սցենար գրել:

Մենք կարող ենք տեղադրել python փաթեթը հետևյալով

pip install dronekit == 2.9.1

Սա կարող է լինել, կամ կարող է լինել ոչ թե վերջին տարբերակը, այլ այն, ինչ ես օգտագործել եմ, որպեսզի կարողանամ օգնել անսարքությունների վերացմանը:

Տեղադրված լինելը ստուգելու համար մենք կարող ենք անել ա

pip սառեցնել | grep dronekit

Այժմ մենք վերջապես պատրաստ ենք պատրաստել մեր առաջին պիթոնի սցենարը

5. takeoff_and_land.py

WԳՈՇԱՈՄ Ես առաջարկում եմ հաստատել python- ի հիմնական ըմբռնումը, որպեսզի կարողանաք սովորել և հասկանալ ծածկագիրը: Եթե ցանկանում եք ինքներդ գրել ծրագիրը, հետևեք այս տեսանյութին:

## Նախ մի ստեղծեք գրացուցակ ՝ այս կոդը պահելու համար

cd dk ## Եթե ցանկանում եք դա անել ինքներդ ձեզ, ապա օգտագործեք vi takeoff_and_land.py ## ծրագիր ստեղծելու համար

Հակառակ դեպքում, կարող եք դիտել կամ օգտագործել կցված ֆայլը և օգտագործել ֆայլերի փոխանցման արձանագրություն: Մենք կարող ենք փորձել այս ծրագիրը հետագայում: Նախ պարզաբանելու համար, որ դա պիթոնի ֆայլ է, որը մենք պետք է օգտագործենք

chmod +x takeoff_and_land.py

Այնուհետև գործարկելու համար օգտագործեք հետևյալ ծածկագիրը

python takeoff_and_land.py -միացրեք 127.0.0.1:14550

Առաջին անգամ ինձ մոտ էլ չստացվեց: Եթե կա հղման ընդմիջում, ապա մի անհանգստացեք, որ ինչ -որ բան կարող եք անել: Բացեք ևս մեկ հուշում և ssh: Կարող եք փորձել տեղադրել ինչ -որ բան, որը կոչվում է mavproxy և փորձել գործարկել այն: Դրանից հետո դուք կարող եք երկուսն էլ միաժամանակ գործարկել: Սա պետք է օգնի միացնել անօդաչու թռչող սարքը: Երբ դա արվի, ես մարտահրավեր ունեմ ձեզ համար: Փորձեք պարզել, թե ինչ է անում մյուս ծրագիրը (set_velocity_body.py) և ինչպես այն գործարկել: Եթե դա անում եք, լավ աշխատանք:

6. Առաջ!

Այժմ մենք կարող ենք օգտագործել այս գիտելիքները ՝ մեր անօդաչու թռչող սարքը ձայնը կառավարելու համար: Alexa անօդաչու թռչող սարքի կառավարման սարքն օգտագործում է այս գործառույթներից շատերը և ավելին: Հաջողություն և առաջ:

Քայլ 5. Amazon Alexa- ի և Amazon վեբ ծառայությունների օգտագործումը ձայնային կառավարման ինտեգրման համար

Ձայնային կառավարման ինտեգրման համար Amazon Alexa- ի և Amazon վեբ ծառայությունների օգտագործումը
Ձայնային կառավարման ինտեգրման համար Amazon Alexa- ի և Amazon վեբ ծառայությունների օգտագործումը
Ձայնային կառավարման ինտեգրման համար Amazon Alexa- ի և Amazon վեբ ծառայությունների օգտագործումը
Ձայնային կառավարման ինտեգրման համար Amazon Alexa- ի և Amazon վեբ ծառայությունների օգտագործումը

Այս քայլը քիչ փաստաթղթավորված քայլերից է: Սա նշանակում է, որ ամենադժվարը կլինի լուծել խնդիրը: Հենց գործի անցնելը տևեց ինձ մոտ մեկ ամիս, գուցե ավելի: Այստեղ ամենակարեւորը համբերատար լինելն է: Այս հատկությունը, եթե կիրառվի իրական կյանքում, կարող է փոխել կյանքը: Դուք կարող եք պարզապես ասել Alexa- ին, որ ձեր գնած մթերքները ձեռք բերի ձեր փոխարեն: Պատկերացրու, որ! Այնպես որ, առանց ավելորդ երկարաձգման, եկեք մտնենք դրա մեջ:

1. Raspberry Pi- ի գրանցումը որպես բան AWS IoT- ում

IoT (Իրերի ինտերնետ) օգտագործելու համար մեզ լավ բան է պետք: Այսպիսով, մենք պետք է մուտք գործենք AWS վահանակ ՝ նախ AWS IoT- ն օգտագործելու համար: Այնուհետեւ գնացեք IoT Core: Այնտեղ գտնվելուց հետո պետք է սեղմել Կառավարել, այնուհետև ստեղծել իր: Անուն ավելացնելուց հետո, միացման համար մեզ անհրաժեշտ է վկայական: Ես խորհուրդ կտայի սեղմել Մեկ կտտոցով սերտիֆիկատը: Այնուհետև վկայագրի էկրանը տեսնելուց հետո համոզվեք, որ ներբեռնում եք յուրաքանչյուր բանալին, ներառյալ արմատային CA- ն: Այնուհետև կարող եք գնալ և ավարտել բանի ստեղծումը: Հաջորդը մենք պետք է քաղաքականություն ստեղծենք: Վերադարձեք IoT Core: Այնուհետև կտտացրեք անվտանգ և կտտացրեք քաղաքականությանը: Այնուհետև կտտացրեք Ստեղծել քաղաքականություն: Դրանից հետո կարող եք ստեղծել անուն և ավելացնել ռեսուրսներ: Գործողության ընթացքում մուտքագրեք iot * և մուտքագրեք * ռեսուրսի տակ և սեղմեք թույլատրեք ազդեցություն: Հետո վերադառնաք ձեր իրին և գնացեք ձեր վկայականին: Այստեղ հայտնվելուց հետո կտտացրեք քաղաքականությանը: Այնուհետև կարող եք կցել ձեր քաղաքականությունը իրի համար և ամեն ինչ պատրաստ է:

2. Ազնվամորու Pi- ի վերաբերյալ օրենսգրքի ստեղծում և IoT- ի հետ փոխազդեցություն

Այս մասի համար ձեզ հարկավոր կլինի SFTP հաճախորդ (ես օգտագործել եմ WinSCP) ֆայլերի փոխանցման համար: Մեր Raspberry Pi- ին միանալուց հետո մեզ հարկավոր կլինի ունենալ վկայագրի բանալիները: Դուք պետք է հիմնական ֆայլերը փոխանցեք Raspberry Pi- ին: Դուք նաև պետք է տեղադրեք AWSIoTPythonSDK- ը Raspberry Pi- ի վրա: Այնուհետեւ մտեք Raspberry Pi- ի dk գրացուցակը: Դուք օգտագործում եք Alexa Drone Control ֆայլը, որը ես տվել եմ IoT- ի հետ հաղորդակցվելու համար: Այս ֆայլն օգտագործելու համար ես գործի դրեցի Shell Script: Ես ցույց կտամ ստորև նշված կոդը, քանի որ ինչ -ինչ պատճառներով չեմ կարող ֆայլը վերբեռնել: Եթե ծրագիրը փորձարկման ընթացքում AWS IoT- ից հաղորդագրություններ չի ընդունում, մի անհանգստացեք: Սա կարող է լինել իմ մեղքը, քանի որ Alexa Drone Control ֆայլը կարող է չհամապատասխանել ձեր Իրին: Այսպիսով, այն շտկելու համար վերադարձեք AWS IoT և ձախ վահանակի վրա սեղմեք սովորել: Հետևեք հրահանգներին և գուցե ստիպված լինեք վերագործարկել: Ցավում եմ. Երբ ձեր IoT- ն սկսի աշխատել RasPi- ի ծրագրի հետ, կարող եք ինտեգրվել dronekit ծածկագիրը Alexa Drone Control ֆայլից, որը ես տվել եմ: Դրանից հետո օգտագործեք Shell Script- ը, որը ես տվել եմ ձեր վկայականներով և IoT- ից Rest API Endpoint:

# stop script on erroret -e # Ստուգեք ՝ արդյոք կա արմատական CA ֆայլ, ներբեռնեք, եթե ոչ [! -f./root-CA.crt]; ապա printf "\ n Ներբեռնեք AWS IoT Root CA վկայագիրը AWS- ից … / n" գանգրացրեք https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # տեղադրեք AWS Device SDK- ը Python- ի համար, եթե այն արդեն տեղադրված չէ եթե [! -դ./aws-iot-device-sdk-python]; ապա printf "\ nInstalling AWS SDK … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py տեղադրել popd fi

# գործարկել pub/sub ընտրանքային ծրագիրը `փաթեթում ներբեռնված վկայագրերի միջոցով

printf "\ n Գործարկվող պանդոկ/ենթածրագրի նմուշ… / n" python dk/AlexaDroneControl.py -միացեք 127.0.0.1:14550 -e "Your IoT ARN" -r root -CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

Բոլորիդ մոտ սա չի աշխատի, քանի որ անունները տարբեր են: Իմ օգտագործած բանալիների փոխարեն ֆայլը փոխանցելիս փոխարինեք ձեր բանալիների անուններով: Համոզվեք, որ դուրս եք գալիս dk ֆայլը փոխանցելուց առաջ: Դա պետք է լինի այն ամենը, ինչ դուք պետք է անեք այս պահին:

3. Կառուցեք ձեր Alexa հմտությունը

Այս քայլը թվում է շատ ավելի դժվար, քան իրականում է: Նախ, մենք պետք է մուտք գործենք Alexa Developer վահանակ: Այնուհետև պարզապես հարվածեք Ստեղծեք հմտություն: Երբ այն խնդրում է մոդել ընտրել ձեր հմտության համար, պարզապես սեղմեք custom: Երբ այն խնդրում է մեթոդ ընտրել, սեղմեք դրույթը ձեր սեփականը: Դուք կարող եք այն անվանել այն, ինչ ցանկանում եք: Կաղապար չի պահանջվում, այնպես որ ընտրեք սկսել զրոյից: Հաջորդը, ձեր հմտությունը ստեղծելուց հետո դուք պետք է հայտնվեք Skill builder- ի էկրանին ՝ աջ ցուցակի ցուցակով: Այստեղից մենք կարող ենք սկսել զարգացնել մեր հմտությունները: Ստուգման ցուցակում առաջինը կոչման անունն է: Սա այն է, ինչ դուք կասեք Alexa- ին ՝ վկայակոչելու ձեր հմտությունը: Ինձ համար ես պարզապես իմ անվանումն անվանեցի որպես անօդաչու թռչող սարք: Այժմ մենք կարող ենք գնալ մեր մտադրություններին, արտահայտություններին և անցքերին: Այստեղ դուք կարող եք հրամաններ կատարել անօդաչուի համար, ինչպիսիք են ՝ բարձրանալ 1 մետր կամ գնալ աջ կամ ներքև: Իմն առայժմ իսկապես աշխատում է միայն մեկ մետրով: Դուք կարող եք սեղմել JSON խմբագրիչը ձախ վահանակի ներքևում: Այնուհետև կարող եք տեղադրել հետևյալ կոդը դրան:

JSON խմբագրիչին կոդը տեղադրելուց հետո կարող եք սեղմել ստուգաթերթի երրորդ քայլը, և այն ձեզ համար կկառուցի ձեր փոխազդեցության մոդելը: Այս քայլով դուք առայժմ կավարտվեք: Վերջնական կետի անցքը կարող եք դատարկ թողնել առայժմ:

Քայլ 4. Կառուցեք ձեր Lambda գործառույթը

Այժմ, այս քայլը մեկն է, որը դուք ինքներդ պետք է պարզեք: Ես ձեզ կասեմ, թե ինչպես միացնել այն Alexa հմտությանը, բայց ինքներդ պետք է այն կոդավորեք: Այսպիսով, նախ գնացեք AWS կառավարման վահանակ: Այնուհետև գնացեք Լամբդա: Այնուհետև կարող եք ստեղծել գործառույթ ՝ այն անվանելով այն, ինչ ցանկանում եք: Համոզվեք, որ այն զրոյից գրեք և գործարկեք այն, ինչ ծրագրավորման լեզու եք ուզում: Ես օգտագործել եմ Node.js. Alexa հմտություն ավելացնելու համար ավելացրեք ձգան և ընտրեք Alexa Skills Kit (ASK): Պատճենեք ձեր Lambda ARN- ը և վերադառնաք Alexa հմտություն: Հիմա, անցեք վերջնակետին: Կարող եք տեղադրել ձեր ARN- ը, պահպանել և կառուցել նոր մոդել: Այնուհետև վերցրեք Alexa Skill ID- ն և տեղադրեք այն ձգանման հատվածում, որտեղ այն ձեզ հարցնում է Lambda- ում: Հաջորդը, ոլորեք ներքև Lambda- ով և գտեք հիմնական պարամետրերը և ընդմիջումը կատարեք 10 վայրկյան: Այժմ, ձեզանից է կախված ՝ պարզել ծածկագիրը: Ակնարկների համար կարող եք ստորև նշված կայքերը:

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

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

և կարող եք օգտագործել իմ կցած ֆայլը, բայց այն թերի է և չի աշխատի:

/ *** Վերահսկեք ձեր APM / Pixhawk քառանկյունը ձեր ձայնով ՝ օգտագործելով Amazon Alexa, Lambda, 2lemetry MQTT:*/ var awsIot = պահանջում ('aws-iot-device-sdk'); var config = պահանջում ("./ config"); var deviceName = "EchoDroneControl"; // այս սարքն իսկապես վերահսկիչն է var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (նոր Ամսաթիվ (). getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var հաճախորդ = null; // Ուղղորդեք մուտքի հարցումը ըստ տիպի (LaunchRequest, IntentRequest և այլն): Հարցման JSON մարմինը տրամադրվում է իրադարձության պարամետրում: export.handler = գործառույթը (իրադարձություն, համատեքստ) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = համատեքստ; if (event.session.application.applicationId! == app_id) {ctx.fail («Դիմումի անվավեր ID»); } հաճախորդ = awsIot.device (mqtt_config); client.on («միացնել», գործառույթ () {console.log («Միացված է AWS IoT»); // հետադարձ կապ ();});

եթե (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.quest, event.session); } else if (event.request.type === "IntentRequest") {onIntent (event.quest, event.session); } else if (event.request.type === "SessionEndedRequest") {onSessionEnded (event.quest, event.session); ctx. հաջողել (); }} catch (e) {console.log ("ԲԱCEԱՌՈԹՅՈՆ վարիչում." + e); ctx.fail («Բացառություն.» + ե); }}; /*** ledանգահարվում է, երբ նիստը սկսվում է: */ function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* Ledանգահարվում է, երբ օգտագործողը գործարկում է հմտությունը ՝ առանց նշելու, թե ինչ է ուզում: */ function onLaunch (launRequest, session, callback) {console.log ("onLaunch requestId =" + launRequest.requestId + ", sessionId =" + session.sessionId); // Ուղարկեք ձեր հմտության մեկնարկը: getWelcomeResponse (հետադարձ); } /*** Calանգահարվում է, երբ օգտվողը նշում է այս հմտության նպատակը: */գործառույթը onIntent (purposeRequest, session) {//, callback) {console.log ("onIntent requestId =" + purposeRequest.requestId + ", sessionId =" + session.sessionId); var մտադրություն = purposeRequest.intent, purposeName = մտադրությունRequest.intent.name; console.log ("REQUEST to string =" + JSON.stringify (purposeRequest)); var հետադարձ = null; // Ուղարկեք ձեր հմտությունների նպատակների մշակողներին, եթե («GoIntent» === purposeName) {doGoIntent (մտադրություն, նստաշրջան); } else if ("CommandIntent" === purposeName) {doCommandIntent (մտադրություն, նստաշրջան); } else if ("TurnIntent" === purposeName) {doTurnIntent (մտադրություն, նստաշրջան); } else if ("HelpIntent" === purposeName) {getWelcomeResponse (); } else {նետել «Անվավեր մտադրություն»; }} /*** ledանգահարվում է, երբ օգտագործողը ավարտում է նիստը: * Չի կանչվում, երբ հմտությունը վերադարձնում է shouldEndSession = true: */ function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // Ավելացնել մաքրման տրամաբանություն այստեղ} // --------------- Գործառույթներ, որոնք վերահսկում են հմտության վարքագիծը -------------------- --- գործառույթը getWelcomeResponse () {// Եթե ցանկանում էինք նիստը նախաստորագրել որոշ հատկանիշներ ունենալու համար, կարող էինք դրանք ավելացնել այստեղ: var sessionAttributes = {}; var cardTitle = "Բարի գալուստ"; var speechOutput = "Բարի գալուստ DRONE CONTROL."; // TODO. Անօդաչու թռչող սարքն առցանց է, թե՞ անցանց: Եթե առցանց է, արդյո՞ք այն Mինված է: var repromptText = "Անօդաչու թռչող սարքը պատրաստ է հրամանատարության:"; var shouldEndSession = կեղծ; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** կարգավորում է GO մտադրությունը: */ գործառույթը doGoIntent (մտադրություն, նստաշրջան, հետադարձ) {// var cardTitle = "Անօդաչու թռչող սարք …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = կեղծ; var speechOutput = ""; var ուղղություն = purpose.slots. Direction.value; var հեռավորություն = purpose.slots. Distance.value; var միավոր = intent.slots. Unit.value; var validDirections = [«առաջ», «առաջ», «հետ», «հետ», «աջ», «ձախ», «վեր», «ներքև», «ուղիղ», «առաջ», «ուղիղ առաջ»]; var validUnits = [«ոտք», «ոտքեր», «մետր», «մետր», «բակ», «բակ»]; repromptText = "Ասա ինձ, թե որքան հեռու գնալ և ինչ ուղղությամբ:"; var fail = կեղծ; // վավերացնել մուտքերը, եթե (! (parseInt (հեռավորություն)> = 1)) {speechOutput = "Ես չհասկացա այն տարածությունը, որով ցանկանում եք, որ ես անցնեմ:"; ձախողել = ճշմարիտ; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (ուղղություն) == -1) {speechOutput = "Չհասկացա այն ուղղությունը, որով ցանկանում եք, որ ես գնամ:"; ձախողել = ճշմարիտ; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "Չհասկացա այն միավորը, որով ցանկանում եք, որ ես ճանապարհորդեմ:"; ձախողել = ճշմարիտ; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } եթե (! ձախողվի) {var cardTitle = "Անօդաչու թռչող սարքը գնում է" + ուղղություն + "" + հեռավորություն "" " + միավոր; speechOutput = "Գնում" + ուղղություն + "" + հեռավորություն "" + միավոր; mqttՀրապարակել (մտադրություն, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

գործառույթ doCommandIntent (մտադրություն, նստաշրջան, հետադարձ) {

// var cardTitle = "Անօդաչու թռչող սարքի հրաման …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = կեղծ; var speechOutput = ""; repromptText = "Ասա ինձ, թե որն է անօդաչուի հրամանը:"; var task = purpose.slots. Task.value; var validTasks = [«մեկնարկ», «հող», «r. t. l.», «պահել», «մնալ», «կանգ առնել», «վերադառնալ մեկնարկին», «վիժեցնել»]; if (validTasks.indexOf (խնդիր) == -1) {speechOutput = "Ես չհասկացա հրամանը:"; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Անօդաչու թռչող սարքի հրաման կատարող" + առաջադրանք; speechOutput = "Հրամանի կատարում" + առաջադրանք; mqttՀրապարակել (մտադրություն, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

գործառույթ doTurnIntent (մտադրություն, նստաշրջան, հետադարձ) {

// var cardTitle = "Անօդաչու թռչող սարքի շրջադարձ …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = կեղծ; var speechOutput = ""; repromptText = "Ասա ինձ, թե ինչպես ես ուզում շրջել անօդաչուն"; var ուղղություն = purpose.slots. Direction.value; var validDirections = ["աջ", "ձախ", "շուրջ"]; if (validDirections.indexOf (ուղղություն) == -1) {speechOutput = "Ես չկարողացա հասկանալ շրջադարձի ուղղությունը:"; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "Անօդաչու թռչող սարք" + ուղղություն; speechOutput = "Շրջվել" + ուղղություն; mqttՀրապարակել (մտադրություն, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

mqttՀրապարակել (մտադրություն, նստաշրջանԱրտանիշներ, քարտի վերնագիր, խոսքի ելք, վերստին տեքստ, պետք

{var strIntent = JSON.stringify (մտադրություն); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z/drone/echo", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); client.on («փակել», (գործառույթ () {console.log («MQTT CLIENT CLOSE - կարծում է, որ դա արվել է, հաջողությամբ»); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on («սխալ», (գործառույթը (սխալ, տրված է) {console.log («MQTT CLIENT ERROR !!» + սխալ);})); }

// --------------- Օգնականներ, որոնք կազմում են բոլոր պատասխանները -----------------------

function buildSpeechletResponse (վերնագիր, ելք, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, card: {type: "Simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} function buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

Խորհուրդ ենք տալիս: