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

وحدة تحكم المرحل Alexa Raspberry Pi: 6 خطوات
وحدة تحكم المرحل Alexa Raspberry Pi: 6 خطوات

فيديو: وحدة تحكم المرحل Alexa Raspberry Pi: 6 خطوات

فيديو: وحدة تحكم المرحل Alexa Raspberry Pi: 6 خطوات
فيديو: How to use 2 channel relay to control AC and DC loads in Arduino 2024, يوليو
Anonim
أليكسا رازبيري باي ريلاي كونترولر
أليكسا رازبيري باي ريلاي كونترولر
أليكسا رازبيري باي ريلاي كونترولر
أليكسا رازبيري باي ريلاي كونترولر
أليكسا رازبيري باي ريلاي كونترولر
أليكسا رازبيري باي ريلاي كونترولر

لقد أنشأت هذا Instructable لمشاركة تجاربي مع دمج أجهزة IOT مع Alexa من Amazon.

يتيح هذا المشروع التحكم في لوحة الترحيل المتصلة بـ Raspberry Pi من وحدة تحكم smarthome.

تم اختباره مع Alexa ولكن يبدو أيضًا أنه يعمل بشكل جيد مع Samsung Smartthings وواجهات التحكم الأخرى لأنه يحاكي سلسلة من مآخذ Belkin Wemo.

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

لم أرغب أيضًا في الذهاب إلى أعماق كود lambda على Amazon.com ، لذلك أبقيته بسيطًا حقًا.

لقد قمت بنشر المصدر والملاحظات على Github:

github.com/Switchdoctorstu/StuPiMo

البرنامج التعليمي هو في الواقع لتغطية كيفية تشغيله ونشر ملاحظاتي في حال كان ذلك يساعد الآخرين.

الخطوة 1: المستلزمات والتوصيلات

اللوازم والتوصيلات
اللوازم والتوصيلات
اللوازم والتوصيلات
اللوازم والتوصيلات
اللوازم والتوصيلات
اللوازم والتوصيلات

الأشياء التي تحتاجها متاحة بسهولة على Amazon / EBay:

  • فطيرة التوت *
  • مصدر الطاقة Pi
  • موصلات دوبونت
  • مجلس تتابعي
  • سلك USB صغير قديم (لقطع نصفين للطاقة لبطاقة الترحيل)

سيعمل أي Raspberry Pi ، لقد اختبرت هذا على طراز B و Zero.

* إذا كنت تستخدم Pi Zero ، فستحتاج إلى محول شبكة OTG (ما لم تشتري الإصدار "W" مع مدمج في WiFi)

ستحتاج إلى توصيل Pi بالشبكة.

استخدم connetors dupont لتوصيل بطاقة الترحيل بـ Pi.

لاحظ أن بطاقة الترحيل يجب أن تستخدم طاقة خارجية (أزل الرابط واتصل بجهد 5 فولت خارجي). سيعمل بالطاقة من PI ولكن لا ينصح به لتشغيل الإنتاج.

من أجل الإعداد الخاص بي ، استخدمت محور USB يعمل بالطاقة خارجيًا. هذا يوفر القوة ل PI.

لقد قطعت أيضًا نهاية كبل USB قديم وقمت بتشغيل المرحلات من اتصال USB ثانٍ إلى المحور للبقاء آمنًا. يستخدم إصدار "الإنتاج" الخاص بي مصدر طاقة صغير لوضع التبديل 5V 5A. مرة أخرى ، قمت فقط بقطع سلك USB إلى النصف لتشغيل Pi عبر Micro-USB وقطعت اثنين من موصلات الدوبونت لتشغيل لوحة الترحيل. هناك 4 أسلاك في سلك USB ، يستخدم معظمها اللون الأحمر / الأسود للإشارة إلى مصدر 5 فولت ولكن إذا كنت في شك ، استخدم مقياسًا للتأكد من حصولك على الأسلاك الصحيحة.

يتم توصيل دبابيس الترحيل الموجودة على اللوحة بدبابيس GPIO ذات الصلة على رأس PI.

يسمح لك الرمز باختيار دبابيس GPIO ولكن الافتراضي الذي استخدمته هو:

  1. مرحل دبوس 1 - أرضي
  2. مرحل دبوس 2 - مرحل 1 - GPIO 0
  3. مرحل دبوس 3 - مرحل 2 - GPIO 1
  4. مرحل دبوس 4 - مرحل 3 - GPIO 2
  5. مرحل رقم 5 - مرحل 4 - GPIO 3
  6. دبوس التتابع 6 - المرحل 5 - GPIO 4
  7. مرحل دبوس 7 - مرحل 6 - GPIO 5
  8. مرحل رقم 8 - مرحل 7 - GPIO 6
  9. دبوس التتابع 9 - المرحل 8 - GPIO 7
  10. مرحل دبوس 10 - + 5 فولت للمنطق

الخطوة 2: إعداد PI

لن أقوم بإعادة إنشاء برنامج تعليمي حول كيفية تشغيل PI وتشغيله وتوصيله بالشبكة.

هناك العديد من الأدلة بما في ذلك تعليمات ممتازة في:

www.instructables.com/id/Ultimate-Raspberr…

ستحتاج إلى الوصول إلى النقطة التي يكون فيها PI مرئيًا على الشبكة ويمكنك الاتصال بها.

لا يهم ما إذا كان هذا عبر Ethernet أو Wireless.

يمكن إكمال هذا المشروع باستخدام Raspberry PI فقط باستخدام محرر Geany Programmers ، لكنني شخصياً أجد أنه من الأسهل القيام بإعداد الكود الخاص بي على جهاز كمبيوتر باستخدام Visual Studio أو Eclipse (أو حتى Notepad ++) ثم تحميله إلى PI لتصحيح الأخطاء باستخدام اتصال VNC. مرة أخرى ، لن أغطي ذلك هنا حيث يوجد العديد من التعليمات الممتازة حول إعداد VNC على RPi.

كل ما تحتاجه هو الوصول إلى النقطة التي يمكنك من خلالها تحميل وتجميع الشفرة.

ملاحظة واحدة مهمة هي أنه نظرًا لأن معالج UPNP يتطلب الإرسال المتعدد لـ UDP ، يجب تعيين الواجهات المستخدمة على الوضع "منحل".

يمكن القيام بذلك في سطر الأوامر:

pi @ raspberrypi: ~ ifconfig eth0 promisc

و / أو

pi @ raspberrypi: ~ ifconfig wlan0 promisc

يجب أن يكون هذا دائمًا ، لذا قمت بتحرير /etc/rc.local

sudo nano / etc / rc.local

لتضمين الخط:

sudo ifconfig eth0 promisc

بعد أول مجموعة من خطوط banner # للتأكد من أن الواجهات قد تم ضبطها عند بدء التشغيل.

الخطوة 3: تنزيل وتجميع التعليمات البرمجية

الكود نفسه موجود في مستودع جيثب الخاص بي ؛

github.com/Switchdoctorstu/StuPiMo/blob/ma…

بينما توجد طرق "صحيحة" لاستنساخ المستودع. لقد وجدت أنه من الأسهل فقط فتح محرر Geany على سطح مكتب Pi ولصق الكود.

وبالمثل ، إذا كنت تستخدم سطر الأوامر ؛

قم بإنشاء دليل جديد

مكدير ستو

التغيير إليه

سي دي ستو

أنشئ ملفًا نصيًا جديدًا

نانو StuPiMo.c

انسخ الكود من ملف Github الخام والصقه في الملف الجديد

حفظ وخروج.

بمجرد حصولك على الملف ككائن شفرة مصدر C ، يمكنك تجميعه باستخدام

مجلس التعاون الخليجي -o StuPiMo StuPiMo.c -l wiring

لاحظ أن "-l wiringPi" ضروري للتأكد من أن روابط التكميلية في مكتبة wiringPi المطلوبة.

يمكن بعد ذلك تشغيل الكود باستخدام

./StuPiMo

مرة أخرى ، إذا كنت تريد تشغيل هذا عند بدء التشغيل ، فاستخدم الأمر:

sudo nano /etc/rc.local

لإضافة السطر التالي

sudo / home / pi / Stu / StuPiMo &

إلى ملف /etc/rc.local الخاص بك. لا تنس حفظ ملفك عند الخروج.

لاحظ أن "&" ضرورية لضمان حدوث عملية فرعية لضمان عدم حظر البرنامج النصي في هذه المرحلة.

الخطوة 4: استخدامه

بمجرد تشغيل الكود ، اطلب من alexa "اكتشاف الأجهزة" ويجب أن تجد جميع أجهزة Wemo الافتراضية الثمانية.

ثم إنها مجرد حالة تقول: "Alexa turn on socket 1" أو "Alexa turn off socket 6" وما إلى ذلك وسيتم تغيير التتابع ذي الصلة.

الخطوة 5: كيف تعمل الكود

يعمل الكود عن طريق محاكاة سلسلة من أجهزة مقبس Belkin Wemo.

لتحقيق ذلك ، يجب أن يتعامل مع وظيفتين رئيسيتين

  • معالج بث اكتشاف UPNP
  • "معالج الجهاز" (واحد لكل جهاز افتراضي) لإدارة الأوامر المرسلة إلى الجهاز والاستجابات المطلوبة.

ميزة "المكافأة" هي أنها تنشر أيضًا صفحة ويب للسماح بالتحكم في الأجهزة.

معالج UPNP

يفتح معالج UPNP مأخذ توصيل لمراقبة حزم بروتوكول SSDP على 239.255.255.250 منفذ 1900.

إنه يستجيب لأي استفسارات "M-SEARCH" تأتي مع حزمة استجابة اكتشاف تُظهر محاكيات wemo الفردية لأي شخص يسأل.

معالج الجهاز

تراقب معالجات الجهاز (واحد لكل جهاز افتراضي) سلسلة من منافذ IP وتستجيب للطلبات.

سيقدم استجابة setup.xml عندما يُطلب منك ذلك

سيخدم ملف وصف الحدث عندما يُطلب منك ذلك

وسوف تستجيب لطلب GETBINARYSTATE

ستقوم بمعالجة طلب SETBINARYSTATE والرد عليه

قاعدة بيانات للانترنت

خادم الويب عبارة عن إجراء بسيط يقوم بإنشاء نموذج HTML يحتوي على زر لكل مرحل.

سوف تستجيب للأزرار التي يتم الضغط عليها وتبديل حالة الترحيل وفقًا لذلك.

الخطوة 6: التخصيص والأسماء الودية

التخصيص والأسماء الودية
التخصيص والأسماء الودية

لم أشعر بالجنون تجاه الكود لإبقائه بسيطًا وقابل للتعديل.

يمكن تخصيص الأساسيات من خلال التعريفات في بداية الكود:

// تعريفات عالمية # حدد WEBPORT 5353 // منفذ لتشغيل خادم الويب عليه

#define NUMDEVICES 8 // عدد الأجهزة الافتراضية المراد إنشاؤها

#define PORTBASE 43450 // منفذ IP الأساسي للزيادة منه

WEBPORT هو رقم المنفذ الذي يعمل عليه خادم الويب المدمج. يمكن جعل هذا الجلوس عند 80 لتسهيل الأمور ولكني وجدت أنه يتعارض مع القط أو الخدمات الأخرى التي تعمل محليًا.

يحدد NUMDEVICES عدد محاكيات WEMO الفردية التي سيتم تشغيلها. إذا كان لديك بطاقة ترحيل ذات منفذين ، فاضبط هذا على 2 ، 4 منافذ = 4 إلخ.

يتم تعيين الأسماء المألوفة للأجهزة في روتين يسمى setup_names:

int setup_names (char مألوف [NUMDEVICES] [NAMELEN]) {int i = 0 ؛

// استخدم هذه الحلقة

لـ (i = 0 ؛ i <NUMDEVICES ؛ i ++) {

sprintf (ودية ، "مأخذ التوصيل٪ d" ، i + 1) ؛

}

// أو الجدول اليدوي التالي لتعبئة أسماء الأجهزة

/*

strcpy (ودية [0] ، "تلفزيون غرفة النوم") ؛

strcpy (ودود [1] ، "بطانية كهربائية") ؛

strcpy (ودية [2] ، "مصباح غرفة النوم") ؛

strcpy (ودية [3] ، "مقبس 4") ؛

strcpy (ودية [4] ، "مقبس 5") ؛

strcpy (ودية [5] ، "Socket 6") ؛

strcpy (ودية [6] ، "مقبس 7") ؛

strcpy (ودية [7] ، "مقبس 8") ؛

*/

العودة أنا

}

لقد استخدمت حلقة للاتصال بكل جهاز من الأجهزة 'Socket n' ولكن يمكنك حذف هذه الحلقة وإضافة الأسماء المألوفة الخاصة بك بدلاً من ذلك (فقط تأكد من إضافة نفس الرقم مثل NUMDEVICES) إذا قمت بحذف / * * /

تذكر إعادة تجميع الكود إذا قمت بإجراء أي تغييرات.

موصى به: