תוכן עניינים:

Drone Raspberry Pi נשלט על ידי Alexa באמצעות IoT ו- AWS: 6 שלבים (עם תמונות)
Drone Raspberry Pi נשלט על ידי Alexa באמצעות IoT ו- AWS: 6 שלבים (עם תמונות)

וִידֵאוֹ: Drone Raspberry Pi נשלט על ידי Alexa באמצעות IoT ו- AWS: 6 שלבים (עם תמונות)

וִידֵאוֹ: Drone Raspberry Pi נשלט על ידי Alexa באמצעות IoT ו- AWS: 6 שלבים (עם תמונות)
וִידֵאוֹ: Бесшумное zigbee реле в подрозетник без нулевой линии, особенности монтажа, установка конденсатора 2024, יולי
Anonim
Image
Image
Drone Raspberry Pi מבוקר של Alexa עם IoT ו- AWS
Drone Raspberry Pi מבוקר של Alexa עם IoT ו- AWS
Drone Raspberry Pi מבוקר של Alexa עם IoT ו- AWS
Drone Raspberry Pi מבוקר של Alexa עם IoT ו- AWS

היי! שמי ארמאן. אני ילד בן 13 ממסצ'וסטס. הדרכה זו מראה, כפי שניתן להסיק מהכותרת, כיצד לבנות מזל"ט פטל פטל. אב טיפוס זה מדגים כיצד מזל"טים מתפתחים וגם עד כמה הם עשויים לשחק בעתיד. אני בהחלט יכול לראות את עצמי מתעורר בעוד 10 שנים ומבקש ממזל"ט שיכין לי ארוחת בוקר. המזל"ט משתמש באמזון אלקסה, שירותי אינטרנט של אמזון, IoT (Internet of Things), והכי חשוב ב- Raspberry Pi להפעלה. הוא נועד להדגים וליידע על רחפנים וכיצד הם משתפרים מדי יום. אני מקווה שאתה מצליח ותלמד על מזל"טים בתהליך. בהצלחה ותודה שקראת. -ארמאנית

אספקה

לבניית אב הטיפוס ישנם צרכי חומרה ותוכנה שונים. השתמשתי במדריך מקוון של The Drone Dojo לבניית המזל"ט ושילבתי את הטכנולוגיות המפורטות. עבור המזל"ט תוכל למצוא את רשימת החלקים ממש כאן:

רשימת חלקי מזל ט

דרישות תוכנה:

  • שירותי האינטרנט של אמזון
  • מחשב נייד
  • תוכנת Mission Planer
  • בלנה עטר
  • כרטיס MicroSD עם קובץ Raspbian נמצא כאן
  • אמזון אלקסה, פיזית או וירטואלית

שלב 1: איסוף והבנת חלקים

איסוף והבנת חלקים
איסוף והבנת חלקים

כל חלק שמוזכר ברשימת האספקה הוא הכרחי, וכך גם הבנה ברורה של כל חלק. אתה יכול למצוא את החלקים באינטרנט ולאחר שנאספו, המשך לקרוא. רשימת השמעה של The Drone Dojo להבנה מלאה של החלקים ניתן למצוא כאן. הסבר של 4 דקות בערוץ היוטיוב שלי ניתן למצוא כאן. כשמדובר במזל טים החלקים היחידים, למרות מה שרוב האנשים חושבים, אינם רק מנועים ומדחפים. להלן המטרות הבסיסיות של כל חלק.

ה- Raspberry Pi עם ה- Emlid Navio2

חלק זה הוא פחות או יותר מעבד מרכזי והנקודה העיקרית של המזל"ט. ה- Raspberry Pi פועל כמו המעבד של מחשב ששולח פקודות ל- Navio2 לביצוע באמצעות PWM (אותות אפנון רוחב הדופק) לחלקים אחרים של המזל"ט.

2. ה- ESC (בקרי מהירות אלקטרוניים)

חלקים צהובים אלה נמצאים מתחת למסגרת. הם 4 מחוברים ל- Navio, אחד לכל מנוע. עם קבלת אותות PWM, הם מסובבים את המנועים ומתחילים בטיסה.

3. מנועים

מנועים לא צריכים יותר מדי הסברים כי אתה כנראה מכיר אותם. הם מסתובבים ומסובבים את המדחפים ליצירת דחף.

4. מדחפים

מדחפים יוצרים דחף למזל ט לעוף. הם מסתובבים באותו כיוון כמו המנועים להרים את הרכב.

5. מודול הסוללה וההספק

סוללת LiPo מניעה את כל המזל ט דרך המסגרת באמצעות מודול ההספק. הוא נותן בערך 15-20 דקות טיסה ופועל כמקור כוח.

6. ה- GPS

ה- GPS מתקשר עם לוויינים כדי לקבוע את מיקום המל ט. הוא קובע גובה, קו רוחב ואורך. זה יכול לשמש עבור Geofencing, נקודות ציון וגם מעבר למיקומים או כיוונים מסוימים.

7. מודול הטלמטריה

מודול הטלמטריה מחבר את המזל ט שלנו לתחנת בקרה קרקעית, במקרה שלנו מתכנן משימות, למעקב.

8. בקר ומודול RC יחד עם מקודד PPM

בקר RC משתמש ברדיו כדי להעביר אותות ופקודות למודול RC כדי להטיס את המזל ט באופן ידני. מקודד PPM מתרגם את האותות הללו לעיבוד וביצוע של Navio + RPI.

9. המסגרת

מסגרת אדומה ולבנה זו משמשת כבסיס או כפלטפורמה לחלקים האחרים למיקום. המסגרת אווירודינמית וקלה, ולכן מושלמת לבניית המל טים שלנו.

עכשיו עם הכרת כל חלק, סוף סוף נוכל לבנות את המזל ט! הלאה לשלב הבא!

שלב 2: הרכבת המזל"ט

הרכבת מזל
הרכבת מזל

שלב זה הוא כנראה הקשה ביותר מבחינת המאמץ הגופני. אני ממליץ לקבל עוד אדם לעזרה או לנסות להשתמש ביד העוזרת ברשימת החלקים. התהליך ארוך מכדי להדגים כאן, לכן אביא קישור נוסף בו השתמשתי על ידי ה- Drone Dojo.

בניית מזל ט פטל פטל

שוב, מכיוון שלא אפרט יותר מדי, רק אדגיש את היסודות של כל שלב.

1. ארגן את הציוד שלך - אסוף את החומרים שלנו וודא שהם נגישים בקלות

2. תכנן את הבנייה שלך - ארגן את החלקים שלך על המסגרת כדי ליצור שרטוט של מה שתבנה

3. עבודת הלחמה - זו העבודה שקצת קשה לעשות לבד. עליך להלחם את מחברי כדורי הזהב המגיעים עם המנועים ל- ESC. לאחר מכן, עליך לקחת את החלק התחתון של המסגרת ולהלחם את ה- ESC למסגרת התחתונה או ללוח הפצת החשמל. מודול הסוללה יומלח גם ללוח חלוקת החשמל

4. הגדרת המסגרת - לאחר מכן עליך להבריג את החלק העליון של המסגרת יחד עם הזרועות. לאחר מכן תוכל לחבר את ה- Raspberry Pi למעלה בכל דרך שתרצה. (השתמשתי בסרט דביק). אז אתה יכול לאבטח את ה- ESC לזרועות בעזרת רוכסן. עכשיו כמעט סיימנו.

5. כריכת בקר RC למקלט - נסה לעקוב אחר ההוראות ברשימת ההשמעה למעלה כדי לאגד את בקר RC באמצעות ESC.

6. גימור חלקים על מסגרת - סרט דביק או רצועה על מודול הטלמטריה על המסגרת. הדבק את מקודד ה- PPM גם לזרוע. כעת תוכל לחבר את מקודד ה- ESC ו- PPM אל Navio.

7. הרכבה GPS + סוללה - הרכיב את מכשיר ה- GPS בעזרת הברגים והחלקים השונים. באמצעות רוכסן, חבר את ה- GPS למסגרת. לא בהכרח השתמשתי ב- GPS Mount בגלל השבריריות שלו, אבל זה תלוי בך. לאחר מכן, תוכל להכניס את הסוללה בין ה- Power Dist. גלשן. קשרתי והדבקתי את מודול הכוח גם למסגרת. עכשיו החומרה שלך די מוגדרת. עכשיו לחלק שחיכינו לו!

8. התקנת המדחפים !!! - ניתן להדק את המדחפים באמצעות התרשים המוזכר ברשימת ההשמעה. לאחר מכן תוכל לחבר את ה- ESC למנועים ולבסוף סיימנו לבנות את המזל ט.

התוכנה הבאה, אז הלאה!

שלב 3: הגדרת Raspberry Pi ו- GCS (מתכנן המשימה)

הגדרת Raspberry Pi ו- GCS (מתכנן המשימה)
הגדרת Raspberry Pi ו- GCS (מתכנן המשימה)

שוב, תוכל למצוא הוראות מפורטות יותר ברשימת ההשמעה מהשלב האחרון. עם זאת, סביר להניח שאתה יודע כיצד להתקין את ה- RasPi. אבל הפעם, אנחנו עושים את זה בלי ראש. השתמש ב- Balena Etcher כדי לצרוב את מערכת ההפעלה מאתר Navio OS לכרטיס ה- MicroSD. כשהוא מחובר למחשב שלך, היכנס לתורם wpa באמצעות פנקס ++. לאחר מכן, הזן את ה- ssid והסיסמה עבור ה- Raspberry Pi כדי להתחבר ל- WiFi שלך. לאחר מכן עליך להוסיף קובץ בשם SSH. זה יכול להיות דרך שורת הפקודה או שיטה אחרת. עכשיו אנחנו יכולים SSH. אתה יכול להשתמש בשורת הפקודה או במרק. השתמשתי בשורת הפקודה והקלדתי "ssh pi@navio" כדי להתחבר במקרה שלי, או שתוכל למצוא את כתובת ה- IP ו- ssh כך. בעת החיבור, השתמש בסרטון זה כדי להגדיר ולהגדיר את Navio. כדי להגדיר את הטלמטריה עליך לערוך תחילה את ה- Raspberry Pi. עקוב אחר זה כדי לבצע את העריכה ולנסות להתחבר למתכנן המשימה. אם הטלמטריה לא עובדת, תוכל לבטל את העריכה ולהתחבר באמצעות חיבור UDB על ידי הזנת ה- IPS שלך (תחנת בקרת קרקע כגון מחשב נייד) של GCS. לאחר החיבור למתכנן המשימה, תוכל להשתמש באשף ההתקנה כדי לכייל את כל חלקי המזל"ט. אם אתה צריך עזרה עיין שוב ברשימת ההשמעה. בדרך כלל, בכל פעם שאתה מגדיר, כמעט תמיד יש שגיאה. פתרון בעיות הוא אחד החלקים הגדולים ביותר בפרויקט זה. אני לא ממש יכול לעזור לך שם מכיוון שאני לא מודע לשגיאות שלך, אך ניתן לתקן את רוב השגיאות בעזרת האינטרנט. אחרי שהכל מוכן, אז המזל"ט מוכן לעוף! אתה יכול להגדיר את בקר ה- RC ואת מצבי הטיסה שלך ב- Mission Planner. נסה להחזיק את המקל השמאלי בצד ימין למטה למשך חמש שניות כדי לחמש את המזל"ט. אני לא ממליץ לטוס בלי להסתכל על הדרכה כי המזל"ט שביר מאוד וקל לשבירה. בשבילי, בפעם הראשונה שהטסתי אותו, שברתי את הר ה- GPS וכמה מדחפים. אם אינך דורש שליטה קולית, תוכל לעצור כאן. כדי ללמוד על AWS ותכנות המל"ט המשך!

שלב 4: תכנות המל"ט לעוף בעזרת פייתון

תכנות המזל
תכנות המזל

לפני שנכנס ל- AWS, ראשית עלינו להבין כיצד לתכנת את המזל ט לעוף. לאחר ההתקנה הראשונית, שילוב שליטה קולית לא אמור להיות קשה מדי. הדבר הראשון שאנו יכולים לנסות להבין זאת הוא ביצוע תוכנית המראה ויבשה פשוטה. לאחר הגדרת ה- Raspberry Pi, נוכל להיכנס אליו שוב. אתה יכול להסתכל שוב על רשימת ההשמעה או לעקוב אחר ההוראות שלי.

1. ראשית בואו להוריד את קוד המקור של ArduPilot בספרייה ב- Raspberry Pi

mkdir src

לאחר מכן, קבל את הקבצים מ- GitHub באמצעות שיבוט git

git clone -b Copter -3.6.11

כעת, בואו ניווט אל /src /ardupilot

cd src

תקליטור ardupilot

כעת, בואו לאתחל את קבצי המקור

עדכון תת מודול git --init --recursive

2. לאחר מכן, עלינו לאסוף את הקושחה ב- Raspberry Pi

הקפד לנווט אל/src/ardupilot/עם cd לפני שתעשה את השלבים הבאים

לאחר מכן כדי להגדיר במיוחד את Navio באמצעות

./waf configure --board = navio2

אז אתה יכול לאסוף עם

./ waf -פח יעדים/arducopter

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 היא התוכנה שבה נשתמש כדי לתכנת את המזל"ט לעוף. כדי להבין חלק מהקוד תוכל למצוא את התיעוד כאן. ראשית עלינו להתקין את החבילה על המזל"ט שלנו לפני כתיבת סקריפט.

נוכל להתקין את חבילת הפיתון באמצעות

pip install dronekit == 2.9.1

זו אולי הגרסה החדשה ביותר ואולי לא, אך היא זו בה השתמשתי כדי שאוכל לעזור בפתרון בעיות.

כדי לבדוק אם מותקן, אנו יכולים לבצע א

הקפאת פיפ | grep dronekit

עכשיו אנחנו סוף סוף מוכנים ליצור סקריפט פייתון ראשון

5. ההמראה_ל_ארץ.פי

אַזהָרָה! אני מציע לבסס הבנה בסיסית של פייתון, כך שתוכל ללמוד ולהבין את הקוד. אם אתה רוצה לכתוב את התוכנית בעצמך עקוב אחר סרטון זה.

## ראשית אל תיצור ספרייה לאחסון הקוד הזה

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: שימוש באמזון אלקסה ובשירותי האינטרנט של אמזון לשילוב שליטה קולית

שימוש באמזון אלקסה ושירותי האינטרנט של אמזון לשילוב שליטה קולית
שימוש באמזון אלקסה ושירותי האינטרנט של אמזון לשילוב שליטה קולית
שימוש באמזון אלקסה ושירותי האינטרנט של אמזון לשילוב שליטה קולית
שימוש באמזון אלקסה ושירותי האינטרנט של אמזון לשילוב שליטה קולית

שלב זה הוא אחד מהפחות מתועדים. המשמעות היא שזה יהיה הכי קשה לפתור בעיות. רק ההגעה לעבודה לקחה לי כחודש, אולי יותר. הדבר החשוב ביותר כאן הוא להתאזר בסבלנות. תכונה זו, אם היא מיושמת בחיים האמיתיים, יכולה לשנות את החיים. אתה יכול פשוט להגיד לאלקסה שתשיג לך את המצרכים במקום ללכת לעצמך. דמיין ש! אז בלי להתבטא יותר בואו ניכנס לזה!

1. רישום ה- Raspberry Pi כדבר ב- AWS IoT

כדי להשתמש ב- IoT (Internet of Things), טוב שאנחנו צריכים דבר. אז עלינו להיכנס למסוף AWS כדי להשתמש תחילה ב- AWS IoT. לאחר מכן עבור אל IoT Core. כשאתה שם, עליך ללחוץ על ניהול ולאחר מכן ליצור דבר. לאחר הוספת שם, לצורך חיבור, אנו זקוקים לאישור. אני ממליץ ללחוץ על הסמכה בלחיצה אחת. לאחר צפייה במסך האישור, הקפד להוריד כל מפתח כולל ה- CA הבסיסי. אז אתה יכול ללכת ולסיים את יצירת הדבר. בשלב הבא עלינו ליצור מדיניות. צא חזרה אל Core IoT. לאחר מכן לחץ על אבטחה ולחץ על מדיניות. לאחר מכן לחץ על צור מדיניות. לאחר מכן תוכל ליצור שם ולהוסיף משאבים. תחת פעולה, הקלד iot * והקלד * תחת משאב והקש על אפשר להשפיע. לאחר מכן חזור לדבר שלך ועבור לתעודה שלך. ברגע שאתה כאן, לחץ על מדיניות. לאחר מכן תוכל לצרף את המדיניות שלך לגבי הדבר והכל מוכן!

2. הגדרת קוד ב- Raspberry Pi ואינטראקציה עם IoT

עבור חלק זה, תצטרך לקוח SFTP (השתמשתי ב- WinSCP) להעברת קבצים. בעת החיבור ל- Raspberry Pi שלנו, נצטרך להחזיק את מפתחות האישור בהישג יד. עליך להעביר את קבצי המפתח ל- Raspberry Pi. עליך גם להתקין את AWSIoTPythonSDK על פיס הפטל. לאחר מכן היכנס לספריית dk ב- Raspberry Pi. אתה משתמש בקובץ Alexa Drone Control שנתתי לתקשורת עם IoT. כדי להשתמש בקובץ זה השתמשתי ב- Script Script להפעלה. אני אראה את הקוד למטה מכיוון שאני לא יכול להעלות את הקובץ מסיבה כלשהי. אם התוכנית לא אוספת הודעות מ- AWS IoT בזמן הבדיקה, אל תדאג! זו עשויה להיות אשמתי מכיוון שקובץ בקרת מזל ט אלקסה עשוי שלא להתאים לדבר שלך. אז, כדי לתקן את זה, חזור ל- AWS IoT ולחץ על הלמידה בלוח השמאלי. עקוב אחר ההוראות וייתכן שתצטרך להפעיל מחדש. מצטער על זה. ברגע שה- IoT שלך מתחיל לעבוד עם התוכנית ב- RasPi, תוכל לשלב את קוד ה- dronekit מקובץ בקרת השליטה במכשירי Alexa שנתתי. לאחר מכן, השתמש ב- Script Script שנתתי עם האישורים שלך ונקודת הקצה של Rest API מ- IoT.

# עצור סקריפט על ערכת השגיאות -e # בדוק אם קיים קובץ CA שורש, הורד אם לא אם [! -f./root-CA.crt]; לאחר מכן הדפס "\ n הורד תעודת CA Root של AWS IoT Root מ- AWS … / n" סלסול https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # התקן AWK Device SDK עבור Python אם עדיין לא מותקן אם [! -d./aws-iot-device-sdk-python]; לאחר מכן printf "\ n התקנת AWS SDK … / n" שיבוט git https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python setup pyon.py התקן popd fi

# הפעל יישום לדוגמא של פאב/משנה באמצעות אישורים שהורדו בחבילה

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 שתפעיל את המיומנות שלך. בשבילי, פשוט שמתי את שם הפנייה שלי כמל"ט. עכשיו נוכל ללכת לכוונות, לאמירות ולמשבצות שלנו. כאן תוכל לבצע פקודות עבור המזל"ט כגון לעלות מטר אחד או לרדת ימינה או למטה. שלי באמת עובד עם מטר אחד בינתיים. תוכל ללחוץ על עורך JSON בתחתית החלונית השמאלית. לאחר מכן תוכל להדביק אליו את הקוד הבא.

לאחר הדבקת הקוד בעורך JSON, תוכל ללחוץ על השלב השלישי ברשימת הבדיקות והוא יבנה עבורך את מודל האינטראקציה שלך. עם שלב זה, תסיים לעת עתה. אתה יכול להשאיר את חריץ נקודת הסיום ריק לעת עתה!

שלב 4: בניית פונקציית ה- Lambda שלך

כעת, שלב זה הוא שלב שתצטרך להבין בעצמך. אני אגיד לך איך לחבר אותו ל- Alexa Skill, אבל תצטרך לקודד אותו בעצמך. לכן, עבור תחילה לקונסולת הניהול של AWS. לאחר מכן, לך לממבה. לאחר מכן תוכל ליצור פונקציה בשם שלה מה שאתה רוצה. הקפד לכתוב אותו מאפס ולהפוך את זמן הריצה לכל שפת תכנות שתרצה. השתמשתי ב- Node.js. כדי להוסיף את Alexa Skill, הוסף טריגר ובחר Alexa Skills Kit (ASK). העתק את ה- Lambda ARN שלך וחזור ליכולת Alexa. עכשיו, עבור לנקודת הסיום. אתה יכול להדביק את ה- ARN שלך, לשמור ולבנות דגם חדש. לאחר מכן, קח את מזהה המיומנות של Alexa והדבק אותו בקטע ההדק שבו הוא מבקש ממך על הלמדה. לאחר מכן, גלול מטה על הלמבדה ומצא את ההגדרות הבסיסיות והגביל את הזמן הקצוב ל- 10 שניות. כעת, עליך להחליט על הקוד. לקבלת רמזים, אתה יכול באתרים שלהלן.

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

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

ואתה יכול להשתמש בקובץ שצירפתי, אבל הוא לא שלם ולא יעבוד.

/ *** שלוט בקוטר ה- APM / Pixhawk שלך באמצעות הקול שלך, באמצעות אמזון אלקסה, למבדה, 2 לימטריה MQTT.*/ var awsIot = require ('aws-iot-device-sdk'); var config = require ("./ 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 client = null; // נתב את הבקשה הנכנסת בהתאם לסוג (LaunchRequest, IntentRequest וכו ') גוף JSON של הבקשה מסופק בפרמטר האירוע. exports.handler = function (אירוע, הקשר) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = הקשר; if (event.session.application.applicationId! == app_id) {ctx.fail ("מזהה יישום לא חוקי"); } לקוח = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("מחובר ל- AWS IoT"); // callback ();});

if (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } if (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } אחרת אם (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } אחרת אם (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx.succeed (); }} catch (e) {console.log ("יוצא מן הכלל במנהל:" + ה); ctx.fail ("חריגה:" + ה); }}; /*** התקשר עם תחילת ההפעלה. */ function onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* מתקשר כאשר המשתמש משיק את המיומנות מבלי לציין מה הוא רוצה. */ function onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // לשלוח להשקה של המיומנות שלך. getWelcomeResponse (התקשרות חוזרת); } /*** מתקשר כאשר המשתמש מציין כוונה למיומנות זו. */function onIntent (intentionRequest, session) {//, callback) {console.log ("onIntent requestId =" + intentionRequest.requestId + ", sessionId =" + session.sessionId); var intention = intentionRequest.intent, intentionName = intentionRequest.intent.name; console.log ("REQUEST to string =" + JSON.stringify (intentionRequest)); var callback = null; // לשלוח למפעלי הכוונות של המיומנות שלך אם ("GoIntent" === intentionName) {doGoIntent (intention, session); } אחרת אם ("CommandIntent" === intentionName) {doCommandIntent (intention, session); } אחרת אם ("TurnIntent" === intentionName) {doTurnIntent (intention, session); } אחר אם ("HelpIntent" === intentionName) {getWelcomeResponse (); } else {throw "כוונה לא חוקית"; }} /*** התקשר כשהמשתמש מסיים את ההפעלה. * אינו נקרא כאשר המיומנות מחזירה shouldEndSession = true. */ function onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // הוסף כאן לוגיקת ניקיון} // --------------- פונקציות השולטות בהתנהגות המיומנות -------------------- --- פונקציה getWelcomeResponse () {// אם נרצה לאתחל את ההפעלה כדי שיהיו לו כמה תכונות נוכל להוסיף אותן לכאן. var sessionAttributes = {}; var cardTitle = "ברוכים הבאים"; var speechOutput = "ברוכים הבאים לבקרת DRONE."; // TODO: האם מזל"ט מקוון או לא מקוון? אם הוא מקוון, הוא חמוש? var repromptText = "מזל"ט מוכן לפקודה."; var shouldEndSession = false; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** מטפל בכוונת GO. */ function doGoIntent (intention, session, callback) {// var cardTitle = "מזל"ט GO …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; var direction = intention.slots. Direction.value; var distance = intention.slots. Distance.value; var unit = intention.slots. Unit.value; var validDirections = ["קדימה", "קדימה", "אחורה", "אחורה", "ימין", "שמאל", "למעלה", "למטה", "ישר", "קדימה", "ישר קדימה"]; var validUnits = ["רגל", "רגל", "מטר", "מטר", "חצר", "יארד"]; repromptText = "ספר לי כמה רחוק ללכת ובאיזה כיוון."; var fail = false; // לאמת קלט אם (! (parseInt (מרחק)> = 1)) {speechOutput = "לא הצלחתי להבין את המרחק שאתה רוצה שאני אסע."; נכשל = נכון; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "לא הצלחתי להבין את הכיוון שאתה רוצה שאסע."; נכשל = נכון; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (יחידה) == -1) {speechOutput = "לא הצלחתי להבין את היחידה שאתה רוצה שאטייל."; נכשל = נכון; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } אם (! נכשל) {var cardTitle = "מזל"ט נוסע" + כיוון + "" + מרחק + "" + יחידה; speechOutput = "הולך" + כיוון + "" + מרחק + "" + יחידה; mqttPublish (intention, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

פונקציה doCommandIntent (כוונה, הפעלה, התקשרות חוזרת) {

// var cardTitle = "פקודה מזל"ט …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "ספר לי מה הפקודה למזל"ט."; var task = intention.slots. Task.value; var validTasks = ["השקה", "ארץ", "רט"ל", "החזק", "הישאר", "עצור", "חזור לשיגור", "הפסק"]; if (validTasks.indexOf (task) == -1) {speechOutput = "לא הצלחתי להבין את הפקודה."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "ביצוע פקודת מזל"ט" + משימה; speechOutput = "ביצוע פקודה" + משימה; mqttPublish (intention, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

פונקציה doTurnIntent (כוונה, הפעלה, התקשרות חוזרת) {

// var cardTitle = "סיבוב מזל"ט …"; var repromptText = null; var sessionAttributes = {}; var shouldEndSession = false; var speechOutput = ""; repromptText = "ספר לי כיצד אתה רוצה להפוך את המזל"ט."; var direction = intention.slots. Direction.value; var validDirections = ["ימין", "שמאל", "מסביב"]; if (validDirections.indexOf (direction) == -1) {speechOutput = "לא הצלחתי להבין את כיוון הפנייה."; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } else {var cardTitle = "מזל"ט מסתובב" + כיוון; speechOutput = "סיבוב" + כיוון; mqttPublish (intention, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

function mqttPublish (intention, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (intention); 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 - חושב שזה נעשה, בהצלחה."); ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession)));})); client.on ("שגיאה", (פונקציה (שגיאה, ניתן) {console.log ("MQTT CLIENT ERROR !!" + err);})); }

// --------------- עוזרים שבונים את כל התגובות -----------------------

function buildSpeechletResponse (title, output, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, כרטיס: {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}}

מוּמלָץ: