فهرست مطالب:

Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Step (with Pictures)
Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Step (with Pictures)

تصویری: Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Step (with Pictures)

تصویری: Alexa Voice Controlled Raspberry Pi Drone With IoT and AWS: 6 Step (with Pictures)
تصویری: Programming Voice-controlled IoT Applications with Alexa and Raspberry Pi 2024, جولای
Anonim
Image
Image
Alexa Voice Control Raspberry Pi Drone with IoT و AWS
Alexa Voice Control Raspberry Pi Drone with IoT و AWS
Alexa Voice Control Raspberry Pi Drone with IoT و AWS
Alexa Voice Control Raspberry Pi Drone with IoT و AWS

سلام! اسم من آرمان است. من یک پسر 13 ساله از ماساچوست هستم. این آموزش ، همانطور که از عنوان آن می توانید استنباط کنید ، نحوه ساخت Raspberry Pi Drone را نشان می دهد. این نمونه اولیه نشان می دهد که چگونه هواپیماهای بدون سرنشین در حال تکامل هستند و همچنین نقش مهمی که ممکن است در آینده ایفا کنند. من قطعاً می توانم خودم را در 10 سال دیگر بیدار کنم و از یک هواپیمای بدون سرنشین بخواهم که برای من صبحانه بخورد. این پهپاد از آمازون الکسا ، خدمات وب آمازون ، اینترنت اشیا (اینترنت اشیا) و از همه مهمتر رزبری پای برای اجرا استفاده می کند. هدف آن نمایش و اطلاع رسانی درباره پهپادها و نحوه پیشرفت آنها در هر روز است. امیدوارم شما موفق باشید و در این زمینه با پهپادها آشنا شوید. موفق باشید و ممنون که خواندید. -ارمان

تدارکات

برای ساخت نمونه اولیه نیازهای سخت افزاری و نرم افزاری مختلفی وجود دارد. من از یک آموزش آنلاین توسط The Drone Dojo برای ساخت هواپیمای بدون سرنشین استفاده کردم و فناوری های ذکر شده را یکپارچه کردم. برای هواپیمای بدون سرنشین می توانید لیست قطعات را در اینجا پیدا کنید:

لیست قطعات هواپیماهای بدون سرنشین

نرم افزار مورد نیاز:

  • خدمات وب آمازون
  • یک لپ تاپ
  • نرم افزار برنامه ریزی ماموریت
  • بالنا اچر
  • کارت MicroSD با فایل Raspbian در اینجا یافت می شود
  • آمازون الکسا ، فیزیکی یا مجازی

مرحله 1: جمع آوری و درک قسمت ها

جمع آوری و درک قسمتها
جمع آوری و درک قسمتها

هر قسمتی که در لیست عرضه ذکر شده است ضروری است ، و همچنین درک واضح از هر قسمت نیز ضروری است. می توانید قطعات را به صورت آنلاین پیدا کنید و پس از جمع آوری ، به خواندن ادامه دهید. لیست پخش توسط The Drone Dojo برای درک کامل قطعات را می توانید در اینجا پیدا کنید. توضیح 4 دقیقه ای در کانال یوتیوب من در اینجا یافت می شود. وقتی صحبت از هواپیماهای بدون سرنشین می شود ، تنها قطعات ، با وجود آنچه اکثر مردم فکر می کنند ، فقط موتورها و ملخ ها نیستند. در زیر اهداف اساسی هر قسمت آمده است.

رزبری پای با Emlid Navio2

این قسمت تقریباً یک پردازنده مرکزی و نقطه اصلی هواپیمای بدون سرنشین است. Raspberry Pi مانند پردازنده رایانه ای عمل می کند که دستوراتی را به Navio2 ارسال می کند تا از طریق PWM (سیگنال های تعدیل پهنای پالس) به سایر قسمت های هواپیمای بدون سرنشین اجرا شود.

2. ESC's (کنترل کننده های الکترونیکی سرعت)

این قسمت های زرد رنگ در زیر قاب یافت می شوند. آنها 4 عدد به Navio وصل شده اند که برای هر موتور یک عدد است. با دریافت سیگنال های PWM ، موتورها را می چرخانند و پرواز را آغاز می کنند.

3. موتورها

موتورها نیازی به توضیحات زیاد ندارند زیرا احتمالاً شما با آنها آشنا هستید. آنها ملخ ها را می چرخانند و می چرخانند تا رانش ایجاد شود.

4. ملخ

پروانه ها نیروی محرکه ای برای پرواز پهپاد ایجاد می کنند. آنها در جهت موتورها حرکت می کنند تا وسیله نقلیه را بلند کنند.

5. ماژول باتری و قدرت

باتری LiPo با استفاده از ماژول قدرت ، تمام هواپیمای بدون سرنشین را از طریق قاب تغذیه می کند. این پرواز حدود 15-20 دقیقه زمان می دهد و به عنوان منبع تغذیه عمل می کند.

6. GPS

GPS برای تعیین موقعیت پهپاد با ماهواره ها ارتباط برقرار می کند. ارتفاع ، عرض جغرافیایی و طول جغرافیایی را تعیین می کند. می توان از آن برای جغرافیایی ، نقاط مسیر و همچنین حرکت به موقعیت ها یا جهت های خاص استفاده کرد.

7. ماژول تله متری

ماژول تله متری هواپیمای بدون سرنشین ما را به ایستگاه کنترل زمینی متصل می کند ، در مورد ما Mission Planner ، برای نظارت.

8. کنترلر RC و ماژول به همراه رمزگذار PPM

کنترلر RC از رادیو برای انتقال سیگنال ها و دستورات به ماژول RC برای هدایت دستی هواپیمای بدون سرنشین استفاده می کند. رمزگذار PPM این سیگنال ها را برای پردازش و اجرای Navio + RPI ترجمه می کند.

9. قاب

این قاب قرمز و سفید به عنوان پایه یا سکویی برای قسمت های دیگر قرار می گیرد. فریم آیرودینامیکی و سبک وزن است ، بنابراین برای ساخت هواپیمای بدون سرنشین ما مناسب است.

در حال حاضر با آگاهی از هر بخش ، ما می توانیم سرانجام هواپیمای بدون سرنشین را بسازیم! به مرحله بعد بروید!

مرحله 2: مونتاژ هواپیمای بدون سرنشین

مونتاژ هواپیمای بدون سرنشین
مونتاژ هواپیمای بدون سرنشین

این مرحله از نظر تلاش بدنی احتمالاً سخت ترین است. توصیه می کنم از شخص دیگری برای کمک استفاده کنید یا سعی کنید از دست کمک در لیست قطعات استفاده کنید. این فرایند برای نشان دادن در اینجا بسیار طولانی است ، بنابراین من پیوند دیگری را که توسط The Drone Dojo استفاده کردم ارائه می دهم.

ساخت هواپیمای بدون سرنشین رزبری پای

باز هم ، از آنجا که به جزئیات زیادی نمی پردازم ، فقط اصول اولیه هر مرحله را برجسته می کنم.

1. وسایل خود را سازماندهی کنید - مواد ما را جمع آوری کرده و مطمئن شوید که به راحتی قابل دسترسی هستند

2. ساخت خود را برنامه ریزی کنید - قطعات خود را بر روی قاب سازماندهی کنید تا نقشه ای از آنچه خواهید ساخت تهیه کنید

3. کار لحیم کاری - این کاری است که انجام آن به تنهایی کمی سخت است. شما باید اتصالات گلوله طلایی را که همراه موتور هستند به ESC وصل کنید. در مرحله بعد ، باید قسمت پایین قاب را بردارید و ESC ها را به قاب پایین یا برد توزیع برق بچسبانید. ماژول باتری نیز به برد توزیع برق لحیم می شود

4. تنظیم قاب - سپس باید قسمت بالای قاب را به همراه بازوها پیچ کنید. سپس می توانید رزبری پای را به هر نحوی که می خواهید روی آن وصل کنید. (من از نوار چسب استفاده کردم). سپس می توانید ESC ها را با زیپ به بازوها محکم کنید. حالا تقریبا کارمان تمام شده است.

5. اتصال RC Controller به گیرنده - دستورالعمل های لیست پخش بالا را دنبال کنید تا RC Controller را با استفاده از ESC متصل کنید.

6. نهایی کردن قطعات روی قاب - نوار چسب یا بند روی ماژول تله متری روی قاب. همچنین رمزگذار PPM را به بازو بچسبانید. اکنون می توانید رمزگذار ESC و PPM را به Navio وصل کنید.

7. GPS Mount + باتری - Mount GPS را با پیچ ها و قطعات مختلف مونتاژ کنید. با استفاده از زیپ ، GPS را به Frame وصل کنید. من لزوماً از GPS Mount به دلیل شکنندگی آن استفاده نکردم ، اما این به شما بستگی دارد. در مرحله بعد ، می توانید باتری را بین Power Dist قرار دهید. تخته ماژول پاور را نیز به قاب وصل کردم و به آن چسباندم. در حال حاضر سخت افزار شما تقریباً تنظیم شده است. حالا برای قسمتی که منتظرش بودیم!

8. نصب پروانه ها !!! - می توانید با استفاده از نمودار ذکر شده در لیست پخش ، ملخ ها را سفت کنید. سپس می توانید ESC ها را به موتورها وصل کنید و ما در نهایت ساخت هواپیمای بدون سرنشین را به پایان رساندیم.

نرم افزار بعدی است ، پس به بعد!

مرحله 3: پیکربندی Raspberry Pi و GCS (Mission Planner)

پیکربندی Raspberry Pi و GCS (Mission Planner)
پیکربندی Raspberry Pi و GCS (Mission Planner)

دوباره ، می توانید دستورالعمل های دقیق تر را در لیست پخش از آخرین مرحله پیدا کنید. با این حال ، احتمالاً می دانید که چگونه RasPi را راه اندازی کنید. اما این بار ، ما این کار را بدون سر انجام می دهیم. برای رایت سیستم عامل از وب سایت Navio OS در کارت MicroSD از Balena Etcher استفاده کنید. در حالی که به رایانه شما وصل است ، با استفاده از دفترچه یادداشت ++ به wpa supplicant بروید. پس از آن ، ssid و رمز Raspberry Pi را برای اتصال به WiFi وارد کنید. سپس باید فایلی به نام SSH اضافه کنید. این می تواند از طریق خط فرمان یا روش دیگری باشد. اکنون می توانیم SSH را انجام دهیم. می توانید از خط فرمان یا Putty استفاده کنید. من از خط فرمان استفاده کردم و "ssh pi@navio" را برای اتصال در مورد خود تایپ کردم ، یا می توانید آدرس IP و ssh را از این طریق پیدا کنید. هنگام اتصال ، از این ویدیو برای راه اندازی و پیکربندی Navio استفاده کنید. برای راه اندازی دورسنجی ابتدا باید روی Raspberry Pi ویرایش کنید. این کار را برای ویرایش انجام دهید و سعی کنید به Mission Planner متصل شوید. اگر دورسنجی کار نمی کند ، می توانید با وارد کردن IP GCS (ایستگاه کنترل زمینی مانند لپ تاپ) ، ویرایش را لغو کرده و با استفاده از اتصال UDB متصل شوید. پس از اتصال به Mission Planner ، می توانید از جادوگر راه اندازی برای کالیبراسیون تمام قسمت های هواپیمای بدون سرنشین استفاده کنید. اگر به کمک نیاز دارید دوباره به لیست پخش مراجعه کنید. معمولاً ، هر زمان که راه اندازی می کنید ، تقریباً همیشه خطایی وجود دارد. عیب یابی یکی از بزرگترین بخش های این پروژه است. من واقعاً نمی توانم به شما کمک کنم زیرا از خطاهای شما مطلع نیستم ، اما اکثر خطاها را می توان با کمک اینترنت برطرف کرد. پس از آماده شدن همه چیز ، هواپیمای بدون سرنشین آماده پرواز است! می توانید کنترلر RC و حالت های پرواز خود را در Mission Planner تنظیم کنید. سعی کنید چوب چپ را به مدت پنج ثانیه در قسمت پایین سمت راست نگه دارید تا پهپاد مسلح شود. من پرواز بدون نگاه به آموزش را توصیه نمی کنم زیرا هواپیمای بدون سرنشین بسیار شکننده است و شکستن آن آسان است. برای من ، اولین بار که با آن پرواز کردم ، GPS GPS و برخی پروانه ها را شکستم. اگر نیازی به کنترل صدا ندارید ، می توانید اینجا را متوقف کنید. برای یادگیری در مورد AWS و برنامه نویسی هواپیمای بدون سرنشین ادامه دهید!

مرحله 4: برنامه نویسی هواپیمای بدون سرنشین برای پرواز با پایتون

برنامه نویسی هواپیمای بدون سرنشین برای پرواز با پایتون
برنامه نویسی هواپیمای بدون سرنشین برای پرواز با پایتون

قبل از ورود به AWS ، ابتدا باید نحوه برنامه ریزی هواپیمای بدون سرنشین را برای پرواز درک کنیم. پس از راه اندازی اولیه ، ادغام کنترل صدا نباید خیلی سخت باشد. اولین چیزی که می توانیم برای درک آن تلاش کنیم ، ساخت یک برنامه بلند شدن و فرود ساده است. پس از راه اندازی رزبری پای ، می توانیم دوباره SSH را وارد آن کنیم. می توانید دوباره لیست پخش را مشاهده کنید یا دستورالعمل من را دنبال کنید.

1. ابتدا اجازه دهید کد منبع ArduPilot را در یک دایرکتوری روی رزبری پای بارگیری کنیم

mkdir src

سپس ، فایل ها را از GitHub با استفاده از git clone دریافت کنید

git clone -b Copter -3.6.11

حالا بیایید به مسیر /src /ardupilot برویم

cd src

cd ardupilot

اکنون ، اجازه دهید فایلهای منبع را اولیه کنیم

git submodule update --init --recursive

2. در مرحله بعد ، ما باید سیستم عامل را روی Raspberry Pi کامپایل کنیم

قبل از انجام مراحل بعدی ، حتماً به مسیر/src/ardupilot/با cd بروید

سپس با استفاده از Navio به طور خاص پیکربندی کنید

./waf پیکربندی --board = 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 نرم افزاری است که ما برای برنامه ریزی هواپیمای بدون سرنشین از آن استفاده می کنیم. برای درک برخی از کد ها می توانید اسناد را در اینجا پیدا کنید. ابتدا باید بسته را قبل از نوشتن اسکریپت روی هواپیمای بدون سرنشین خود نصب کنیم.

ما می توانیم بسته پایتون را با

pip install dronekit == 2.9.1

این ممکن است جدیدترین نسخه باشد یا نباشد ، اما نسخه ای است که من از آن استفاده کردم تا بتوانم در عیب یابی کمک کنم.

برای بررسی اینکه آیا نصب شده است ، می توانیم a را انجام دهیم

فریز پیپ | grep dronekit

اکنون بالاخره آماده ایم که اولین اسکریپت پایتون خود را بسازیم

5. takeoff_and_land.py

هشدار! من پیشنهاد می کنم یک درک اساسی از پایتون ایجاد کنید ، بنابراین می توانید کد را بیاموزید و درک کنید. اگر می خواهید برنامه را خودتان بنویسید این ویدیو را دنبال کنید.

## ابتدا اجازه ندهید یک دایرکتوری برای ذخیره این کد ایجاد شود

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. به جلو!

اکنون می توانیم از این دانش برای کنترل صدای پهپاد خود استفاده کنیم. کنترل پهپاد الکسا از بسیاری از این ویژگی ها و موارد دیگر استفاده می کند. موفق و پیروز باشید!

مرحله 5: استفاده از Amazon Alexa و Amazon Web Services برای ادغام کنترل صدا

استفاده از آمازون الکسا و خدمات وب آمازون برای ادغام کنترل صدا
استفاده از آمازون الکسا و خدمات وب آمازون برای ادغام کنترل صدا
استفاده از Amazon Alexa و Amazon Web Services برای ادغام کنترل صدا
استفاده از Amazon Alexa و Amazon Web Services برای ادغام کنترل صدا

این مرحله یکی از مراحل کم مستند است. این بدان معناست که عیب یابی سخت ترین کار خواهد بود. فقط کار کردن آن حدود یک ماه طول کشید ، شاید بیشتر. در اینجا مهمترین چیز این است که صبور باشید. اگر این ویژگی در زندگی واقعی اجرا شود ، می تواند زندگی را تغییر دهد. فقط می توانید به الکسا بگویید به جای اینکه خودتان بروید ، مواد غذایی خود را برای شما تهیه کند. تصور کنید که! بنابراین بدون بحث بیشتر اجازه دهید وارد آن شویم!

1. ثبت رزبری پای به عنوان چیزی در AWS IoT

برای استفاده از اینترنت اشیا (اینترنت اشیا) ، به یک چیز نیاز داریم. بنابراین برای استفاده از AWS IoT ابتدا باید وارد AWS Console شویم. سپس به IoT Core بروید. هنگامی که آنجا هستید ، باید روی Manage کلیک کنید و سپس یک مورد ایجاد کنید. پس از افزودن نام ، برای اتصال ، به گواهینامه نیاز داریم. توصیه می کنم بر روی گواهی یک کلیک کلیک کنید. سپس پس از مشاهده صفحه گواهی ، مطمئن شوید که تک تک کلیدها از جمله CA اصلی را بارگیری کرده اید. سپس می توانید بروید و ایجاد چیز را به پایان برسانید. در مرحله بعد باید خط مشی ایجاد کنیم. به IoT Core بازگردید. سپس بر روی امن و سیاست ها کلیک کنید. سپس گزینه create policy را بزنید. سپس می توانید یک نام ایجاد کرده و منابع را اضافه کنید. تحت عمل ، iot * و نوع * را در منبع تایپ کنید و ضربه بزنید تا اثر شود. سپس به مورد خود بازگردید و به گواهینامه خود بروید. هنگامی که اینجا هستید ، روی سیاست ها کلیک کنید. سپس می توانید خط مشی خود را برای آن مورد ضمیمه کنید و همه چیز آماده است!

2. تنظیم کد روی Raspberry Pi و تعامل با IoT

برای این بخش ، شما برای انتقال فایل به یک SFTP Client (من از WinSCP استفاده کردم) نیاز دارید. پس از اتصال به Raspberry Pi خود ، ما باید کلیدهای گواهی را در دست داشته باشیم. شما باید فایلهای کلیدی را به Raspberry Pi منتقل کنید. همچنین باید AWSIoTPythonSDK را روی Raspberry Pi نصب کنید. سپس به دایرکتوری dk در Raspberry Pi بروید. شما از فایل Alexa Drone Control که برای برقراری ارتباط با اینترنت اشیا ارائه کردم استفاده می کنید. برای استفاده از این فایل ، از Shell Script برای راه اندازی استفاده کردم. من کد زیر را نشان می دهم زیرا به دلایلی نمی توانم فایل را بارگذاری کنم. اگر برنامه هنگام آزمایش پیام های AWS IoT را دریافت نمی کند ، نگران نباشید! این ممکن است تقصیر من باشد زیرا فایل کنترل Alexa Drone Control ممکن است با چیز شما مطابقت نداشته باشد. بنابراین ، برای رفع آن ، به AWS IoT برگردید و در پنل سمت چپ گزینه learn را بزنید. دستورالعمل ها را دنبال کنید و ممکن است مجبور به راه اندازی مجدد شوید. متاسفم برای آن هنگامی که اینترنت اشیاء شما شروع به کار با برنامه در RasPi کرد ، می توانید کد dronekit را از فایل کنترل Alexa Drone Control که من داده بودم ، ادغام کنید. پس از آن ، از Shell Script که با گواهینامه های خود داده ام و Rest API Endpoint از IoT استفاده کنید.

# اسکریپت توقف در خطای خط -e # بررسی کنید که آیا فایل CA ریشه وجود دارد ، اگر [! -f./root-CA.crt] ؛ سپس printf "\ n بارگیری گواهینامه AWS IoT Root CA از AWS … / n" curl https://www.amazontrust.com/repository/AmazonRoot…>> root-CA.crt fi # نصب AWS Device SDK برای Python اگر قبلاً نصب نشده است اگر [! -d./aws-iot-device-sdk-python]؛ سپس printf "\ n نصب AWS SDK … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install 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 Developer شوید. سپس ، فقط ایجاد مهارت را فشار دهید. وقتی از شما می خواهد مدلی را برای مهارت خود انتخاب کنید ، فقط روی سفارشی ضربه بزنید. هنگامی که از شما می خواهد روشی را انتخاب کنید ، گزینه δικό خود را ضربه بزنید. شما می توانید نام آن را هرطور که می خواهید بگذارید. نیازی به الگو نیست ، بنابراین شروع را از ابتدا انتخاب کنید. بعد ، پس از ایجاد مهارت خود ، باید با یک چک لیست در سمت راست وارد صفحه Skill builder شوید. از اینجا می توانیم مهارت خود را شروع کنیم. اولین مورد در چک لیست ، نام فراخوانی است. این چیزی است که شما به الکسا خواهید گفت تا مهارت خود را فراخوانی کند. برای من ، من فقط نام فراخوان خود را به عنوان هواپیمای بدون سرنشین گذاشتم. اکنون می توانیم به مقاصد ، اظهارات و اسلات خود برویم. در اینجا می توانید دستوراتی را برای هواپیمای بدون سرنشین اعمال کنید مانند 1 متر بالا رفتن یا راست یا پایین رفتن. مال من در حال حاضر واقعاً با یک متر کار می کند. می توانید بر روی JSON Editor در پایین پنل سمت چپ کلیک کنید. سپس می توانید کد زیر را در آن بچسبانید.

پس از چسباندن کد در ویرایشگر JSON ، می توانید روی مرحله سوم چک لیست کلیک کنید تا مدل تعامل شما برای شما ایجاد شود. با این مرحله ، فعلا کارتان تمام می شود. در حال حاضر می توانید شکاف نقطه پایانی را خالی بگذارید!

مرحله 4: ایجاد عملکرد لامبدا

در حال حاضر ، این مرحله یکی از مراحل است که شما باید خودتان تشخیص دهید. من نحوه اتصال آن به مهارت الکسا را به شما می گویم ، اما باید خودتان آن را کدگذاری کنید. بنابراین ، ابتدا به کنسول مدیریت AWS بروید. سپس ، به لامبدا بروید. سپس می توانید یک تابع با نام دلخواه خود ایجاد کنید. حتماً آن را از ابتدا بنویسید و زمان اجرا را به هر زبان برنامه نویسی که می خواهید بسازید. من از Node.js. برای افزودن مهارت Alexa ، یک ماشه را اضافه کنید و Alexa Skills Kit (ASK) را انتخاب کنید. ARN Lambda خود را کپی کرده و به مهارت 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 = 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 درخواست در پارامتر رویداد ارائه شده است. export.handler = تابع (رویداد ، زمینه) {try {console.log ("event.session.application.applicationId =" + event.session.application.applicationId) ؛ ctx = زمینه؛ if (event.session.application.applicationId! == app_id) {ctx.fail ("شناسه برنامه نامعتبر") ؛ } client = 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) ؛ } else if (event.request.type === "IntentRequest") {onIntent (event.request، event.session)؛ } else if (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request، event.session) ؛ ctx.succcess ()؛ }} catch (e) {console.log ("استثنا در کنترل کننده:" + e)؛ ctx.fail ("استثنا:" + e) ؛ }}؛ /*** با شروع جلسه تماس گرفته می شود. */ function onSessionStarted (sessionStartedRequest، session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + "، sessionId =" + session.sessionId)؛ }

/**

* هنگامی که کاربر مهارت را بدون مشخص کردن آنچه می خواهد ، راه اندازی می کند. */ function onLaunch (launRequest ، session ، callback) {console.log ("onLaunch requestId =" + launRequest.requestId + "، sessionId =" + session.sessionId) ؛ // اعزام به راه اندازی مهارت خود. getWelcomeResponse (تماس تلفنی) ؛ } /*** هنگامی که کاربر قصد این مهارت را مشخص می کند ، فراخوانی می شود. */function onIntent (synRequest، session) {//، callback) {console.log ("onIntent requestId =" + purposeRequest.requestId + "، sessionId =" + session.sessionId)؛ var قصد = purposeRequest.intent ، قصدName = قصدRequest.intent.name؛ console.log ("REQUEST to string =" + JSON.stringify (purposeRequest))؛ var callback = null؛ // اگر به ("GoIntent" === purposeName) {doGoIntent (قصد ، جلسه) ، به کنترل کننده های هدف مهارت خود ارسال کنید ؛ } else if ("CommandIntent" === purposeName) {doCommandIntent (قصد ، جلسه) ؛ } else if ("TurnIntent" === purposeName) {doTurnIntent (قصد ، جلسه) ؛ } else if ("HelpIntent" === qëllimName) {getWelcomeResponse ()؛ } else {پرتاب "قصد نامعتبر"؛ }} /*** هنگامی که کاربر جلسه را تمام می کند ، فراخوانی می شود. * هنگام بازگرداندن مهارت shouldEndSession = true فراخوانی نمی شود. */ function onSessionEnded (sessionEndedRequest، session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + "، sessionId =" + session.sessionId)؛ // منطق پاکسازی را در اینجا اضافه کنید} // --------------- عملکردهایی که رفتار مهارت را کنترل می کنند -------------------- --- تابع getWelcomeResponse () {// اگر می خواستیم جلسه را برای داشتن برخی ویژگی ها اولیه کنیم ، می توانیم آنها را در اینجا اضافه کنیم. var sessionAttributes = {}؛ var cardTitle = "خوش آمدید"؛ var speechOutput = "به کنترل هواپیمای بدون سرنشین خوش آمدید."؛ // TODO: هواپیمای بدون سرنشین آنلاین است یا آفلاین؟ اگر آنلاین است آیا ARMED است؟ var repromptText = "هواپیمای بدون سرنشین آماده فرمان است."؛ var shouldEndSession = false؛ ctx.succeed (buildResponse (sessionAttributes، buildSpeechletResponse (cardTitle ، speechOutput ، repromptText ، shouldEndSession))) ؛ } /*** قصد GO را کنترل می کند. */ function doGoIntent (قصد ، جلسه ، تماس تلفنی) {// var cardTitle = "Drone GO …"؛ var repromptText = ""؛ var sessionAttributes = {}؛ var shouldEndSession = false؛ var speechOutput = ""؛ var var = purpose.slots. Direction.value؛ var distance = purpose.slots. Distance.value؛ واحد واحد = purpose.slots. Unit.value؛ var validDirections = ["جلو" ، "جلو" ، "عقب" ، "عقب" ، "راست" ، "چپ" ، "بالا" ، "پایین" ، "مستقیم" ، "جلو" ، "مستقیم جلو"]؛ var validUnits = ["پا" ، "پا" ، "متر" ، "متر" ، "حیاط" ، "حیاط"]؛ repromptText = "به من بگویید تا کجا و در چه جهتی حرکت کنم."؛ var fail = false؛ // اعتبار ورودی ها ((((parseInt (فاصله)> = 1))) {speechOutput = "من نمی توانم مسافتی را که می خواهید طی کنم درک کنم."؛ fail = true؛ ctx.succeed (buildResponse (sessionAttributes، buildSpeechletResponse (cardTitle ، speechOutput ، repromptText ، shouldEndSession))) ؛ } if (validDirections.indexOf (جهت) == -1) {speechOutput = "من نمی توانم جهت مورد نظر شما را درک کنم."؛ fail = true؛ ctx.succeed (buildResponse (sessionAttributes، buildSpeechletResponse (cardTitle ، speechOutput ، repromptText ، shouldEndSession))) ؛ } if (validUnits.indexOf (unit) == -1) {speechOutput = "من نمی توانم واحدی را که می خواهید سفر کنم درک کنم."؛ fail = true؛ ctx.succeed (buildResponse (sessionAttributes، buildSpeechletResponse (cardTitle ، speechOutput ، repromptText ، shouldEndSession))) ؛ } if (! fail) {var cardTitle = "هواپیمای بدون سرنشین در حال حرکت است" + جهت + "" + فاصله + "" + واحد ؛ speechOutput = "رفتن" + جهت + "" + فاصله + "" + واحد ؛ mqttPublish (قصد ، sessionAttributes ، cardTitle ، speechOutput ، repromptText ، shouldEndSession) ؛ }}

تابع doCommandIntent (قصد ، جلسه ، تماس تلفنی) {

// var cardTitle = "دستور پهپاد …"؛ var repromptText = null؛ var sessionAttributes = {}؛ var shouldEndSession = false؛ var speechOutput = ""؛ repromptText = "دستور پهپاد را به من بگو."؛ var task = purpose.slots. Task.value؛ var validTasks = ["راه اندازی" ، "زمین" ، "r. t. l." ، "نگه داشتن" ، "ماندن" ، "توقف" ، "بازگشت به پرتاب" ، "سقط"]؛ if (validTasks.indexOf (task) == -1) {speechOutput = "من دستور را نفهمیدم."؛ ctx.succeed (buildResponse (sessionAttributes، buildSpeechletResponse (cardTitle ، speechOutput ، repromptText ، shouldEndSession))) ؛ } else {var cardTitle = "اجرای دستور Drone" + وظیفه ؛ speechOutput = "اجرای دستور" + وظیفه ؛ mqttPublish (قصد ، sessionAttributes ، cardTitle ، speechOutput ، repromptText ، shouldEndSession) ؛ }}

تابع doTurnIntent (قصد ، جلسه ، تماس تلفنی) {

// var cardTitle = "چرخش هواپیمای بدون سرنشین …"؛ var repromptText = null؛ var sessionAttributes = {}؛ var shouldEndSession = false؛ var speechOutput = ""؛ repromptText = "به من بگو چگونه می خواهی پهپاد را بچرخانی."؛ var 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 = "چرخش" + جهت ؛ mqttPublish (قصد ، sessionAttributes ، cardTitle ، speechOutput ، repromptText ، shouldEndSession) ؛ }}

تابع mqttPublish (قصد ، sessionAttributes ، cardTitle ، speechOutput ، repromptText ، shouldEndSession)

{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 ("close" ، (function () {console.log ("MQTT CLIENT CLOSE - فکر می کند این کار با موفقیت انجام شده است.") ؛ ctx.succeed (buildResponse (sessionAttributes، buildSpeechletResponse (cardTitle ، speechOutput ، repromptText ، shouldEndSession)))؛}))؛ client.on ("خطا" ، (عملکرد (خطا ، اعطا)) {console.log ("MQTT CLIENT ERROR !!" + err)؛})) ؛ }

// --------------- یاورانی که همه پاسخ ها را ایجاد می کنند -----------------------

تابع buildSpeechletResponse (عنوان ، خروجی ، repromptText ، shouldEndSession) {return {outputSpeech: {type: "PlainText"، text: output}، card: {type: "Simple"، title: title، content: output} ، reprompt: {outputSpeech: {{type: "PlainText" ، text: repromptText}} ، shouldEndSession: shouldEndSession}} تابع buildResponse (sessionAttributes، speechletResponse) {return {version: "1.0"، sessionAttributes: sessionAttributes ، answer: speechletResponse}}

توصیه شده: