فهرست مطالب:

مرکز اتوماسیون Raspberry Pi-Arduino-SignalR Home: 11 مرحله (همراه با تصاویر)
مرکز اتوماسیون Raspberry Pi-Arduino-SignalR Home: 11 مرحله (همراه با تصاویر)

تصویری: مرکز اتوماسیون Raspberry Pi-Arduino-SignalR Home: 11 مرحله (همراه با تصاویر)

تصویری: مرکز اتوماسیون Raspberry Pi-Arduino-SignalR Home: 11 مرحله (همراه با تصاویر)
تصویری: نصب و کار با سیستم عامل رزبری پای روی ماشین مجازی 😍😍 2024, نوامبر
Anonim
مرکز اتوماسیون خانگی Raspberry Pi-Arduino-SignalR
مرکز اتوماسیون خانگی Raspberry Pi-Arduino-SignalR

پس از چند IBLE مقدماتی که در اینجا و اینجا منتشر شده است ، این پروژه اولین قدم را در جهت ایجاد نسخه اصلی یک هاب خودکار خانگی کاربردی بر می دارد.

من از چندین فناوری مختلف در تلاش برای درک اینکه چگونه ممکن است بتوانم از همه چیزهایی که در گذشته آموخته ام و چیزهای جدیدی که با پیشرفت روزها یاد می گیرم ، استفاده کنم.

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

پایگاه داده SQL Server 2012 که:

  • لیستی از کدهای مادون قرمز (IR) از پیش تعیین شده را در یک جدول به همراه یک "کلید کد" منحصر به فرد ذخیره می کند
  • کلیدهای کد بصورت شهودی (توسط کاربر) نامگذاری می شوند تا هدف کدهای IR مرتبط آنها مشخص شود

یک برنامه وب ASP. NET SignalR Hub در زمان واقعی که:

  • منتظر است و "کلیدهای کد" را به عنوان دستوراتی از کاربر که با سرویس گیرنده HTML روبرو است دریافت می کند
  • پس از دریافت ، به پایگاه داده SQL متصل می شود و با استفاده از کلید کد ارائه شده ، کد IR را بازیابی می کند
  • کد IR بازیابی شده را به یک سرویس گیرنده Python SignalR منتقل می کند

کاربری که با سرویس گیرنده داشبورد HTML SignalR مواجه است که:

  • یک کلید کد منحصر به فرد را از طریق API های jQuery SignalR Client به Hub منتقل می کند
  • هر دکمه روی داشبورد نشان دهنده یک کلید کد منحصر به فرد است که در جدول پایگاه داده SQL ثبت شده است

یک برنامه خدمات پس زمینه Python SignalR که بر روی Raspberry Pi 2.0 اجرا می شود که:

  • کدهای IR را به عنوان دستوراتی از Hub دریافت می کند
  • به دنبال محدود کننده ها در کد IR است و کد بسیار طولانی را به بخش تقسیم می کند
  • از طریق پورت سریال با آردوینو ارتباط برقرار می کند و هر قسمت را پیاپی می نویسد

یک طرح فرستنده IR آردوینو که:

  • منتظر است و هر یک از بخش های کد IR را از طریق درگاه سریال دریافت می کند
  • قطعات کد را در یک آرایه بافر کد IR مونتاژ می کند
  • بافر را با استفاده از کتابخانه IRLib Arduino به دستور IR Transmit بسته بندی می کند

اگر دستگاه مورد نظر در مجاورت فرستنده IR قرار دارد ، دستگاه (ممکن است) به سیگنال IR منتقل شده توسط آردوینو واکنش نشان دهد

توجه داشته باشید

اگرچه ، دستگاه موردنظر من در این تظاهرات به سیگنالهای IR واکنش نشان می دهد ، اما ممکن است بخواهید این قسمت از IBLE دیگر من را بخوانید زیرا من می گویم دستگاه (ممکن است) به سیگنال IR واکنش نشان دهد.

زمان غلتیدن.

مرحله 1: آنچه شما نیاز دارید ، قبل از آنچه شما نیاز دارید

آنچه شما نیاز دارید ، قبل از آنچه شما نیاز دارید
آنچه شما نیاز دارید ، قبل از آنچه شما نیاز دارید
آنچه شما نیاز دارید ، قبل از آنچه شما نیاز دارید
آنچه شما نیاز دارید ، قبل از آنچه شما نیاز دارید
آنچه شما نیاز دارید ، قبل از آنچه شما نیاز دارید
آنچه شما نیاز دارید ، قبل از آنچه شما نیاز دارید

این دستورالعمل با برخی از کارهایی که قبلاً انجام شده بود و همچنین منجر به آخرین IBLE من شد ، انجام می شود.

بنابراین ، قبل از اینکه به آنچه برای این IBLE نیاز داریم قدم بگذاریم ، توصیه می شود این مقاله را برای چند سابقه در مورد نحوه مطالعه:

  1. کتابخانه مادون قرمز Arduino IRLib راه اندازی شد
  2. چگونه کدهای IR مورد استفاده در این IBLE با استفاده از گیرنده IR ثبت شد
  3. چگونه از کدهای IR گرفته شده برای کنترل دستگاه هدف از طریق فرستنده IR استفاده شد

پس از تکمیل این IBLE ، من یک برنامه وب ASP. NET IR Code Recorder را به کار گرفتم که:

  • کد IR ضبط شده را به همراه یک کلید کد بصری به عنوان ورودی از طریق فرم وب بپذیرید
  • کد IR بسیار طولانی را به بخشهای کمتر از 64 کاراکتر تقسیم کنید تا زیر محدودیت بافر سریال Arduino Uno بمانید.
  • آخرین بخش کدها با "E" از قبل ثابت می شود که به Arduino نشان می دهد که آخرین بخش کد را دریافت کرده است
  • هر بخش قبل از اینکه دوباره در یک رشته بلند مونتاژ شود ، توسط یک محدود کننده لوله جدا می شود
  • در نهایت ، IR کد تقسیم بندی شده به همراه کلید کد آن در پایگاه داده SQL Server 2012 ذخیره شد

این پایگاه داده SQL است که یکی از اجزای مرکز اتوماسیون خانگی را تشکیل می دهد که در این IBLE توضیح داده شده است.

توجه داشته باشید

برنامه وب IR Code Recorder به دلایل زیر بخشی از بحث را در اینجا تشکیل نمی دهد:

  • می توانید کدها را به صورت دستی با استفاده از Arduino Sketch ضبط کنید ، آنها را به بخشهای محدود شده از لوله تقسیم کرده و بدون نیاز به ایجاد یک برنامه وب مفصل ، آنها را در پایگاه داده ذخیره کنید.
  • برخلاف این IBLE ، IR Recorder بر ارتباط معکوس از آردوینو تا رزبری پای تمرکز می کند

بنابراین جزئیات این پروژه موضوعی برای IBLE دیگر خواهد بود

مرحله 2: آنچه شما نیاز دارید - سخت افزار

آنچه شما نیاز دارید - سخت افزار
آنچه شما نیاز دارید - سخت افزار
آنچه شما نیاز دارید - سخت افزار
آنچه شما نیاز دارید - سخت افزار

یک Raspberry Pi 2.0 کاربردی - من توصیه می کنم Ubuntu Mate را نصب کنید زیرا دارای ویژگی های غنی تری از جمله OpenLibre Office است که به هر حال در مستندسازی این دستورالعمل ، دقیقاً در Raspberry Pi ضروری بود.

علاوه بر این ، Pi ، به موارد خارجی زیر نیاز دارید:

  • پلت فرم نمونه اولیه Arduino Uno یا کلون
  • یک LED فرستنده IR - من از مارکی به نام Three Legs از Amazon.com استفاده کردم
  • 330 یا یک مقاومت 220 اهم-من از 220 (کد رنگ قرمز-قرمز-قهوه ای) استفاده کردم زیرا چندین مورد مفید داشتم
  • تخته نان معمولی ، اتصالات و رایانه شخصی با محیط آردوینو نصب شده است
  • یک نامزد آزمون - مانند مانیتور LED سامسونگ در همه جا با ریموت

مرحله 3: آنچه شما نیاز دارید - نرم افزار

برای جمع آوری همه قطعات ، نرم افزار زیر باید نصب و اجرا شود:

در Raspberry Pi ، موارد زیر را باید نصب کنید:

  • Arduino IDE - برای ساخت Sketch و فلش آن به UNO استفاده می شود
  • ماژول پایتون برای آردوینو - برای ارتباط سری بین UNO و Pi
  • کتابخانه سرویس گیرنده Python SignalR - می توانید به دستورالعمل های پیوست شده در اینجا مراجعه کنید

یک دستگاه ویندوز با محیط توسعه زیر نصب شده است:

  • نسخه رایگان Microsoft Visual Studio Express 2013 برای ایجاد برنامه SignalR Hub و سرویس گیرنده وب
  • نسخه رایگان SQL Server 2012 Express برای طراحی و ساخت پایگاه داده پشتیبان

محیط میزبانی سرور اطلاعات اینترنت Windows (IIS):

  • هنگامی که سرویس گیرنده SignalR Hub و Web ساخته و آزمایش می شود ، باید در یک سرور IIS محلی مستقر شود
  • در مورد من ، من قصد دارم از یک لپ تاپ قدیمی ویندوز 7 با IIS در شبکه خانگی خود استفاده کنم

توجه داشته باشید

همه دستورالعمل ها برای نسخه پایتون 2.7.x قابل اجرا هستند. نسخه 3.0 ممکن است نیاز به بازنویسی داشته باشد

مرحله 4: پایگاه داده SQL Server

پایگاه داده SQL Server
پایگاه داده SQL Server

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

جدول AutoHubCode

دو ستون مهم در این جدول عبارتند از:

AutoCodeKey - نام کاربر پسند کلید کد را ذخیره می کند

هر یک از کلیدهای کد توسط یک کلاینت اتوماسیون - در مورد ما ، یک دکمه HTML از یک صفحه وب منتقل می شود

AutoCodeVal - توالی خام کد IR را ذخیره می کند

این کد IR واقعی است که در پاسخ توسط مرکز SignalR به مشتری ارسال می شود

در این حالت ، یک سرویس گیرنده پایتون در ارتباط مداوم با هاب ، توالی کد IR را دریافت می کند و آن را از طریق پورت سریال به Arduino UNO منتقل می کند.

جدول AutoHubLog

  • کد درخواستی سرویس گیرنده اتوماسیون را وارد می کند.
  • این یک معیار برای ردیابی افرادی است که و در چه زمانی از سیستم استفاده کرده اند و چه کدی درخواست شده است

همانطور که گفته شد ، من از SQL Server 2012 به عنوان پایگاه داده انتخابی خود استفاده کرده ام. می توانید این طرح ساده را بر روی پایگاه داده های مختلف مانند MySQL ، Oracle و غیره بازسازی کنید.

با این وجود ، SQL Script برای ایجاد این پایگاه داده در اینجا پیوست شده است

توجه داشته باشید

  1. کد SignalR Hub برای اتصال به پایگاه داده SQL Server 2012 طراحی شده است
  2. کار با پایگاه داده متفاوت به معنای تغییر Hub در استفاده از درایور پایگاه داده متفاوت است

مرحله 5: برنامه وب ASP. NET SignalR Hub

برنامه وب ASP. NET SignalR Hub
برنامه وب ASP. NET SignalR Hub
برنامه وب ASP. NET SignalR Hub
برنامه وب ASP. NET SignalR Hub

برنامه وب ASP. NET SignalR Hub به طور مشترک شامل اجزای زیر است که در شماتیک پیوست نشان داده شده است:

بخش 1 - مرکز SignalR که درخواست ها را از مشتری دریافت می کند و به مشتری پاسخ می دهد

بخشهای 2 ، 4 - صفحه وب سرویس گیرنده HTML و شیوه نامه آن که به طور کلی قسمت جلویی سیستم اتوماسیون را تشکیل می دهند و دستوراتی را به مرکز اتوماسیون صادر می کند

بخش 3 - API های jQuery SignalR که توسط سرویس گیرنده HTML برای ارتباط با مرکز اتوماسیون استفاده می شود

بخش 5 - مرکز SignalR مستقیماً با پایگاه داده ارتباط برقرار نمی کند. این کار را از طریق کلاسهای متوسط ایجاد شده با استفاده از Entity Framework انجام می دهد

این کلاسها جزئیات پایگاه داده را از برنامه جلویی انتزاع می کنند

بخش 6 - کلاس خدمات پایگاه داده که به انجام عملیات خواندن و نوشتن در پایگاه داده SQL (قبلاً توضیح داده شده) با استفاده از کلاسهای Entity Framework کمک می کند

ASP. NET و SignalR فناوری های مایکروسافت هستند و این آموزش نحوه ساخت و استقرار یک برنامه ساده SignalR را در اختیار شما قرار می دهد.

آنچه در اینجا ایجاد کرده ام بر اساس اصول اولیه ای است که از این آموزش به دست آمده است. هنگام استقرار ، برنامه باید شبیه صفحه وب نشان داده شده در تصویر دوم باشد

نکته روی کد

یک فایل ZIP حاوی نسخه حذف شده کد پیوست شده است

ساختار پوشه همانطور که در تصویر نشان داده شده است - با این حال ، تمام کلاس های چارچوب و اسکریپت های jQuery حذف شده اند تا اندازه پیوست را کاهش دهند.

توصیه می شود از این کد به عنوان راهنما استفاده کنید زیرا هنگام ایجاد یک برنامه جدید SignalR Web با پیوند لینک آموزش بالا ، جدیدترین کتابخانه های jQuery و کلاس های چارچوب ASP. NET به طور خودکار اضافه می شوند

همچنین ، ارجاع به اسکریپت های jQuery در صفحه index.html باید تغییر کند تا آخرین نسخه کتابخانه های سرویس گیرنده jQuery SignalR را نشان دهد که هنگام ساخت برنامه وب شما به طور خودکار اضافه می شوند.

در نهایت ، رشته اتصال باید برای مطابقت با پایگاه داده شما در پرونده هایی مانند Web.config* تغییر کند.

مرحله 6: مشتری سرویس Python SignalR

سرویس گیرنده خدمات پایتون SignalR
سرویس گیرنده خدمات پایتون SignalR

در حالی که HTML SignalR Client یک رابط کاربری رو به جلو است ، Python Client یک برنامه سرویس پشتی است که وظیفه اصلی آن دریافت کد IR ارسال شده توسط Hub و هدایت آن به Arduino UNO از طریق ارتباط سریال است.

کد پیوست توضیح داده شده است و به اندازه کافی مستند است تا عملکرد آن را توصیف کند

همانطور که در تصویر ترکیبی نشان داده شده است ، HTML Client و سرویس گیرنده Python از طریق SignalR Hub به شرح زیر ارتباط برقرار می کنند:

  1. کاربر سیستم اتوماسیون از طریق یک کلیک دکمه ای به Hub دستور می دهد
  2. هر دکمه با کد کلید IR مرتبط است و وقتی روی آن کلیک می کنید ، این کد به هاب منتقل می شود
  3. Hub این کد را دریافت می کند ، به پایگاه داده متصل می شود و کد سیگنال IR خام را بازیابی می کند و به همه کلاینت های متصل ارسال می کند.

    در همان زمان ، Hub یک ورودی را در جدول پایگاه داده AutoHubLog ثبت می کند که کد و تاریخ و زمان درخواست شده توسط مشتریان از راه دور را ثبت می کند

  4. سرویس گیرنده پایتون کد IR را دریافت می کند و برای پردازش بیشتر به Arduino UNO منتقل می کند

مرحله 7: طرح و کد انتقال آردوینو UNO IR

طرح و کد انتقال آردوینو UNO IR
طرح و کد انتقال آردوینو UNO IR
طرح و کد انتقال آردوینو UNO IR
طرح و کد انتقال آردوینو UNO IR
طرح و کد انتقال آردوینو UNO IR
طرح و کد انتقال آردوینو UNO IR

مدار آردوینو همانطور که در تصاویر نشان داده شده است برای این سیستم بسیار ساده است و بنابراین به طور خلاصه شرح داده می شود:

  • IR IR بی رنگ باید در UNO به پین دیجیتال 3 متصل شود - این مورد مورد نیاز کتابخانه IRLib Arduino است
  • دلایل در IBLE قبلی من در مورد شبیه سازی کنترل از راه دور در بخش مربوط به کتابخانه IRLib توضیح داده شده است
  • LED سبز متصل به PIN 4 دیجیتال یک نشانگر بصری است که وقتی UNO تمام بخش های IR Code را از سرویس گیرنده Python که روی Raspberry Pi اجرا می شود دریافت کند ، روشن می شود.
  • روشن شدن این چراغ نشان می دهد که ارتباط سریال بین Raspberry Pi و UNO در حال کار است
  • برای فعال کردن ارتباط سریال ، UNO از طریق پورت USB به رزبری پای متصل می شود
  • طرح آردوینو ضمیمه شده به اندازه کافی برای توصیف عملکرد آن توضیح داده شده است
  • توضیحات بالای کد نیز نحوه وصل شدن مدار را توضیح می دهد

توجه داشته باشید

در عمل ، آردوینو و Pi می توانند به طور مشترک به یک هاب USB قدرتمند متصل شوند تا بتواند Pi ، Arduino را هدایت کند و همچنین یک سیگنال قوی را از طریق IR IR منتقل کند.

مرحله 8: اتصال و آزمایش سیستم

اتصال و آزمایش سیستم
اتصال و آزمایش سیستم
اتصال و آزمایش سیستم
اتصال و آزمایش سیستم
اتصال و آزمایش سیستم
اتصال و آزمایش سیستم
  1. ایجاد و استقرار ASP. NET SignalR Hub ، سرویس گیرنده HTML همراه با پایگاه داده SQL Server 2012 در سرور اطلاعات اینترنت (IIS) در شبکه خانگی محلی شما
  2. با باز کردن سرویس گیرنده HTML SignalR از طریق HTTP به برنامه وب دسترسی پیدا کنید

    نشانی اینترنتی این صفحه معمولاً https:// yourComputer: port_number/است

  3. روی دکمه ای در کنترل پنل کلیک کنید ، و اگر برنامه به درستی استقرار یافته باشد ، Hub با بازگشت کد IR و نمایش آن در پنل خاکستری مجاور کنترل پنل پاسخ می دهد.

    یاد آوردن! با راه اندازی کتابخانه گیرنده IR و ضبط کدها همانطور که در IBLE قبلی من توضیح داده شده است ، باید کدها را در پایگاه داده خود بارگذاری کنید

  4. Arduino را از طریق USB به Raspberry Pi متصل کنید - Arduino IDE را روی Pi باز کنید و مطمئن شوید که UNO می تواند با Pi ارتباط برقرار کند

    این مقالات آموزشی آردوینو باید به شما کمک کند تا به سرعت در این زمینه دست پیدا کنید

  5. کد پایتون را باز کنید و تغییرات زیر را در صورت امکان برای محیط خود اعمال کنید

    • آدرس پورت سریال UNO شما از مرحله 4 دریافت شده است
    • آدرس هاب SignalR برای مطابقت با آدرس محلی شما از مرحله 2 - در این مثال ، https:// yourComputer: port_number/signalr
  6. در نهایت ، Arduino Sketch را در Arduino IDE در Raspberry Pi باز کنید و آن را به UNO فلش کنید
  7. صفحه نان را که مدار را در نزدیکی دستگاه قرار می دهد قرار دهید تا کنترل شود - چراغ IR باید دید واضحی با درگاه گیرنده IR دستگاه داشته باشد
  8. برنامه Python را روی Raspberry Pi با فشار دادن دکمه F5 در نوار ابزار Python IDLE شروع کنید
  9. به کنترل پنل در برنامه مشتری HTML (مرحله 2) بازگردید و روی دکمه ای (مانند روشن یا افزایش صدا) کلیک کنید

اگر سیستم به درستی تنظیم شده است ، باید بتوانید صفحه مشتری HTML را در تلفن یا رایانه لوحی خود باز کنید و دستگاه خود را با دکمه های صفحه سرویس گیرنده HTML خود کنترل کنید.

مرحله نهم: سیستم در عمل

سیستم در عمل
سیستم در عمل
سیستم در عمل
سیستم در عمل
سیستم در عمل
سیستم در عمل
سیستم در عمل
سیستم در عمل

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

از زمان انتشار این IBLE ، با ضبط چند کد IR از تلویزیون LED VIZIO ، رابط کاربری را گسترش داده ام

همانطور که در اولین تصویر بصورت ریموت تلویزیون کارخانه نشان داده شده است ، چند عملکرد ضروری این کنترل از راه دور در UI وب تعبیه شده است که از طریق رایانه لوحی من قابل دسترسی است

تصاویر بعدی نشان می دهد که رایانه لوحی در پیش زمینه و تلویزیون در پشت به دستورات صادر شده از رابط وب پاسخ می دهد:

  1. فرمان خاموش - تلویزیون خاموش می شود
  2. فرمان روشن - تلویزیون روشن می شود و با روشن شدن صفحه ، نشان "V" ظاهر می شود
  3. فرمان خاموش - یک نوار افقی با بلندگوی بی صدا ظاهر می شود

در تمام آزمایشات ، منطقه خاکستری در کنار داشبورد روی صفحه رایانه لوحی فرمان صادر شده توسط مشتری را نشان می دهد و پاسخ توسط مرکز راه دور SignalR ارسال می شود

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

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

پیشرفت 1 (سریع): کار با سیگنال های IR در طول های مختلف

  1. کدهای IR سیستم های مختلف با طول های مختلف ، حتی بین دو محصول از یک تولید کننده ، ارائه می شود.

    به عنوان مثال ، در این مورد ، طول آرایه کد IR برای تلویزیون LED 67 است در حالی که طول نوار صوتی سامسونگ حدود 87 است

  2. به این معنی که اگر ابتدا نوار صدا را روشن می کردم ، آرایه IR Buffer در طرح آردوینو با یک دنباله کد IR که شامل 87 کد است پر می شود.
  3. به دنبال آن ، اگر تلویزیون LED را روشن می کردم ، آرایه IR Buffer را فقط با 67 کد پر می کرد ، اما 20 کد باقی مانده از عملیات قبلی هنوز وجود دارد

نتیجه؟ تلویزیون LED روشن نمی شود زیرا IR Code Buffer با 20 کد اضافی که از عملکرد قبلی پاک نشده اند خراب شده است!

رفع 1 (راه آسان ، توصیه نمی شود)

طرح آردوینو را به صورت زیر تغییر دهید:

فراخوانی تابع زیر را در تابع حلقه () {} تغییر دهید

transmitIRCode ()؛

به transmitIRCode (c) ؛

در امضای تابع فوق تغییراتی ایجاد کنید:

void transmitIRCode (int codeLen) {// ثابت RAWBUF با codeLen IRTransmitter. IRSendRaw:: send (IRCodeBuffer، codeLen، 38)؛ }

در حالی که این آسان است ، آرایه هرگز به طور کامل پاک نمی شود و بنابراین این یک راه حل بسیار تمیز نیست

رفع 2 (سخت نیست ، توصیه می شود)

پس از بخش نظرات ، یک متغیر اضافی در بالای Arduino Sketch اعلام کنید:

بدون امضا در EMPTY_INT_VALUE ؛

این را به بالای تابع setup () اضافه کنید:

// ضبط وضعیت طبیعی یک متغیر صحیح بدون علامت خالی EMPTY_INT_VALUE = IRCodeBuffer [0] ؛

پایین بروید و بلافاصله بعد از تابع transmitIRCode () یک تابع جدید به طرح اضافه کنید:

void clearIRCodeBuffer (int codeLen) {// همه کدها را از آرایه پاک کنید // توجه: تنظیم عناصر آرایه بر روی 0 راه حل نیست! برای (int i = 1؛ i <= codeLen؛ i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE؛}}

در نهایت ، تابع جدید بالا را در محل زیر در تابع حلقه () فراخوانی کنید:

// بازنشانی - ازسرگیری خواندن سریال PortclearIRCodeBuffer (c) ؛…

این یک رویکرد تمیزتر است زیرا در واقع تمام مکانهای موجود در آرایه بافر IR را که با آخرین سیگنال IR Code پر شده بودند بدون اینکه چیزی را به شانس واگذار کند ، بازنشانی می کند.

پیشرفت 2 (بیشتر درگیر): تکرار انتقال سیگنال IR برای دستگاه های خاص

برای پاسخگویی به برخی از دستگاهها ، سیگنال یکسانی باید چندین بار ارسال شود. مثال: در این مورد ، نوار صوتی سامسونگ نیاز به ارسال یک کد دوبار با فاصله 1 ثانیه دارد

رفع اشکال در اینجا مورد بحث قرار گرفته است زیرا کمی بیشتر درگیر است و نیاز به آزمایش دارد

افزودن قابلیت تکرار به Ardunio Sketch به این معنی است که هر بار که یک دستگاه جدید به سیستم اتوماسیون خانگی خود اضافه می کنید ، باید Sketch را فلش کنید

در عوض ، افزودن این رفع به سرویس گیرنده HTML SignalR و برنامه Python SignalR Service ، راه حل را انعطاف پذیرتر می کند. و این را می توان در اصل به شرح زیر بدست آورد:

کلاینت SignalR HTML را برای انتقال اطلاعات تکراری به Hub تغییر دهید

index.html را باز کرده و مقدار تکرار را در دکمه HTML مانند این قرار دهید:

value = "SMSNG-SB-PWR-ON" می شود value = "SMSNG-SB-PWR-ON_2_1000"

جایی که 2 مقدار تکرار و 1000 مقدار تاخیر در میلی ثانیه بین دو سیگنال تکرار است

وقتی روی این دکمه کلیک می کنید ، هاب SignalR کد کلید+Repeat_Spec را دریافت می کند

روشهای سمت سرور SignalR را برای تجزیه و تحلیل فقط کد کلید تغییر دهید:

  • از کد کلید برای بازیابی کد IR از پایگاه داده به طور معمول استفاده کنید
  • انتقال کد کلیدی+Repeat_Spec و IRCode به مشتریان SingalR طبق معمول

برنامه Python SignalR Service را برای انتقال سیگنال با استفاده از مقادیر Repeat تغییر دهید:

کلاینت Python را باز کرده و دو عملکرد زیر را تغییر دهید:

def print_command_from_hub (buttonId، cmdSrc):

# کد تکرار را از مقدار buttonId تجزیه کنید

def transmitToArduino (IRSignalCode ، delim ، endPrefix):

# مدتی یا برای حلقه راه اندازی کنید تا سیگنال را در فرکانس مورد نظر منتقل کنید

  • به این ترتیب ، لازم نیست آردوینو بارها فلش شود
  • هر تعداد فرکانس تکرار می تواند در این سیستم تعبیه شود
  • علاوه بر این ، اگر از UNO استفاده می کنید ، محدودیتی برای اندازه Sketch شما وجود دارد!

مرحله 11: مسائل شناخته شده و نگرانی های امنیتی

همانطور که در مورد سیستم هایی که برای اولین بار ساخته شده بود ، این سیستم دارای چند مشکل است که در حین آزمایش ظاهر شد.

مسئله 1: شلیک پی در پی دستورات با تاخیر کمتر از یک ثانیه بین کلیک دکمه ها باعث می شود که سیستم پس از چند بار پاسخ دادن ، پاسخگو نباشد.

  • راه اندازی مجدد سرویس گیرنده Python SignalR سیستم را به حالت عادی باز می گرداند
  • راه حل های فوری این است که خروجی های Debug ناخواسته را در هر دو ، Python SignalR Client و همچنین Arduino Sketch حذف کرده و این آزمایش ها را تکرار کنید.
  • مکان دیگری که باید مورد توجه قرار گیرد ارتباط خود سریال است - آیا می توان کد را برای شستشوی سریع بافر اضافه کرد؟

با این اوصاف ، من متوجه شده ام که تلویزیون من به ریموت کارخانه خود پاسخ خوبی نمی دهد - بنابراین ماهیت ارتباطات IR تلویزیون من نیز می تواند یک عامل مثر باشد.

مسئله 2: صفحه HTML بعد از مدت طولانی عدم فعالیت ، دیگر به کلیک دکمه ها پاسخ نمی دهد

معمولاً با تازه کردن صفحه این رفتار برطرف می شود - علت این رفتار هنوز نامشخص است

نگرانی های امنیتی

این سیستم فقط برای استفاده از شبکه محلی (خانگی) طراحی شده است و دارای ضمانت های امنیتی لازم برای استفاده در اینترنت نیست

بنابراین توصیه می شود که SignalR Hub در یک دستگاه محلی در شبکه محلی/خانگی شما مستقر شود

از اینکه IBLE من را خواندید متشکرم و امیدوارم به شما خوش بگذرد!

توصیه شده: