جدول المحتويات:

أضف عنصر تحكم Alexa مخصص إلى Raspberry Pi Project: 5 خطوات
أضف عنصر تحكم Alexa مخصص إلى Raspberry Pi Project: 5 خطوات

فيديو: أضف عنصر تحكم Alexa مخصص إلى Raspberry Pi Project: 5 خطوات

فيديو: أضف عنصر تحكم Alexa مخصص إلى Raspberry Pi Project: 5 خطوات
فيديو: L’analyse PAPRIUM - Retro Game Test - Mega Drive 2024, يوليو
Anonim
أضف عنصر تحكم Alexa مخصص إلى Raspberry Pi Project
أضف عنصر تحكم Alexa مخصص إلى Raspberry Pi Project

هذا المشروع مخصص لأي شخص لديه مشروع Raspberry Pi يستخدم لغة Python ويريد إضافة التحكم الصوتي عبر أجهزته الحالية من Amazon Echo. لست بحاجة إلى أن تكون مبرمجًا متمرسًا ، ولكن يجب أن تكون مرتاحًا عند استخدام سطر الأوامر وتكييف الكود الموجود ليلائم احتياجاتك.

شرعت في البداية في مشروع لتمكين Raspberry Pi من التحكم الصوتي باستخدام Alexa حتى يتمكن من تسخين الماء في غلاية إلى درجة حرارة معينة. على الرغم من أن التفاعل الذي أردته كان بسيطًا للغاية (مرر رقمًا واحدًا من Alexa إلى Raspberry Pi) ، فقد استغرق الأمر الكثير من العمل للوصول إلى هذه الحالة من البرامج التعليمية الحالية. آمل أن يجعل هذا البرنامج التعليمي هذه العملية بأسرع ما يمكن للآخرين.

في المثال الخاص بي ، أبدأ بـ Raspberry Pi Zero W مع Raspbian. لدي برنامج Python3 على Pi الخاص بي قادر على كتابة نص على شاشة SPI ، ولدي مسبار مقياس حرارة يمكنني قراءته. بالنسبة لك ، يمكن أن يكون هذا البرنامج أي شيء تقريبًا ، ولكن الفكرة هي أنه قد يكون لديك بعض أجهزة الإدخال التي تريد قراءتها عبر Alexa و / أو بعض أجهزة الإخراج التي تريد التحكم فيها باستخدام Alexa.

الهدف هو الانتقال من برنامج أساسي مثل البرنامج الموضح أعلاه إلى جهاز يمكنك التحكم فيه بسهولة باستخدام جهاز Echo الخاص بي. بافتراض أن لديك هذا الجهاز بالفعل ، فلن يكلفك هذا المشروع أي أموال. في النهاية ، ستصل إلى النقطة التي يمكنك من خلالها قول أشياء مثل:

أنا: "أليكسا ، اطلب من جهازي فحص درجة الحرارة على المستشعر 1."

رد أليكسا: "المسبار يقرأ 72.31 درجة."

أو

أنا: "أليكسا ، أخبر أداتي لكتابة جورج واشنطن"

الرد: الشاشة المتصلة بـ Raspberry Pi الآن تقرأ "George Washington"

في القسم التالي ، سأصف ما يجب أن يحدث خلف الكواليس لإنجاح هذا العمل. إذا كنت ترغب فقط في جعل هذا يعمل في مشروعك ولا تهتم بكيفية عمله ، فلا تتردد في تخطيه (على الرغم من أنه قد يجعل الأمر أكثر صعوبة إذا حدث خطأ ما).

الخطوة 1: الخلفية

خلفية
خلفية

في هذه الصورة (الائتمان: https://developer.amazon.com/en-US/docs/alexa/alex… يمكننا رؤية الهيكل العام لأدوات Alexa.

عندما تقول شيئًا لجهاز Echo الخاص بك ، فإنه يرسل الصوت إلى Alexa Cloud ، حيث تتم معالجته وحيث يتم إنشاء استجابة للرد عليك. عندما تسأل ما هو الطقس ، فإن هذين هما فقط في التواصل. افترض الآن أنك تريد إضافة التحكم الصوتي إلى أحد مشاريعك الصغيرة على Raspberry Pi. تتطلب معالجة كل شيء على متن الطائرة أجهزة كبيرة وقاعدة بيانات معقدة للغاية لإنجاز المهام. قد يكون الحل الأفضل هو الاستفادة من Alexa Cloud ، وهي معقدة للغاية وأصبحت جيدة جدًا في التعامل مع أنماط الكلام المعقدة. توفر أدوات Alexa طريقة جيدة للقيام بذلك.

تتواصل أداة Alexa Gadget مع جهاز Echo باستخدام البلوتوث. بمجرد إنشاء هذا الاتصال ، يقوم كلاهما بتمرير الرسائل الأخرى باستخدام ترميز UTF-8. عندما يقوم Echo بتمرير شيء ما إلى الأداة الذكية ، فإنه يطلق عليه التوجيه. الاتجاه الآخر يشار إليه على أنه حدث. قبل الخوض في التدفق الدقيق لكل هذا ، يجب أن نقدم عنصرًا رئيسيًا آخر: مهارات Alexa المخصصة.

تسمح 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. إذا كنت لا تعرف ما هو هذا ، فهي في الأساس خدمة تتيح لك تحميل رمز يمكن تشغيله في أي وقت ، ثم يتم تحصيل رسوم منك مقابل الوقت الذي يتم فيه تشغيل الكود الخاص بك فقط. إذا واصلنا مثالنا ، فقد يكون رمز المطور هو دالة Python التي تتلقى رمزي المطار ، وتبحث عن مواقعهما ، وتحسب المسافات ، ثم ترسل ردًا إلى Alexa Cloud للتحدث بشيء ما إلى المستخدم. ستقوم Alexa Cloud بعد ذلك بإرسال معلومات الكلام هذه إلى جهاز المستخدم ، وسيحصلون على الإجابة.

الآن يمكننا العودة إلى الأداة. يمكننا إنشاء مهارات مخصصة مصممة للعمل على وجه التحديد مع الأدوات. يمكن للمطور كتابة مهارة ترسل توجيهًا إلى أداة متصلة. يحتوي هذا التوجيه على حمولة يمكن استخدامها ولكن الأداة الذكية مطلوبة. يمكن أن ترسل هذه المهارة أيضًا توجيهًا ثم الاستماع إلى حدث من الأداة حتى يتمكن رمز المهارة من الوصول إلى المعلومات المرسلة من الأداة الذكية.

يتيح إنشاء هذا التدفق إنشاء أداة قوية جدًا لأن الأدوات غير المكلفة يمكن أن تتمتع بالقدرة على الاتصال بالرمز في السحابة والاستجابة للأوامر الصوتية باستخدام بعض من أفضل التعرف على الصوت المتاح.

وتجدر الإشارة إلى أن معظم المهارات تسمح بطرق مختلفة للتفاعل معها. على سبيل المثال ، قد يقفز المستخدم مباشرة إلى النية بقول "Alexa ، اسأل حاسبة المسافة المخصصة لدي عن المسافة بين LAX و JFK" (يسمى استدعاء طلقة واحدة) أو قد يستخدم ببساطة نية الإطلاق: "Alexa ، فتح حاسبة المسافة المخصصة ". عادةً ما يتبع هذا المثال الأخير استجابة Alexa مع مطالبة لمزيد من المعلومات. هذا البرنامج التعليمي يغفل عن قصد دعم هذا الأخير. وبشكل أكثر تحديدًا ، بدون تعديل وظيفة Lambda ، يمكنك فقط استدعاء المهارة باستخدام استدعاء طلقة واحدة. يتيح اختيار التصميم هذا للنموذج أن يكون أكثر بساطة (ليس من الضروري دعم نوايا الإطلاق أو تدفق المحادثة) ، وقد وجدت أنني عادة ما أرغب في التفاعل مع أجهزتي باستخدام استدعاءات طلقة واحدة على أي حال لأنها عادة ما تكون أسرع.

الخطوة 2: تسجيل الأداة على وحدة تحكم مطور خدمة Alexa Voice

فيما يلي وصف للخطوات المطلوبة. لقد قمت بإنشاء مقطع فيديو مكافئ يوضح كيفية القيام بكل هذه الخطوات. يمكنك استخدام أحدهما أو كليهما لإكمال هذه الخطوة.

  1. انتقل إلى https://developer.amazon.com/alexa/console/avs/hom …
  2. إذا لم يكن لديك حساب مجاني بالفعل ، فقم بإنشاء حساب
  3. انقر فوق "المنتجات"
  4. املأ التصنيفات وحدد "Alexa Gadget"
  5. املأ ما تريد لبقية الحقول
  6. انقر فوق "إنهاء"

الخطوة 3: إنشاء وظيفة AWS Lambda ومهارات مخصصة

قم بإنشاء مهارة مخصصة على وحدة تحكم مطور مجموعة مهارات Alexa

يمكن العثور على رمز هذا البرنامج التعليمي هنا

قبل إكمال هذه الخطوة ، ستحتاج إلى إنشاء ملف.zip يحتوي على حزمة النشر لوظيفة AWS Lambda كما هو موضح في البرنامج التعليمي هنا.

  1. قم بتنزيل المجلد "lambda" من Github الخاص بي والذي يحتوي على "lambda_function.py" و "requirements.txt"
  2. افتح الجهاز وقم بتغيير الدليل الحالي ليكون داخل هذا المجلد.
  3. قم بتشغيل التسلسل التالي:

تثبيت نقطة- r المتطلبات. txt -t المهارات_ env

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

سيكون ملف zip الخاص بك الآن موجودًا في الدليل حيث كان مجلد lambda وسيُطلق عليه "المهارات-code.zip".

ملاحظة حول تكلفة الاستضافة على AWS: يتطلب هذا البرنامج التعليمي أن يكون لديك حساب AWS (مجاني للإنشاء). تكلف وظائف Lambda المال ، ومع ذلك ، فإن تسعيرها الحالي في منطقة N. Virginia هو 0.000000208 دولار أمريكي لكل 100 مللي ثانية مع 128 ميجا بايت من الذاكرة. للإشارة ، فإن كل استدعاء لمهاراتي يتطلب 800 مللي ثانية من الاستخدام في هذا المستوى. لجمع فاتورة بقيمة 1.00 دولارًا أمريكيًا ، يجب عليك استدعاء هذه الوظيفة حوالي 600000 مرة والتي (إذا استغرقت 5 ثوانٍ لكل طلب) سوف تستغرق أكثر من 34 يومًا من استدعاء وظيفتك بدون توقف. لا ينبغي أن تكون التكلفة مشكلة كبيرة ما لم تنشر مهارتك ويبدأ عدد كبير من الأشخاص في استخدامها. إذا كنت قلقًا بشأن الحصول على فواتير على AWS ، ففكر في إعداد تنبيهات الاستخدام التي تُعلمك إذا تجاوز الاستخدام حدًا محددًا.

فيما يلي وصف للخطوات المطلوبة. لقد قمت بإنشاء مقطع فيديو مكافئ يوضح كيفية القيام بكل هذه الخطوات. يمكنك استخدام أحدهما أو كليهما لإكمال هذه الخطوة.

  1. انتقل إلى https://aws.amazon.com/ وقم بتسجيل الدخول إلى وحدة التحكم أو إنشاء حساب مجاني إذا لم يكن لديك حساب
  2. ابحث عن Lambda وانقر عليها ضمن الخدمات
  3. انقر فوق "إنشاء وظيفة"
  4. حدد "مؤلف من البداية" ، وامنحه اسمًا ، واختر أحدث إصدار من Python 3 لوقت التشغيل
  5. غيّر "تعديل الشفرة المضمنة" إلى "تحميل ملف.zip" وحدد ملف.zip الذي تم إنشاؤه أعلاه
  6. في نافذة جديدة ، انتقل إلى https://developer.amazon.com/alexa/console/ask وقم بتسجيل الدخول
  7. انقر فوق "إنشاء مهارة"
  8. قم بتسميته ، واختر نموذج "مخصص" و "قدم النموذج الخاص بك" وانقر فوق "إنشاء مهارة"
  9. انقر فوق "ابدأ من الصفر" وانقر فوق "اختيار"
  10. ضمن "النوايا" ، انقر على "إضافة"
  11. أنشئ هدفًا مخصصًا باسم "alexa_to_pi" واملأ "كتابة {شخص}" كنموذج لفظي
  12. أنشئ فتحة نية تسمى "شخص" من النوع "AMAZON. Person"
  13. أنشئ هدفًا مخصصًا باسم "pi_to_alexa" واملأ "تحقق من درجة الحرارة من المستشعر {sensor_num}
  14. أنشئ فتحة نية تسمى "sensor_num" من النوع "AMAZON. NUMBER"
  15. ضمن Interfaces ، قم بتشغيل "Custom Interface Controller"
  16. ضمن نقطة النهاية ، حدد "AWS Lambda ARN" وانسخ "معرف المهارة الخاص بك"
  17. انتقل مرة أخرى إلى وحدة تحكم AWS
  18. انقر فوق "إضافة مشغل"
  19. حدد "Alexa Skills Kit" ، وحدد "Enable" ضمن التحقق من Skill ID ، والصق معرف Skill ID الذي نسخته للتو وانقر فوق "إضافة"
  20. انسخ Lambda ARN في الزاوية اليمنى العليا
  21. انتقل مرة أخرى إلى Alexa Developer Console والصق Lambda ARN في حقل "المنطقة الافتراضية"
  22. ضمن الاستدعاء ، عيِّن اسم استدعاء المهارة ليكون "أداتي"
  23. انقر فوق "حفظ النموذج" ثم "إنشاء نموذج"
  24. انقر فوق "اختبار" في أعلى علامات التبويب وقم بتغيير المحدد من "إيقاف" إلى "تطوير"
  25. لاحظ أن السجلات الخاصة بوظيفة Lambda موجودة في خدمة "CloudWatch" على AWS.

الخطوة 4: قم بإعداد الكود على Raspberry Pi الخاص بك

لكي يتصل Raspberry Pi بجهاز Alexa ، فإنه يحتاج إلى بعض التعليمات البرمجية لتسهيل تمرير المعلومات عبر البلوتوث والحفاظ على هذا الاتصال ، بالإضافة إلى بعض الملفات الأخرى. أسهل طريقة لبدء استخدام أحدث الملفات من Amazon هي استنساخ مستودع Raspberry Pi Gadgets. انتقل إلى دليل مشروعك الحالي وقم بتشغيله

بوابة استنساخ

سيؤدي هذا إلى تحميل مستودعهم بالكامل بكل الشفرات اللازمة على Pi الخاص بك. يحتوي على بعض الأمثلة على المشاريع التي تُظهر بعض إمكانيات أدوات Alexa. إذا كنت ترغب في مزيد من المعلومات ، فراجع الملف التمهيدي على صفحة Github الخاصة بهم.

قم بتشغيل وظيفة الإعداد الخاصة بهم لتهيئة كل شيء.

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

sudo python3 launch.py - الإعداد

اتبع المطالبات واستجب "y" عند سؤالك عما إذا كنت تريد التهيئة باستخدام بيانات اعتماد الأداة الخاصة بك. استرجع معرف Amazon و Gadget Secret من إعداد أداتك على وحدة تحكم المطور حيث سيُطلب منك هنا. اخترت وضع الإرسال "bt" لجهاز Raspberry Pi Zero W. BLE غير مدعوم من قبل جميع أجهزة Echo القديمة ، ولكن يمكنك البحث عن ما يمكن لجهازك القيام به. إذا كنت تستخدم Pi في وضع سطح المكتب ، فإن Amazon توصي بالنقر بزر الماوس الأيمن على أيقونة bluetooth في أعلى اليمين والنقر فوق "إزالة" Bluetooth من اللوحة "لتجنب مشاكل الاتصال.

ملاحظة: قد تستغرق هذه الخطوة بعض الوقت اعتمادًا على مقدار التثبيت المطلوب.

الآن سيكون لديك جميع ملفات الدعم اللازمة للعودة إلى مشروعك والبدء في إضافة الوظائف للسماح بالتواصل مع Echo الخاص بك.

إذا اخترت ، يمكنك حذف مجلد "أمثلة" في "Alexa-Gadgets-Raspberry-Pi-Samples / src"

يمكنك الحصول على رمز المشروع الخاص بك أينما تريد ، لكنني سأقوم بإنشاء مجلد في الدليل الرئيسي له ، أو يمكنك بدلاً من ذلك تنزيل المجلد بالرمز من Github الخاص بي ، فقط تأكد من تحرير ملفات.ini كما هو موضح أدناه.

القرص المضغوط / المنزل / بي

mkdir my_project cd my_project touch my_gadget.py touch my_gadget.ini

لقد قمت الآن بإنشاء ملفين في مجلد يسمى "my_project". ملف. ini مهم. تأكد من احتوائه على ما يلي واستبداله في معرف Amazon و Gadget Secret:

[إعدادات الأداة]

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

الآن ، دعنا نلقي نظرة على ملف python قبل الخوض في التفاصيل:

استيراد json

من agt استيراد AlexaGadget

فئة MyGadget (AlexaGadget):

def _init _ (ذاتي):

سوبر ()._ الحرف الأول _ ()

def on_custom_mygadget_alexatopi (ذاتي ، توجيه):

payload = json.loads (directive.payload.decode ("utf-8")) طباعة ("البيانات المستلمة:" + str (الحمولة)) write_text (str (payload ['data'] ['person'] ['value ']))

def on_custom_mygadget_pitoalexa (ذاتي ، توجيه):

payload = json.loads (directive.payload.decode ("utf-8")) print ("البيانات المستلمة:" + str (الحمولة)) الحمولة = {'data': "يقرأ المسبار" + str (get_temp (الحمولة ['data'] ['sensor_num'] ['value'])) + "degrees."} self.send_custom_event ('Custom. MyGadget'، 'PiToAlexa'، payload) MyGadget (). main ()

ستلاحظ أولاً أنه يستدعي وظيفتين: write_text () و get_temp (). في الكود الخاص بي ، أحدد هذه الوظائف في نفس الملف ، لكنها تعتمد على أجهزتي لذا اخترت حذفها. لقد أرفقت هذا الملف مع تلك الوظائف المحددة فقط لطباعة وإرجاع البيانات الوهمية في حال كنت تريد تشغيل هذا الرمز بالضبط. أود أن أقترح الاختبار باستخدام هذا الرمز الدقيق قبل تعديله للعمل مع مشروعك. لقد أرفقت أيضًا ملف.ini ، ولكن تأكد من الدخول وتغيير المعرف وسر الأداة. تستقبل الوظيفة العليا البيانات التي يتم تمريرها من Alexa. تستقبل الوظيفة السفلية البيانات بنفس التنسيق ، لكن جهاز Alexa سينتظر لمدة خمس ثوانٍ حتى يتم تمرير الحدث مرة أخرى بحملته الخاصة. هذه الحمولة مميزة لأن جهاز Alexa سيتحدث بمحتوياته.

بمجرد حصولك على هذه الملفات ، انتقل إلى مجلد "my_project" وقم بتشغيل ملف python.

sudo إعادة التشغيل

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

إذا كانت هذه هي المرة الأولى التي تقوم فيها بتشغيل البرنامج ، فستحتاج إلى إقرانه بجهاز Echo الخاص بك. تأكد من أن جهاز Echo الخاص بك بالقرب من Raspberry Pi ، لأننا نحتاج إلى السماح باتصال Bluetooth.

في تطبيق Alexa على جهازك المحمول ، انقر فوق "الأجهزة" في الركن الأيمن السفلي.

انقر فوق "Echo & Alexa" في الجزء العلوي الأيسر.

انقر فوق جهاز Echo الخاص بك.

ضمن "WIRELESS" ، انقر على "Bluetooth Devices".

انقر على "إقران جهاز جديد" وسترى أداتك في القائمة.

اضغط على أداتك. يجب أن ترى تقرير Pi الذي تم إقرانه بنجاح.

أثناء مشاهدة الإخراج على Pi ، حاول إعطاء أمر صوتي لـ Echo:

أنت: "Alexa ، اطلب من جهازي فحص درجة الحرارة من المستشعر الأول"

إذا كان كل شيء يعمل بشكل صحيح ، يجب أن تسمع:

صدى: "المسبار يقرأ 120.505 درجة."

أنت: "أليكسا ، أخبر أداتي أن أكتب جورج واشنطن."

يجب أن يطبع Pi:

البيانات المستلمة: {'data': {'person': {'name': 'person'، 'value': 'George Washington'، 'insuranceStatus': 'NONE'}}}

جورج واشنطن"

الخطوة الخامسة: الختم

الفيديو الموضح هنا هو مثال على الأداة التي تعمل مع قراءة درجة الحرارة (نفس المسبار في F مقابل C) وكتابة الأسماء على شاشة بسيطة.

الآن بعد أن تأمل أن يكون لديك شيء يعمل ، يجب أن تحاول الذهاب وتخصيص هذا لجعل مشروعك أكثر قدرة. تذكر أنه يمكنك بسهولة تعديل الأهداف في Alexa Developer Console وأن جميع الفتحات التي تستخدمها سيتم تمريرها إلى Pi في الحمولة. علاوة على ذلك ، يمكنك جعل Alexa يقول أي شيء تريده بمجرد تعديل الحمولة التي تمر بها مرة أخرى في الحدث من كود Raspberry Pi الخاص بك.

يرجى ملاحظة أن هذا البرنامج التعليمي لا يُقصد به أن يكون حلاً نهائيًا لجميع الإمكانات التي قد ترغب فيها باستخدام أداة Alexa Gadget. إنه مقصور عن قصد لمنحك وظيفتين بسيطتين لتمرير البيانات في كل اتجاه بين Alexa و Gadget. إذا كنت مهتمًا ببناء نماذج تفاعل أكثر تعقيدًا ، فإنني أشجعك على قراءة جميع الملفات التمهيدية في https://github.com/alexa/Alexa-Gadgets-Raspberry-P … وتجربة جميع الأمثلة التي يقدمونها. أود أيضًا أن أقترح عليك قراءة الوثائق الخاصة بمجموعة أدوات Alexa Gadgets Toolkit ومجموعة مهارات Alexa.

موصى به: