فهرست مطالب:

افزودن Alexa Control سفارشی به پروژه Raspberry Pi: 5 مرحله
افزودن Alexa Control سفارشی به پروژه Raspberry Pi: 5 مرحله

تصویری: افزودن Alexa Control سفارشی به پروژه Raspberry Pi: 5 مرحله

تصویری: افزودن Alexa Control سفارشی به پروژه Raspberry Pi: 5 مرحله
تصویری: ПОЧЕМУ Я ЖДУ L4D3 2024, جولای
Anonim
کنترل سفارشی الکسا را به پروژه Raspberry Pi اضافه کنید
کنترل سفارشی الکسا را به پروژه Raspberry Pi اضافه کنید

این پروژه برای هر کسی که دارای پروژه Raspberry Pi است که از پایتون استفاده می کند و می خواهد کنترل صدا را از طریق دستگاه های آمازون اکو موجود خود اضافه کند ، در نظر گرفته شده است. نیازی نیست که یک برنامه نویس با تجربه باشید ، اما باید از خط فرمان استفاده کرده و کد موجود را متناسب با نیازهای خود تطبیق دهید.

من در ابتدا پروژه ای را آغاز کردم تا بتوانم رزبری پای خود را با Alexa کنترل صدا کنم تا بتواند آب کتری را تا دمای خاصی گرم کند. اگرچه تعامل موردنظر من بسیار ساده بود (یک شماره را از Alexa به Raspberry Pi منتقل کنید) ، اما برای دستیابی به آن حالت از آموزش های موجود ، کار زیادی طول کشید. امیدوارم این آموزش این روند را در اسرع وقت برای دیگران انجام دهد.

در مثال من ، من با Raspberry Pi Zero W با Raspbian شروع می کنم. من یک برنامه Python3 روی Pi خود دارم که قادر به نوشتن متن بر روی صفحه نمایش SPI است و یک پروب دماسنج دارم که می توانم بخوانم. برای شما ، این برنامه تقریباً می تواند هر چیزی باشد ، اما ایده این است که شما ممکن است برخی از دستگاه های ورودی را داشته باشید که می خواهید از طریق Alexa و/یا برخی از دستگاه های خروجی بخوانید که می خواهید با استفاده از Alexa آنها را کنترل کنید.

هدف این است که از یک برنامه اساسی مانند آنچه در بالا توضیح داده شد به دستگاهی بروید که می توانید به راحتی با Echo من آن را کنترل کنید. با فرض اینکه شما قبلاً این سخت افزار را دارید ، این پروژه نباید هزینه ای برای شما داشته باشد. در پایان ، به جایی می رسید که می توانید مواردی مانند:

من: "الکسا ، از گجت من بخواهید دما را روی سنسور 1 بررسی کند."

پاسخ الکسا: "کاوشگر 72.31 درجه را می خواند."

یا

من: "الکسا ، به ابزار من بگو جورج واشنگتن بنویسد"

پاسخ: صفحه نمایش متصل به رزبری پای من اکنون "George Washington" را می خواند

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

مرحله 1: پیش زمینه

زمینه
زمینه

در این تصویر (اعتبار: https://developer.amazon.com/en-US/docs/alexa/alex…) می توانیم معماری کلی ابزارهای Alexa را مشاهده کنیم.

وقتی چیزی را به دستگاه Echo خود می گویید ، صدا را به ابر Alexa ارسال می کند ، جایی که پردازش می شود و در آنجا پاسخی برای پاسخ به شما ایجاد می شود. وقتی می پرسید آب و هوا چیست ، فقط این دو در ارتباط هستند. اکنون فرض کنید می خواهید کنترل صدا را به یکی از پروژه های کوچک خود در Raspberry Pi اضافه کنید. پردازش همه چیز در کشتی مستلزم سخت افزار قابل توجه و یک پایگاه کد بسیار پیچیده برای پیشبرد امور است. راه حل بهتر این است که از Alexa Cloud استفاده کنید ، که بسیار پیچیده است و در مدیریت الگوهای پیچیده گفتار بسیار خوب عمل کرده است. ابزارهای الکسا روش خوبی را برای انجام این کار در اختیار شما قرار می دهند.

گجت الکسا با استفاده از بلوتوث با دستگاه Echo ارتباط برقرار می کند. پس از برقراری این ارتباط ، این دو با استفاده از رمزگذاری UTF-8 پیام های یکدیگر را ارسال می کنند. هنگامی که اکو چیزی را به ابزار منتقل می کند ، به آن دستورالعمل می گویند. جهت دیگر رویداد نامیده می شود. قبل از ورود به جریان دقیق همه اینها ، ما باید یک عنصر کلیدی دیگر را معرفی کنیم: مهارت های سفارشی Alexa.

الکسا به توسعه دهندگان اجازه می دهد مهارت های سفارشی خود را ایجاد کنند ، که به آنها امکان می دهد تعاملات و رفتارهای خود را برای استفاده در همه دستگاه های Echo طراحی کنند. به عنوان مثال ، یک توسعه دهنده می تواند یک مهارت سفارشی ایجاد کند تا فاصله بین دو فرودگاه در ایالات متحده را به شما بگوید. یک کاربر می گوید: "الکسا ، از ماشین حساب فاصله سفارشی من بپرس فاصله بین LAX و JFK چقدر است" و می تواند با "2475 مایل" پاسخ دهد. اون چطور انجامش میدهد؟ هنگامی که یک توسعه دهنده مهارت سفارشی ایجاد می کند ، آنها آنچه را که "قصد سفارشی" نامیده می شود با "نمونه اظهارات" حاوی "اسلات" تعریف می کنند. به عنوان مثال ، در این مهارت ممکن است من قصد داشته باشم "calc_dist" فاصله بین دو نقطه را محاسبه کنم. نمونه ای از عبارت "فاصله بین {slot1} و {slot2}" یا "فاصله بین {slot1} و {slot2}" چقدر خواهد بود. شکاف های نشان داده شده در براکت ها انواع خاصی دارند. در این مورد آن انواع کد فرودگاه مانند LAX ، JFK ، BOS ، ATL خواهد بود. هنگامی که یک کاربر مهارت سفارشی را درخواست می کند ، Alexa Cloud سعی می کند آنچه را که کاربر می گوید با هدف سفارشی با استفاده از گفته های نمونه ارائه شده مطابقت دهد و سعی می کند مقادیر شکاف معتبر را برای آن درخواست پیدا کند. در این مثال ، مشخص می شود که کاربر قصد "calc_dist" را دارد و slot1 LAX و slot2 JFK است. در این مرحله ، Alexa Cloud کار را به کد توسعه دهنده منتقل می کند. در اصل ، این کد به توسعه دهندگان می گوید که هدف آن چه بوده است و همه مقادیر اسلات ، و سایر جزئیات.

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

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

ایجاد این جریان اجازه می دهد تا یک ابزار بسیار قدرتمند ایجاد کنید زیرا ابزارهای ارزان قیمت می توانند توانایی برقراری ارتباط با کد در ابر را داشته باشند و با استفاده از برخی از بهترین تشخیص صوت موجود به فرمان های صوتی پاسخ دهند.

لازم به ذکر است که اکثر مهارتها به روشهای مختلف تعامل با آنها امکان پذیر است. به عنوان مثال ، ممکن است یک کاربر با گفتن "الکسا ، از ماشین حساب فاصله سفارشی من فاصله بین LAX و JFK را بپرسید" (که یک فراخوان یکبار نامیده می شود) بپرسید یا او به سادگی از یک هدف راه اندازی استفاده کند: "الکسا ، ماشین حساب فاصله سفارشی من را باز کنید " این مثال آخر معمولاً توسط الکسا با درخواست اطلاعات بیشتر پاسخ داده می شود. این آموزش عمدا پشتیبانی از مورد دوم را حذف می کند. به طور خاص ، بدون تغییر عملکرد Lambda ، فقط می توانید با استفاده از یک فراخوانی یک شبه ، مهارت را فراخوانی کنید. این انتخاب طراحی به مدل اجازه می دهد تا ساده تر باشد (نیازی به پشتیبانی از اهداف راه اندازی یا جریان مکالمه نیست) ، و من متوجه شده ام که معمولاً می خواهم با ابزارهای خود با استفاده از فراخوانی های یک شبه در ارتباط باشم زیرا آنها معمولاً سریعتر هستند.

مرحله 2: Gadget را در کنسول توسعه دهنده خدمات صوتی Alexa ثبت کنید

در زیر شرح مراحل مورد نیاز است. من یک ویدیوی معادل ایجاد کرده ام که نحوه انجام همه این مراحل را نشان می دهد. برای تکمیل این مرحله می توانید از هر دو یا هر دو استفاده کنید.

  1. به https://developer.amazon.com/alexa/console/avs/hom… بروید
  2. اگر قبلاً حساب رایگان ندارید ، یک حساب بسازید
  3. روی "محصولات" کلیک کنید
  4. برچسب ها را پر کنید و "Alexa Gadget" را انتخاب کنید
  5. برای بقیه فیلدها هرچه می خواهید پر کنید
  6. روی پایان کلیک کنید

مرحله 3: ایجاد عملکرد AWS Lambda و مهارت سفارشی

ایجاد مهارت سفارشی در Alexa Skills Kit Developer Console

کد این آموزش را می توانید در اینجا پیدا کنید

قبل از اتمام این مرحله ، باید یک فایل.zip ایجاد کنید که حاوی بسته استقرار برای عملکرد AWS Lambda باشد ، همانطور که در آموزش اینجا نشان داده شده است.

  1. پوشه "lambda" را از Github من بارگیری کنید که حاوی "lambda_function.py" و "Requires.txt" است
  2. ترمینال را باز کرده و فهرست فعلی را تغییر دهید تا داخل این پوشه باشد.
  3. دنباله زیر را اجرا کنید:

pip install -r requirements.txt -t skill_env

cp lambda_function.py skill_env cd skill_env zip -r../../skill-code.zip

فایل.zip شما اکنون در پوشه ای قرار دارد که پوشه lambda در آن قرار داشت و "skill-code.zip" نامیده می شود.

نکته ای در مورد هزینه میزبانی در AWS: این آموزش مستلزم این است که شما یک حساب AWS (ایجاد رایگان) داشته باشید. عملکردهای لامبدا هزینه زیادی دارند ، با این حال ، قیمت فعلی آنها در منطقه ویرجینیا 0.000000208 دلار به ازای هر 100 میلی ثانیه با 128 مگابایت حافظه است. برای مرجع ، هر فراخوانی مهارت های من حدود 800 میلی متر استفاده را در این ردیف صورت می دهد. برای جمع آوری صورتحساب 1.00 دلار آمریکا ، باید حدود 600 ، 000 بار این تابع را فراخوانی کنید که (اگر برای هر فراخوانی 5 ثانیه طول بکشد) شما بیش از 34 روز بدون توقف به تابع خود نیاز خواهید داشت. تا زمانی که مهارت خود را منتشر نکنید و تعداد زیادی از افراد شروع به استفاده از آن نکنند ، هزینه نباید مسئله مهمی باشد. اگر نگران دریافت صورتحساب در AWS هستید ، تنظیم زنگ هشدارهای استفاده را در نظر بگیرید که در صورت عبور از آستانه تعیین شده ، به شما اطلاع می دهد.

در زیر شرح مراحل مورد نیاز است. من یک ویدیوی معادل ایجاد کرده ام که نحوه انجام همه این مراحل را نشان می دهد. برای تکمیل این مرحله می توانید از هر دو یا هر دو استفاده کنید.

  1. به https://aws.amazon.com/ بروید و وارد کنسول شوید یا در صورت نداشتن یک حساب رایگان ایجاد کنید
  2. Lambda را تحت خدمات جستجو کرده و روی آن کلیک کنید
  3. روی "ایجاد عملکرد" کلیک کنید
  4. "نویسنده از ابتدا" را انتخاب کنید ، نامی برای آن بگذارید و آخرین نسخه پایتون 3 را برای زمان اجرا انتخاب کنید
  5. "ویرایش کد درون خطی" را به "بارگذاری فایل.zip" تغییر دهید و فایل.zip ایجاد شده در بالا را انتخاب کنید
  6. در یک پنجره جدید ، به https://developer.amazon.com/alexa/console/ask بروید و وارد شوید
  7. روی "ایجاد مهارت" کلیک کنید
  8. برچسب بزنید ، مدل "Custom" و "Providence your own" را انتخاب کنید و روی "ایجاد مهارت" کلیک کنید
  9. روی "شروع از خراش" و "انتخاب" کلیک کنید
  10. در بخش "قصد" ، روی "افزودن" کلیک کنید
  11. یک هدف سفارشی به نام "alexa_to_pi" ایجاد کرده و عبارت "write {person}" را به عنوان نمونه بیان وارد کنید
  12. با نوع "AMAZON. Person" یک شکاف هدف با نام "person" ایجاد کنید
  13. یک هدف سفارشی به نام "pi_to_alexa" ایجاد کنید و "بررسی دما از حسگر {sensor_num}" را وارد کنید
  14. با نوع "AMAZON. NUMBER" یک شکاف هدف با نام "sensor_num" ایجاد کنید
  15. در بخش رابط ها ، "Custom Interface Controller" را روشن کنید
  16. در قسمت Endpoint ، "AWS Lambda ARN" را انتخاب کرده و "Your Skill ID" را کپی کنید
  17. به کنسول AWS بازگردید
  18. روی "افزودن محرک" کلیک کنید
  19. "Alexa Skills Kit" را انتخاب کنید ، "Enable" را در Verification ID تأیید کنید ، در Skill ID که کپی کرده اید بچسبانید و روی افزودن کلیک کنید
  20. ARN Lambda را در گوشه بالا سمت راست کپی کنید
  21. بازگشت به کنسول توسعه دهنده Alexa و چسباندن ARN Lambda در قسمت "Default Region"
  22. در بخش Invocation ، نام Skill Invocation را به عنوان "ابزار من" تنظیم کنید
  23. روی "ذخیره مدل" و سپس "ساخت مدل" کلیک کنید
  24. روی "Test" در برگه های بالا کلیک کنید و انتخاب کننده را از "Off" به "Development" تغییر دهید.
  25. توجه داشته باشید که گزارش های مربوط به عملکرد Lambda در سرویس "CloudWatch" در AWS یافت می شوند.

مرحله 4: کد را روی Raspberry Pi خود تنظیم کنید

برای اینکه Raspberry Pi شما با دستگاه Alexa ارتباط برقرار کند ، به برخی از کدها برای تسهیل انتقال اطلاعات از طریق بلوتوث و حفظ این اتصال ، به علاوه چند فایل دیگر نیاز دارد. ساده ترین راه برای شروع با به روزترین فایل های آمازون ، کلون کردن مخزن ابزار Raspberry Pi Gadgets آنها است. به فهرست پروژه فعلی خود بروید و اجرا کنید

git clone

با این کار کل مخزن آنها با تمام کد لازم روی Pi شما بارگذاری می شود. این پروژه نمونه هایی دارد که برخی از قابلیت های Alexa Gadgets را نشان می دهد. اگر اطلاعات بیشتری می خواهید ، readme را در صفحه Github آنها ببینید.

عملکرد تنظیمات آنها را اجرا کنید تا همه چیز پیکربندی شود.

cd/home/pi/Alexa-Gadgets-Raspberry-Pi-Samples

sudo python3 laun.py -راه اندازی

در صورت درخواست پیکربندی با استفاده از اعتبارنامه ابزار خود ، دستورات را دنبال کنید و "y" را پاسخ دهید. شناسه آمازون و Gadget Secret را از راه اندازی ابزار خود در کنسول برنامه نویس به خاطر بسپارید زیرا در اینجا از شما خواسته می شود. من حالت انتقال "bt" را برای Raspberry Pi Zero W. BLE انتخاب کردم که توسط همه دستگاههای قدیمی Echo پشتیبانی نمی شود ، اما شما می توانید سخت افزار خود را بررسی کنید. اگر از Pi خود در حالت دسکتاپ استفاده می کنید ، آمازون توصیه می کند روی نماد bluetooth در بالا سمت راست کلیک کنید و روی "حذف" Bluetooth "از Panel" کلیک کنید تا از مشکلات اتصال جلوگیری شود.

توجه: بسته به میزان نیاز به نصب ، این مرحله ممکن است مدتی طول بکشد.

اکنون تمام فایلهای پشتیبانی لازم را برای بازگشت به پروژه خود و شروع به افزودن توابع در اختیار خواهید داشت تا بتوانید با Echo خود ارتباط برقرار کنید.

در صورت انتخاب می توانید پوشه "نمونه ها" را در "Alexa-Gadgets-Raspberry-Pi-Samples/src" حذف کنید.

شما می توانید کد پروژه خود را در هر کجا که دوست دارید داشته باشید ، اما من برای آن پوشه ای در فهرست اصلی ایجاد می کنم ، همچنین می توانید پوشه را با کد از Github من بارگیری کنید ، فقط مطمئن شوید که فایل های.ini را همانطور که در زیر توضیح داده شده است ویرایش کنید.

cd /home /pi

mkdir my_project cd my_project touch my_gadget.py my_gadget.ini را لمس کنید

من در حال حاضر دو فایل در پوشه ای با نام "my_project" ایجاد کرده ام. فایل.ini مهم است. مطمئن شوید که شامل موارد زیر و جایگزین آن در شناسه آمازون و Gadget Secret شما است:

[تنظیمات ابزار]

amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapilities] Custom. MyGadget = 1.0

اکنون ، قبل از وارد شدن به جزئیات ، نگاهی به پرونده پایتون بیندازید:

json را وارد کنید

از agt import AlexaGadget

کلاس MyGadget (AlexaGadget):

def _init _ (خود):

super ()._ init _ ()

def on_custom_mygadget_alexatopi (خود ، دستورالعمل):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Data Received:" + str (payload)) write_text (str (payload ['data'] ['person'] ['value '])))

def on_custom_mygadget_pitoalexa (خود ، دستورالعمل):

payload = json.loads (directive.payload.decode ("utf-8")) print ("Data Received:" + str (payload)) payload = {'data': "the probe read" + str (get_temp (payload ['data'] ['sensor_num'] ['value']))) + "grad."} self.send_custom_event ('Custom. MyGadget'، 'PiToAlexa'، payload) MyGadget (). main ()

ابتدا متوجه خواهید شد که دو تابع را فراخوانی می کند: write_text () و get_temp (). در کد من ، این توابع را در یک فایل تعریف می کنم ، اما آنها به سخت افزار من وابسته هستند ، بنابراین من آنها را حذف کرده ام. من این فایل را با توابع تعریف شده برای چاپ و بازگشت داده های ساختگی در صورتی که می خواهید این کد دقیق را اجرا کنید ، پیوست کرده ام. من پیشنهاد می کنم قبل از اینکه آن را برای کار با پروژه خود تغییر دهید ، با این کد دقیق آزمایش کنید. فایل.ini را نیز ضمیمه کرده ام ، اما مطمئن شوید که وارد شده اید و شناسه و راز ابزار را تغییر دهید. تابع بالا داده های منتقل شده از الکسا را دریافت می کند. تابع پایین داده ها را با همان فرمت دریافت می کند ، اما دستگاه الکسا پنج ثانیه منتظر می ماند تا رویدادی با بار خود به عقب منتقل شود. این محموله از این نظر ویژه است که دستگاه الکسا محتویات آن را بیان می کند.

پس از تهیه این فایل ها ، به پوشه "my_project" بروید و فایل پایتون را اجرا کنید.

راه اندازی مجدد sudo

cd/home/pi/my_project sudo python3./my_gadget.py

اگر این اولین بار است که برنامه را اجرا می کنید ، باید آن را با دستگاه Echo خود جفت کنید. مطمئن شوید که دستگاه Echo شما در نزدیکی Raspberry Pi قرار دارد ، زیرا ما نیاز به اتصال بلوتوث داریم.

در برنامه Alexa در دستگاه تلفن همراه خود ، روی "دستگاه ها" در گوشه سمت راست پایین کلیک کنید.

روی "Echo & Alexa" در بالا سمت چپ کلیک کنید.

روی دستگاه Echo خود کلیک کنید.

در بخش "WIRELESS" ، روی "دستگاههای بلوتوث" ضربه بزنید.

روی "PAIR A NEW DEVICE" ضربه بزنید و ابزار خود را در لیست مشاهده کنید.

روی ابزار خود ضربه بزنید. شما باید گزارش Pi را مشاهده کنید که با موفقیت جفت شد.

هنگام مشاهده خروجی Pi خود ، سعی کنید یک فرمان صوتی به Echo بدهید:

شما: "الکسا ، از ابزار من بخواه که دما را از سنسور شماره یک بررسی کند"

اگر همه چیز درست کار کرد ، باید بشنوید:

اکو: "کاوشگر 120.505 درجه می خواند."

شما: "الکسا ، به ابزار من بگو جورج واشنگتن بنویسد."

Pi باید چاپ کند:

داده های دریافتی: {'data': {'person': {'name': 'person'، 'value': 'George Washington'، 'confirmationStatus': 'NONE'}}}

جرج واشنگتن"

مرحله 5: جمع بندی

ویدئویی که در اینجا نشان داده شده است نمونه ای از این ابزار است که با خواندن دما کار می کند (همان پروب در F در مقابل C) و نوشتن نام ها در یک صفحه نمایش ساده.

اکنون که امیدوارید چیزی در حال کار باشد ، باید سعی کنید این را سفارشی کنید تا پروژه خود را تواناتر کنید. به یاد داشته باشید که می توانید به راحتی مقاصد را در کنسول توسعه دهنده Alexa ویرایش کنید و همه شکاف هایی که استفاده می کنید در بار قابل حمل به Pi شما منتقل می شود. علاوه بر این ، شما می توانید از Alexa بخواهید که هر چیزی را که می خواهید بیان کند فقط با ویرایش بار که در رویداد از کد رزبری پای خود پس می دهید.

لطفاً توجه داشته باشید که این آموزش به عنوان آخرین راه حل برای همه قابلیت هایی که می توانید با یک Alexa Gadget بخواهید نیست. عمداً محدود است که دو عملکرد ساده برای انتقال داده در هر جهت بین Alexa و Gadget به شما ارائه دهد. اگر به ساختن مدلهای تعامل پیچیده تر علاقه دارید ، من شما را تشویق می کنم که همه فایلهای readme را در https://github.com/alexa/Alexa-Gadgets-Raspberry-P… بخوانید و همه مثالهایی را که ارائه می دهند امتحان کنید. به همچنین پیشنهاد می کنم مستندات مربوط به جعبه ابزار Alexa Gadgets و مجموعه مهارت های Alexa را مطالعه کنید.

توصیه شده: