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

التحكم في غرفة المعيشة مع Alexa و Raspberry Pi: 12 خطوة
التحكم في غرفة المعيشة مع Alexa و Raspberry Pi: 12 خطوة

فيديو: التحكم في غرفة المعيشة مع Alexa و Raspberry Pi: 12 خطوة

فيديو: التحكم في غرفة المعيشة مع Alexa و Raspberry Pi: 12 خطوة
فيديو: أفضل و أسهل نظام تحكم في المنزل الذكي HomeKit من شركة Apple 2024, شهر نوفمبر
Anonim
التحكم في غرفة المعيشة مع Alexa و Raspberry Pi
التحكم في غرفة المعيشة مع Alexa و Raspberry Pi

تحكم في تلفزيون غرفة المعيشة والأضواء والمروحة باستخدام Alexa (Amazon Echo أو Dot) و Raspberry Pi GPIO.

الخطوة 1: الإعداد الأولي

لقد استخدمت Raspberry Pi 2 وصورة Raspbian Jessie تم تنزيلها من

بمجرد تسجيل الدخول ، أدخل الأوامر التالية لتثبيت الحزم المطلوبة ومكتبات بايثون:

sudo apt-get update && sudo apt-get Upgrade -ysudo apt-get install python2.7-dev python-dev python-pip sudo pip install Flask flask-ask sudo apt-get install lirc

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

إعداد نجروك
إعداد نجروك

قم بزيارة https://ngrok.com/download واحصل على أحدث إصدار من Linux ARM كملف مضغوط وفك الضغط داخل الدليل الرئيسي:

قم بفك ضغط /home/pi/ngrok-stable-linux-arm.zip

افتح طرفية جديدة وأدخل الأمر التالي:

sudo./ngrok http 4000

افتح محطة جديدة أخرى وأدخل الأمر التالي:

sudo./ngrok http 4500

افتح المحطة الثالثة الجديدة وأدخل الأمر التالي:

sudo./ngrok http 5000

الخطوة 3: برنامج Python Script للتحكم في مفتاح الإضاءة

افتح جلسة طرفية جديدة وأنشئ ملف python جديدًا باسم light_control.py:

نانو light_control.py

انسخ / الصق الكود التالي في الملف الجديد:

من flask import Flaskfrom flask_ask import Ask، بيان، convert_errors استيراد RPi. GPIO مثل استيراد تسجيل استيراد GPIO os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app، '/') logging.getLogger (" flask_ask "). setLevel (logging. DEBUG) @ ask.intent ('LightControlIntent'، mapping = {'status': 'status'}) def light_control (status): try: pinNum = 27 باستثناء Exception كـ e: return statement ("رقم التعريف الشخصي غير صالح.") GPIO.setup (pinNum، GPIO. OUT) إذا كانت الحالة في ['on'، 'high']: GPIO.output (pinNum، GPIO. LOW) إذا كانت الحالة في ['off'، ' low ']: GPIO.output (pinNum، GPIO. HIGH) إرجاع البيان (' Turning {} the Living Room Lights'.format (status)) if _name_ == '_main_': port = 4000 app.run (host = ' 0.0.0.0 '، المنفذ = المنفذ)

أحفظ وأغلق الملف.

ابدأ خادم القارورة بـ:

sudo python light_control.py

اترك كلاً من ngrok و light_control.py قيد التشغيل

الخطوة 4: Python Script للتحكم في المروحة

افتح جلسة طرفية جديدة وأنشئ ملف python جديدًا باسم fan_control.py:

نانو fan_control.py

انسخ / الصق الكود التالي في الملف الجديد:

من القارورة استيراد القارورة

من flask_ask import Ask ، بيان ، convert_errors استيراد RPi. GPIO مثل GPIO استيراد تسجيل استيراد نظام التشغيل GPIO.setmode (GPIO. BCM) التطبيق = Flask (_ name_) ask = Ask (app، '/') logging.getLogger ("flask_ask").setLevel (logging. DEBUG) @ ask.intent ('FanControlIntent'، mapping = {'status': 'status'}) def fan_control (status): جرب: pinNum = 22 باستثناء استثناء كـ e: return statement ('Pin number غير صالح. ') GPIO.setup (pinNum، GPIO. OUT) إذا كانت الحالة في [' on '،' high ']: GPIO.output (pinNum، GPIO. LOW) إذا كانت الحالة في [' off '،' low ']: GPIO.output (pinNum، GPIO. HIGH) إرجاع البيان ('Turning {} the Living Room Lights'.format (status)) if _name_ ==' _main_ ': port = 4500 app.run (host =' 0.0.0.0 '، المنفذ = المنفذ)

أحفظ وأغلق الملف.

ابدأ خادم القارورة بـ:

sudo python fan_control.py

اترك كلاً من ngrok و light_control.py و fan_control.py قيد التشغيل

الخطوة 5: تثبيت وتكوين حزمة LIRC

من أجل التحكم في التلفزيون ، يجب عليك تكوين دبوس على Raspberry Pi لتوليد إشارات الأشعة تحت الحمراء (IR) للتلفزيون الخاص بك. افتح Terminal وأدخل الأمر التالي لتثبيت حزمة LIRC التي تحاكي إشارات الأشعة تحت الحمراء للعديد من أجهزة التحكم عن بُعد.

sudo apt-get install lirc

بعد ذلك ، تحتاج إلى تمكين وتكوين وحدة lirc_rpi kernel. للقيام بذلك ، افتح الوحدات النمطية في محرر Nano

sudo نانو / الخ / وحدات

أضف الأسطر أدناه إلى الملف (تأكد من أن معلمة gpio_out_pin تشير إلى الدبوس الذي يتحكم في IR LED):

lirc_devlirc_rpi gpio_out_pin = 17

بعد ذلك ، افتح ملف Hardware.conf في Nano كما كان من قبل باستخدام sudo:

sudo nano /etc/lirc/hardware.conf

أضف التكوين التالي إلى الملف:

LIRCD_ARGS = "- uinput" LOAD_MODULES = صحيح

السائق = "افتراضي"

الجهاز = "/ dev / lirc0"

الوحدات = "lirc_rpi"

LIRCD_CONF = ""

LIRCMD_CONF = ""

الآن ، أعد تشغيل Raspberry Pi:

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

الخطوة 6: Python Script for TV Control

افتح جلسة طرفية جديدة وأنشئ ملف python جديدًا باسم ir_control.py:

نانو ir_control.py

انتقل إلى

ابحث عن جهاز تحكم عن بعد متوافق مع تلفزيونك. في حالتي ، لدي تلفزيون Sanyo يعمل مع ملف التكوين sanyo-tv01. بمجرد العثور على ملف يدعم التلفزيون ، افتحه وابحث في خيارات الأوامر.

انسخ / الصق الكود التالي في الملف الجديد واستبدل sanyo-tv01 باسم الملف الذي يعمل مع التلفزيون. تأكد أيضًا من دعم أوامر التلفزيون بواسطة ملف تكوين أجهزة التلفزيون ؛ قد تضطر إلى تعديل أوامر KEY_POWER و KEY_VIDEO و KEY_VOLUMEUP و KEY_VOLUMEDOWN و KEY_MUTE للعمل بشكل صحيح مع ملف تهيئة التلفزيون:

من flask import Flaskfrom flask_ask import Ask، بيان، convert_errors استيراد RPi. GPIO مثل استيراد تسجيل استيراد GPIO os GPIO.setmode (GPIO. BCM) app = Flask (_ name_) ask = Ask (app، '/') logging.getLogger (" flask_ask "). setLevel (logging. DEBUG) @ ask.intent ('GPIOControlIntent'، mapping = {'status': 'status'}) # 'pin': 'pin'}) def tv_function (status): if status in ['تشغيل']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER") بيان إرجاع ('Turning on the TV') حالة elif في ['إيقاف']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_POWER ") return statement (" Turning off the TV ") حالة elif في ['change input']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VIDEO ") إرجاع عبارة ('تغيير الإدخال على التلفزيون') حالة elif في ['زيادة الحجم']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP ") os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEUP ") بيان إرجاع ('زيادة حجم الصوت على التلفزيون') حالة elif في ['تقليل الحجم']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN ") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.system ("irsend SEND_ONCE sanyo-tv01 KEY_VOLUMEDOWN") os.systemEND_ONCE ") return statement ('Decreasing the TV') elif status in ['mute']: os.system (" irsend SEND_ONCE sanyo-tv01 KEY_MUTE ") return statement ('Muting the TV') elif status in ['unmute ']: os.system ("irsend SEND_ONCE sanyo-tv01 KEY_MUTE") بيان إرجاع (' Unmuting the TV ') else: return statement (' Remote function not found. ') if _name_ ==' _main_ ': port = 5000 app.run (المضيف = '0.0.0.0' ، المنفذ = المنفذ)

أحفظ وأغلق الملف.

ابدأ خادم القارورة بـ:

sudo python ir_control.py

اترك جميع نوافذ ngrok الطرفية الثلاثة ، light_control.py ، fan_control.py ، و ir_control.py قيد التشغيل

الخطوة 7: تسجيل الدخول إلى حساب AWS

قم بتسجيل الدخول إلى حساب AWS
قم بتسجيل الدخول إلى حساب AWS

قم أولاً بإنشاء أو تسجيل الدخول إلى حساب مطور AWS الخاص بك وافتح قائمة مهارات Alexa الخاصة بك.

الخطوة 8: إعداد TV Alexa Skill

إعداد مهارات أليكسا التلفزيونية
إعداد مهارات أليكسا التلفزيونية

حدد "إضافة مهارة جديدة".

عيّن اسم المهارة على "Trigger TV" واسم الاستدعاء للكلمة (الكلمات) التي تريد استخدامها لتنشيط المهارة.

انقر فوق Next للمتابعة.

انسخ / الصق ما يلي في مربع "مخطط الهدف":

"الفتحات": [{"name": "status"، "type": "TV_Function"}، {"name": "amount"، "type": "AMAZON. NUMBER"}]، "intent": "GPIOControlIntent "}]}

بعد ذلك ، انقر فوق "إضافة نوع الفتحة"

أدخل TV_Function في حقل "إدخال النوع".

أدخل القيم التالية في حقل "إدخال القيم":

شغله

قم بإيقاف تشغيل إدخال التغيير زيادة مستوى الصوت خفض مستوى الصوت إلغاء كتم الصوت

بعد ذلك ، انسخ / الصق ما يلي في مربع "نموذج الألفاظ":

GPIOControlIntent {status}

GPIOControlIntent {status} بمقدار {amount}

انقر فوق Next للمتابعة.

حدد HTTPS كنوع نقطة نهاية الخدمة وحدد منطقة ، أدخل عنوان URL الخاص بـ ngrok من الخطوة 2 وانقر فوق "التالي". يجب أن يكون عنوان URL مشابهًا لما يلي:

ed6ea04d.ngrok.io

انقر فوق "التالي" للمتابعة واضغط على "حفظ".

الخطوة 9: إضاءة إعداد مهارات Alexa

أضواء إعداد مهارات اليكسا
أضواء إعداد مهارات اليكسا

أغلق المهارة المفتوحة وحدد "إضافة مهارة جديدة".

عيّن اسم المهارة على "التحكم في الأضواء" واسم الاستدعاء للكلمة (الكلمات) التي تريد استخدامها لتنشيط المهارة.

انقر فوق Next للمتابعة. انسخ / الصق ما يلي في مربع "مخطط الهدف":

{

"النوايا": [{"الفتحات": [{"الاسم": "الحالة" ، "النوع": "LIGHTS_CONTROL"}] ، "الهدف": "LightsControlIntent"}]}

بعد ذلك ، انقر فوق "إضافة نوع فتحة".

أدخل "LIGHTS_CONTROL" في حقل "إدخال النوع".

أدخل القيم التالية في حقل "إدخال القيم":

تشغيل

إيقاف

بعد ذلك ، انسخ / الصق ما يلي في مربع "نموذج الألفاظ":

LightsControlIntent turn {status}

انقر فوق Next للمتابعة. حدد "HTTPS" كنوع نقطة نهاية الخدمة وحدد منطقة. أدخل عنوان URL لـ ngrok من الخطوة 2 وانقر فوق "التالي". يجب أن يكون عنوان URL مشابهًا لما يلي:

ed6ea04d.ngrok.io

انقر فوق "التالي" للمتابعة واضغط على "حفظ".

الخطوة 10: إعداد Fan Alexa Skill

إعداد مهارة مروحة اليكسا
إعداد مهارة مروحة اليكسا

أغلق المهارة المفتوحة وحدد "إضافة مهارة جديدة".

عيّن اسم المهارة على "التحكم في المعجبين" واسم الاستدعاء للكلمة (الكلمات) التي تريد استخدامها لتنشيط المهارة.

انقر فوق Next للمتابعة.

انسخ / الصق ما يلي في مربع "مخطط الهدف":

{

"النوايا": [{"الفتحات": [{"الاسم": "الحالة" ، "النوع": "FAN_CONTROL"}] ، "الهدف": "FANControlIntent"}]}

بعد ذلك ، انقر فوق "إضافة نوع فتحة".

أدخل "FAN_CONTROL" في حقل "إدخال النوع".

أدخل القيم التالية في حقل "إدخال القيم":

تشغيل

إيقاف

بعد ذلك ، انسخ / الصق ما يلي في مربع "نموذج الألفاظ":

FANControlIntent turn {status}

انقر فوق Next للمتابعة. حدد "HTTPS" كنوع نقطة نهاية الخدمة وحدد منطقة. أدخل عنوان URL لـ ngrok من الخطوة 2 وانقر فوق "التالي". يجب أن يكون عنوان URL مشابهًا لما يلي:

ed6ea04d.ngrok.io

انقر فوق "التالي" للمتابعة واضغط على "حفظ".

الخطوة 11: بناء Ciruit

بناء Ciruit
بناء Ciruit

قم بتوصيل الدائرة كما هو موضح في الرسم التخطيطي. لقد استخدمت JBtek 8 Channel DC 5V Relay Module للاتصال بمنزلي AC 120v خط والأرض.

الخطوة 12: أوامر Alexa

الآن يمكن نطق الأوامر التالية إلى Alexa للتحكم في غرفة المعيشة الخاصة بك.

موصى به: