مقال حول كيفية إنشاء وحدة تحكم منطقية قابلة للبرمجة من جهاز صيني رخيص. سيجد مثل هذا الجهاز استخدامه في التشغيل الآلي للمنزل وكفصول عملية في علوم الكمبيوتر المدرسية.
كمرجع، يعمل برنامج Sonoff Basic بشكل افتراضي مع تطبيق الهاتف المحمول من خلال خدمة سحابية صينية، وبعد التعديل المقترح، سيكون كل التفاعل الإضافي مع هذا الجهاز ممكنًا في المتصفح.
القسم الأول. توصيل Sonoff بخدمة MGT24
الخطوة 1: إنشاء لوحة التحكم
سجل على الموقع
تسجيل الدخول
لإنشاء لوحة تحكم لجهاز جديد، انقر على الزر "+".
مثال على إنشاء لوحة
بمجرد إنشاء اللوحة، ستظهر في قائمة اللوحات الخاصة بك.
في علامة التبويب "الإعداد" باللوحة التي تم إنشاؤها، ابحث عن حقلي "معرف الجهاز" و"مفتاح التفويض"، وفي المستقبل، ستكون هذه المعلومات مطلوبة عند إعداد جهاز Sonoff.
مثال علامة التبويب
الخطوة 2. تعيد تحميل ملفات الجهاز
استخدام الأداة المساعدة
الخطوة 3. إعداد الجهاز
قم بتوصيل الطاقة إلى الجهاز، بعد أن يضيء مؤشر LED، اضغط على الزر واستمر في الضغط عليه حتى يبدأ مؤشر LED في الوميض بشكل دوري بالتساوي.
في هذه اللحظة، ستظهر شبكة Wi-Fi جديدة تسمى "PLC Sonoff Basic"، قم بتوصيل جهاز الكمبيوتر الخاص بك بهذه الشبكة.
شرح إشارة LED
مؤشر LED
حالة الجهاز
وميض مزدوج دوري
لا يوجد اتصال بجهاز التوجيه
يضيء بشكل مستمر
تم إنشاء الاتصال مع جهاز التوجيه
وميض موحد دوري
وضع نقطة الوصول للواي فاي
انطفأت
لا يوجد مصدر للطاقة
افتح متصفح الإنترنت وأدخل النص "192.168.4.1" في شريط العناوين، وانتقل إلى صفحة إعدادات الشبكة الخاصة بالجهاز.
املأ الحقول كما يلي:
- "اسم الشبكة" و"كلمة المرور" (لربط الجهاز بجهاز توجيه wi-fi المنزلي).
- "معرف الجهاز" و"مفتاح التفويض" (لتخويل الجهاز على خدمة 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
إذا لم يكن لشكل التجميع أي قيمة عملية، فإن علامة التبويب "javascrit"، على العكس من ذلك، تعطي مظهرًا مألوفًا أكثر من الكتل المرئية:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
فيما يتعلق بالأداء. عندما قمت بتشغيل أبسط برنامج فلاشي، حصلت على موجة مربعة تبلغ 47 كيلو هرتز على شاشة راسم الذبذبات (بسرعة ساعة المعالج البالغة 80 ميجا هرتز).
وأعتقد أن هذه نتيجة جيدة، على الأقل هذه السرعة هي ما يقرب من عشر مرات أسرع من
الجزء النهائي
لتلخيص، سأقول أن استخدام البرامج النصية يسمح لنا ليس فقط ببرمجة منطق تشغيل جهاز منفصل، ولكنه يجعل من الممكن أيضا توصيل العديد من الأجهزة في آلية واحدة، حيث تؤثر بعض الأجهزة على سلوك الآخرين.
وألاحظ أيضًا أن الطريقة المختارة لتخزين البرامج النصية (مباشرة في الأجهزة نفسها، وليس على الخادم) تبسط تحويل الأجهزة العاملة بالفعل إلى خادم آخر، على سبيل المثال إلى جهاز Raspberry المنزلي، هنا
هذا كل شيء، سأكون سعيدًا بسماع النصائح والنقد البناء.
المصدر: www.habr.com