مقاله ای در مورد نحوه ایجاد یک کنترل کننده منطقی قابل برنامه ریزی از یک دستگاه ارزان چینی. چنین دستگاهی هم در اتوماسیون خانگی و هم به عنوان کلاس های عملی در علوم کامپیوتر مدارس کاربرد دارد.
به عنوان مرجع، به طور پیش فرض برنامه Sonoff Basic با یک برنامه تلفن همراه از طریق یک سرویس ابری چینی کار می کند؛ پس از اصلاح پیشنهادی، تمام تعاملات بیشتر با این دستگاه در مرورگر امکان پذیر خواهد بود.
بخش I. اتصال Sonoff به سرویس MGT24
مرحله 1: یک کنترل پنل ایجاد کنید
در سایت ثبت نام کنید
ورود
برای ایجاد یک کنترل پنل برای یک دستگاه جدید، روی دکمه "+" کلیک کنید.
نمونه ای از ایجاد پنل
پس از ایجاد پنل، در لیست پنل های شما ظاهر می شود.
در برگه «تنظیم» پانل ایجاد شده، فیلدهای «شناسه دستگاه» و «کلید مجوز» را بیابید؛ در آینده، این اطلاعات هنگام راهاندازی دستگاه Sonoff مورد نیاز خواهد بود.
نمونه برگه
مرحله 2. دستگاه را دوباره فلش کنید
با استفاده از ابزار
مرحله 3. راه اندازی دستگاه
برق را به دستگاه بدهید، پس از روشن شدن LED، دکمه را فشار دهید و آن را فشار دهید تا زمانی که LED شروع به چشمک زدن دوره ای به طور یکنواخت کند.
در این لحظه، یک شبکه وای فای جدید به نام "PLC Sonoff Basic" ظاهر می شود، رایانه خود را به این شبکه متصل کنید.
توضیح نشانگر LED
نشانگر LED
وضعیت دستگاه
چشمک زن دوره ای دوبل
بدون اتصال به روتر
پیوسته می درخشد
اتصال با روتر برقرار شد
چشمک زن دوره ای یکنواخت
حالت نقطه دسترسی وای فای
خاموش شد
بدون منبع تغذیه
یک مرورگر اینترنت را باز کنید و متن "192.168.4.1" را در نوار آدرس وارد کنید، به صفحه تنظیمات شبکه دستگاه بروید.
فیلدها را به صورت زیر پر کنید:
- «نام شبکه» و «رمز عبور» (برای پیوند دادن دستگاه به روتر وای فای خانگی).
- "شناسه دستگاه" و "کلید مجوز" (برای مجوز دادن به دستگاه در سرویس MGT24).
نمونه ای از تنظیم پارامترهای شبکه دستگاه
تنظیمات را ذخیره کرده و دستگاه را راه اندازی مجدد کنید.
اینجا
مرحله 4. اتصال سنسورها (اختیاری)
سیستم عامل فعلی تا چهار سنسور دمای ds18b20 را پشتیبانی می کند. اینجا
بخش دوم. برنامه نویسی بصری
مرحله 1: ایجاد اسکریپت
به عنوان یک محیط برنامه نویسی استفاده می شود
بلوک های تخصصی برای نوشتن و خواندن پارامترهای دستگاه اضافه کردم. هر پارامتر با نام قابل دسترسی است. برای پارامترهای دستگاه های راه دور، از نام های ترکیبی استفاده می شود: "parameter@device".
لیست کشویی گزینه ها
سناریوی مثال برای روشن و خاموش کردن چرخه بار (1 هرتز):
نمونه ای از یک اسکریپت که عملکرد دو دستگاه جداگانه را همگام می کند. یعنی رله دستگاه هدف عملیات رله دستگاه راه دور را تکرار می کند.
سناریو برای ترموستات (بدون هیسترزیس):
برای ایجاد اسکریپت های پیچیده تر، می توانید از متغیرها، حلقه ها، توابع (با آرگومان ها) و ساختارهای دیگر استفاده کنید. من در اینجا همه اینها را با جزئیات شرح نمی دهم؛ در حال حاضر چیزهای زیادی در شبکه وجود دارد.
مرحله 2: ترتیب اسکریپت ها
فیلمنامه به طور مداوم اجرا می شود و به محض اینکه به پایان رسید، دوباره شروع می شود. در این حالت، دو بلوک وجود دارد که می توانند به طور موقت اسکریپت را متوقف کنند، "تاخیر" و "مکث".
بلوک "تاخیر" برای تاخیرهای میلی ثانیه یا میکروثانیه استفاده می شود. این بلوک به شدت فاصله زمانی را حفظ می کند و عملکرد کل دستگاه را مسدود می کند.
بلوک "مکث" برای تاخیرهای دوم (یا کمتر) استفاده می شود و اجرای سایر فرآیندها را در دستگاه مسدود نمی کند.
اگر خود اسکریپت حاوی یک حلقه بی نهایت باشد که بدنه آن حاوی "مکث" نباشد، مفسر به طور مستقل یک مکث کوتاه را آغاز می کند.
اگر پشته حافظه اختصاص داده شده تمام شود، مفسر اجرای چنین اسکریپت پر انرژی را متوقف می کند (مراقب توابع بازگشتی باشید).
مرحله 3: اشکال زدایی اسکریپت ها
برای اشکال زدایی اسکریپتی که قبلاً در دستگاه بارگذاری شده است، می توانید ردیابی برنامه را مرحله به مرحله اجرا کنید. این می تواند بسیار مفید باشد زمانی که رفتار فیلمنامه با آنچه نویسنده در نظر داشت متفاوت باشد. در این حالت، ردیابی به نویسنده این امکان را می دهد که به سرعت منبع مشکل را بیابد و خطای اسکریپت را تصحیح کند.
سناریوی محاسبه فاکتوریل در حالت اشکال زدایی:
ابزار اشکال زدایی بسیار ساده است و از سه دکمه اصلی تشکیل شده است: «شروع»، «یک قدم به جلو» و «توقف» (حالت «ورود» و «خروج» را نیز فراموش نکنیم. علاوه بر ردیابی گام به گام، می توانید بر روی هر بلوکی (با کلیک بر روی بلوک) یک نقطه شکست تعیین کنید.
برای نمایش مقادیر فعلی پارامترها (حسگرها، رله ها) در مانیتور، از بلوک "چاپ" استفاده کنید.
اینجا
بخش برای کنجکاوها زیر کاپوت چیه؟
برای اینکه اسکریپت ها روی دستگاه هدف کار کنند، یک مفسر بایت کد و یک اسمبلر با 38 دستورالعمل توسعه داده شد. کد منبع Blockly دارای یک تولید کننده کد تخصصی است که بلوک های بصری را به دستورالعمل های اسمبلی تبدیل می کند. در ادامه این برنامه اسمبلر به بایت کد تبدیل شده و برای اجرا به دستگاه منتقل می شود.
معماری این ماشین مجازی کاملا ساده است و هیچ نکته خاصی در توصیف آن وجود ندارد؛ در اینترنت مقالات زیادی در مورد طراحی ساده ترین ماشین های مجازی پیدا خواهید کرد.
من معمولاً 1000 بایت برای پشته ماشین مجازی خود اختصاص می دهم که برای ذخیره کافی است. البته، بازگشت عمیق می تواند هر پشته را خسته کند، اما بعید است که هیچ کاربرد عملی داشته باشد.
بایت کد حاصل کاملا فشرده است. به عنوان مثال، بایت کد برای محاسبه همان فاکتوریل تنها 49 بایت است. این شکل بصری آن است:
و این هم برنامه اسمبلر او:
shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret
اگر فرم اسمبلی نمایش هیچ ارزش عملی نداشته باشد، برعکس، برگه "جاوااسکریت" ظاهری آشناتر از بلوک های بصری می دهد:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
در مورد عملکرد. وقتی ساده ترین اسکریپت فلاشر را اجرا کردم، یک موج مربعی با فرکانس 47 کیلوهرتز روی صفحه اسیلوسکوپ دریافت کردم (با سرعت کلاک پردازنده 80 مگاهرتز).
من فکر می کنم این یک نتیجه خوب است، حداقل این سرعت تقریبا ده برابر سریعتر از آن است
بخش نهایی
به طور خلاصه، من می گویم که استفاده از اسکریپت ها به ما امکان می دهد نه تنها منطق عملکرد یک دستگاه جداگانه را برنامه ریزی کنیم، بلکه اتصال چندین دستگاه را به یک مکانیسم واحد امکان پذیر می کند، جایی که برخی از دستگاه ها بر رفتار دیگران تأثیر می گذارند.
همچنین متذکر می شوم که روش انتخابی برای ذخیره اسکریپت ها (مستقیماً در خود دستگاه ها و نه در سرور) تعویض دستگاه های از قبل در حال کار را به سرور دیگری ، به عنوان مثال به Raspberry خانگی ، در اینجا ساده می کند.
این همه، من خوشحال خواهم شد که توصیه ها و انتقادات سازنده را بشنوم.
منبع: www.habr.com