فهرست مطالب:

کنترل کننده رله Alexa Raspberry Pi: 6 مرحله
کنترل کننده رله Alexa Raspberry Pi: 6 مرحله

تصویری: کنترل کننده رله Alexa Raspberry Pi: 6 مرحله

تصویری: کنترل کننده رله Alexa Raspberry Pi: 6 مرحله
تصویری: Lesson 68, Home Automation: How to control 16 Channel Relay module using Arduino control 16 AC loads 2024, نوامبر
Anonim
کنترل کننده رله Alexa Raspberry Pi
کنترل کننده رله Alexa Raspberry Pi
کنترل کننده رله Alexa Raspberry Pi
کنترل کننده رله Alexa Raspberry Pi
کنترل کننده رله Alexa Raspberry Pi
کنترل کننده رله Alexa Raspberry Pi

من این دستورالعمل را ایجاد کردم تا تجربیات خود را با ادغام دستگاه های IOT با Alexa آمازون به اشتراک بگذارم.

این پروژه اجازه می دهد تا یک برد رله متصل به رزبری pi از کنترل کننده smarthome کنترل شود.

این دستگاه با Alexa آزمایش شده است ، اما به نظر می رسد با Samsung Smartthings و سایر رابط های کنترل نیز به خوبی کار می کند ، زیرا تعدادی از سوکت های Belkin Wemo را شبیه سازی می کند.

بسیاری از مثالها بر اساس کد عالی FAUXMO وجود دارد ، اما این به معنی یادگیری پایتون بود و کنترل دقیقی را که برای دستگاه هایم لازم داشت به من نمی داد ، بنابراین تصمیم گرفتم با استفاده از C به عنوان زبان برنامه نویسی پایه ، یکی را از ابتدا ایجاد کنم.

من همچنین نمی خواستم مجبور شوم به عمق کد lambda در Amazon.com بروم ، بنابراین آن را بسیار ساده نگه داشته ام.

من منبع و یادداشت ها را در Github ارسال کرده ام:

github.com/Switchdoctorstu/StuPiMo

این آموزش واقعاً شامل نحوه کارکردن آن و انتشار یادداشت های من در صورت کمک به دیگران است.

مرحله 1: لوازم و اتصالات

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

موارد مورد نیاز شما به راحتی در Amazon / EBay موجود است:

  • تمشک PI *
  • منبع تغذیه Pi
  • کانکتورهای Dupont
  • برد رله
  • سربی میکرو USB قدیمی (برای برق کارت رله به نصف می رسد)

هر رزبری پای کار می کند ، من این را روی مدل B و Zero آزمایش کرده ام.

*در صورت استفاده از Pi Zero به یک آداپتور شبکه OTG احتیاج دارید (مگر اینکه نسخه W را با هزینه WiFi خریداری کنید)

شما باید Pi را به شبکه متصل کنید.

برای اتصال کارت رله به Pi از اتصال دهنده های dupont استفاده کنید.

توجه داشته باشید که کارت رله باید از برق خارجی استفاده کند (پیوند را بردارید و به 5 ولت خارجی وصل شوید). این دستگاه از PI کار می کند ، اما برای اجرای آن توصیه نمی شود.

برای راه اندازی من از یک USB HUB تغذیه خارجی استفاده کردم. این قدرت را برای PI فراهم می کند.

من همچنین انتهای کابل USB قدیمی را قطع کردم و رله ها را از اتصال USB دوم به هاب تغذیه کردم تا ایمن بمانم. نسخه "تولید" من از منبع تغذیه حالت سوئیچ کوچک 5V 5A استفاده می کند. باز هم من فقط یک سیم USB را به نصف رساندم تا Pi را از طریق Micro-USB تغذیه کنم و دو کانکتور dupont را برای تغذیه برد رله قطع کردم. در سیم USB 4 سیم وجود دارد که بیشتر آنها از رنگ قرمز/مشکی برای نشان دادن منبع تغذیه 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 - +5v برای منطق

مرحله 2: تنظیم PI

من قصد ندارم آموزشی درباره نحوه راه اندازی PI و راه اندازی و اتصال به شبکه ایجاد کنم.

راهنمای زیادی وجود دارد که از جمله آنها می توان به موارد زیر اشاره کرد:

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

باید خود را به جایی برسانید که PI در شبکه قابل مشاهده باشد و بتوانید به آن متصل شوید.

مهم نیست که این از طریق اترنت باشد یا بی سیم.

این پروژه را می توان تنها با Raspberry PI با استفاده از ویرایشگر Geany Programmers تکمیل کرد ، اما من شخصاً راحت تر می توانم کد خود را در رایانه با استفاده از Visual Studio یا Eclipse (یا حتی Notepad ++) انجام دهم و سپس آن را برای اشکال زدایی با استفاده از PI بارگذاری کنم. اتصال VNC باز هم نمی خواهم در اینجا به این موضوع بپردازم زیرا دستورالعمل های بسیار خوبی در زمینه راه اندازی VNC در RPi وجود دارد.

تنها چیزی که نیاز دارید این است که به نقطه ای برسید که بتوانید کد را بارگذاری و کامپایل کنید.

نکته ای که مهم است این است که چون UPNP handler نیاز به UDP multicast دارد ، رابط های مورد استفاده باید روی حالت "Promiscuous" تنظیم شوند.

این را می توان در خط فرمان انجام داد:

pi@raspberrypi: if $ ifconfig eth0 promiscisc

و / یا

pi@raspberrypi: if $ ifconfig wlan0 promiscisc

این باید دائمی شود بنابراین من /etc/rc.local را ویرایش کردم

sudo nano / etc / rc.local

شامل خط:

sudo ifconfig eth0 promisc

پس از اولین مجموعه خطوط # بنر ، برای اطمینان از تنظیم رابط ها در هنگام راه اندازی.

مرحله 3: بارگیری و کامپایل کد

خود کد در مخزن Github من قرار دارد.

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

در حالی که راه های "صحیح" برای کلون کردن مخزن وجود دارد. به نظر من ساده تر است که ویرایشگر Geany را در دسکتاپ Pi باز کنم و کد را در آن جایگذاری کنم.

به طور مشابه ، اگر از خط فرمان استفاده می کنید ؛

یک فهرست جدید ایجاد کنید

mkdir Stu

به آن تغییر دهید

سی دی استو

یک فایل متنی جدید بسازید

نانو StuPiMo.c

کد را از Github خام کپی کرده و در فایل جدید جایگذاری کنید

ذخیره و خروج.

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

gcc -o StuPiMo StuPiMo.c -l wiringPi

توجه داشته باشید که "-l wiringPi" برای اطمینان از پیوند کامپایلر در کتابخانه wiringPi مورد نیاز است.

سپس می توان کد را با استفاده از اجرا کرد

./StuPiMo

مجدداً ، اگر می خواهید این برنامه هنگام راه اندازی اجرا شود ، از دستور زیر استفاده کنید:

sudo nano /etc/rc.local

برای اضافه کردن خط زیر

sudo/home/pi/Stu/StuPiMo &

به فایل /etc/rc.local خود فراموش نکنید که فایل خود را در هنگام خروج ذخیره کنید.

توجه داشته باشید که "&" برای اطمینان از ایجاد یک فرایند فرعی ضروری است تا اطمینان حاصل شود که اسکریپت در این مرحله مسدود نشده است.

مرحله 4: استفاده از آن

وقتی کد را اجرا کردید ، از alexa بخواهید "Discover Devices" و او باید تمام 8 دستگاه Wemo مجازی را پیدا کند.

سپس فقط یک مورد گفته می شود: "الکسا سوکت 1 را روشن کنید" یا "الکسا سوکت 6 را خاموش کنید" و غیره و رله مربوطه تغییر می کند.

مرحله 5: نحوه عملکرد کد

این کد با شبیه سازی مجموعه ای از دستگاه های سوکت Belkin Wemo کار می کند.

برای دستیابی به این امر ، باید 2 عملکرد اصلی را انجام دهد

  • یک کنترل پخش پخش UPNP
  • یک "کنترل کننده دستگاه" (یکی در هر دستگاه مجازی) برای مدیریت فرمان های ارسال شده به دستگاه و پاسخ های مورد نیاز.

یک ویژگی "پاداش" این است که یک صفحه وب را نیز منتشر می کند تا اجازه کنترل دستگاه ها را بدهد.

UPNP Handler

کنترل کننده UPNP یک سوکت برای نظارت بر بسته های پروتکل SSDP در پورت 239.255.255.250 1900 باز می کند.

این برنامه به هرگونه پرسش "M-SEARCH" که با بسته پاسخ اکتشافی ارائه می شود پاسخ می دهد که هر یک از س.ال کنندگان را شبیه ساز wemo فردی اعلام می کند.

کنترل کننده دستگاه

کنترل کننده های دستگاه (یکی در هر دستگاه مجازی) مجموعه ای از پورت های IP را نظارت کرده و به درخواست ها پاسخ می دهد.

در صورت درخواست ، پاسخ setup.xml را ارائه می دهد

در صورت درخواست ، فایل توصیف رویداد را ارائه می دهد

به درخواست GETBINARYSTATE پاسخ می دهد

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

سرور وب

سرور وب یک روال ساده است که یک فرم HTML حاوی یک دکمه در هر رله می سازد.

به دکمه های فشرده شده پاسخ می دهد و بر این اساس وضعیت رله را تغییر می دهد.

مرحله 6: سفارشی سازی و نامهای دوستانه

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

من از کد ساده و قابل ویرایش کردن عصبانی نشده ام.

اصول اولیه را می توان با تعاریف در ابتدای کد سفارشی کرد:

// تعاریف جهانی#تعریف WEBPORT 5353 // پورت برای اجرای سرور وب

#تعریف NUMDEVICES 8 // تعداد دستگاه های مجازی برای ایجاد

#تعریف PORTBASE 43450 // پورت IP پایه برای افزایش از

WEBPORT شماره پورتی است که سرور وب داخلی بر روی آن اجرا می شود. برای سهولت کار ، می توان آن را روی 80 قرار داد ، اما متوجه شدم که این با گربه ماهی یا سایر خدمات محلی در حال اجرا است.

NUMDEVICES تعداد شبیه سازهای WEMO را برای راه اندازی مشخص می کند. اگر کارت رله 2 پورت دارید ، آن را روی 2 ، 4 پورت = 4 و غیره تنظیم کنید.

نامهای دوستانه دستگاهها در روال معمول به نام setup_names تنظیم شده است:

int setup_names (char friendly [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] ، "سوکت 6") ؛

strcpy (دوستانه [6] ، "سوکت 7") ؛

strcpy (دوستانه [7] ، "سوکت 8") ؛

*/

بازگشت i؛

}

من از یک حلقه برای تماس با هر یک از دستگاهها "Socket n" استفاده کردم ، اما شما می توانید این حلقه را حذف کرده و در عوض نامهای دوستانه خود را اضافه کنید (فقط مطمئن شوید که شماره NUMDEVICES را اضافه کرده اید) در صورت حذف / * * /

به یاد داشته باشید که در صورت ایجاد تغییر کد را دوباره کامپایل کنید.

توصیه شده: