
مقالة حول كيفية إنشاء وحدة تحكم منطق قابلة للبرمجة من جهاز صيني رخيص. سيجد هذا الجهاز تطبيقه في التشغيل الآلي للمنزل وكدرس عملي في علوم الكمبيوتر بالمدرسة.
كمرجع ، افتراضيًا ، يعمل برنامج Sonoff Basic مع تطبيق للهاتف المحمول من خلال الخدمة السحابية الصينية ، وبعد التعديل المقترح ، يصبح كل تفاعل إضافي مع هذا الجهاز ممكنًا في المتصفح.القسم I. توصيل Sonoff إلى MGT24
الخطوة 1. إنشاء لوحة التحكم
قم
بالتسجيل على موقع
mgt24 (إذا لم تكن مسجلًا بعد) وقم بتسجيل الدخول تحت حسابك.
لإنشاء لوحة تحكم لجهاز جديد ، انقر فوق الزر "+".
بعد إنشاء اللوحة ، ستظهر في قائمة اللوحات.
في علامة التبويب "الإعداد" في اللوحة التي تم إنشاؤها ، ابحث عن حقلي "معرف الجهاز" و "مفتاح التخويل" ، في المستقبل ، ستكون هذه المعلومات مطلوبة عند إعداد جهاز Sonoff.
الخطوة 2. امض الجهاز
باستخدام الأداة المساعدة
XTCOM_UTIL ، قم بتنزيل البرنامج الثابت
Sonoff Basic PLC على الجهاز ، لذلك تحتاج إلى محول USB-TTL. هنا
التعليمات والتعليم الفيديو .
الخطوة 3. تكوين الجهاز
قم بتطبيق الطاقة على الجهاز ، بعد أن تضيء LED ، اضغط مع الاستمرار على الزر حتى يبدأ وميض LED بشكل منتظم بالتساوي.
عند هذه النقطة ، ستظهر شبكة wi-fi جديدة تسمى "PLC Sonoff Basic" ، قم بتوصيل جهاز الكمبيوتر الخاص بك بهذه الشبكة.
افتح متصفح الإنترنت وأدخل النص "192.168.4.1" في شريط العناوين ، انتقل إلى صفحة إعدادات شبكة الجهاز.
املأ الحقول كما يلي:
- "اسم الشبكة" و "كلمة المرور" (لربط الجهاز بجهاز التوجيه اللاسلكي في منزلك).
- "معرف الجهاز" و "مفتاح التخويل" (لتخويل الجهاز على خدمة MGT24).
مثال على إعداد معلمات شبكة الجهاز حفظ الإعدادات وإعادة تشغيل الجهاز.
هنا هو
فيديو تعليمي .
الخطوة 4. توصيل أجهزة الاستشعار (اختياري)
البرامج الثابتة الحالية تدعم ما يصل إلى أربعة أجهزة استشعار درجة الحرارة ds18b20. هنا هو
فيديو تعليمي على أجهزة استشعار متزايدة. على ما يبدو ، ستكون هذه الخطوة الأكثر صعوبة ، حيث إنها تتطلب أيديًا مباشرة ومكواة لحام.
القسم الثاني. البرمجة البصرية
الخطوة 1. البرمجة النصية
يستخدم
Blockly كبيئة برمجة ، والبيئة سهلة التعلم ، لذلك لا تحتاج إلى أن تكون مبرمجًا لإنشاء برامج نصية بسيطة.
أضفت كتل متخصصة للكتابة وقراءة المعلمات الجهاز. يتم الوصول إلى أي معلمة بالاسم. تستخدم الأسماء المركبة لمعلمات الجهاز البعيد: "المعلمة @ الجهاز".
مثال على سيناريو الحمل والإيقاف الدوري (1Hz):

سيناريو مثال يزامن تشغيل جهازين منفصلين. وهي تتابع الجهاز المستهدف يكرر تشغيل مرحل الجهاز البعيد.

سيناريو لترموستات (بدون التباطؤ):

لإنشاء برامج نصية أكثر تعقيدًا ، يمكنك استخدام المتغيرات والحلقات والوظائف (مع الوسائط) والبنيات الأخرى. لن أصف كل هذا بالتفصيل هنا ،
فالشبكة لديها بالفعل الكثير من
المواد التدريبية حول Blockly .
الخطوة 2. ترتيب البرمجة
يتم تشغيل البرنامج النصي بشكل مستمر ، وبمجرد وصوله إلى نهايته ، يبدأ من جديد. هناك كتلتان يمكنهما تعليق البرنامج النصي مؤقتًا "التأخير" و "الإيقاف المؤقت".
يتم استخدام كتلة التأخير للتأخير ميلي ثانية واحدة أو ميكروثانية. تحافظ هذه الوحدة بشكل صارم على الفاصل الزمني ، مما يمنع تشغيل الجهاز بأكمله.
يتم استخدام كتلة الإيقاف المؤقت للتأخير الثاني (ربما أقل) ، ولا تمنع تنفيذ العمليات الأخرى في الجهاز.
إذا كان البرنامج النصي في حد ذاته يحتوي على حلقة لا نهائية ، لا يوجد فيها نص مؤقت "مؤقت" ، فإن المترجم الفوري يبدأ بشكل مؤقت في توقف صغير.
إذا تم استنفاد مكدس الذاكرة المخصصة ، فسوف يتوقف المترجم عن تنفيذ مثل هذا البرنامج الشرس (كن حذرًا في الوظائف العودية).
الخطوة 3. تصحيح البرامج النصية
لتصحيح برنامج نصي تم تحميله بالفعل في الجهاز ، يمكنك تشغيل تتبع البرنامج في خطوات. قد يكون هذا مفيدًا للغاية عندما يكون سلوك البرنامج النصي غير المقصود من المؤلف. في هذه الحالة ، يسمح التتبع للمؤلف بالعثور بسرعة على مصدر المشكلة وإصلاح الخطأ في البرنامج النصي.
البرنامج النصي لحساب المضروب في وضع التصحيح:

أداة تصحيح الأخطاء بسيطة للغاية وتتكون من ثلاثة أزرار رئيسية: "البدء" و "خطوة واحدة للأمام" و "التوقف" (لن ننسى أيضًا "الدخول" و "الخروج" من وضع التصحيح). بالإضافة إلى التتبع خطوة بخطوة ، يمكنك تعيين نقطة توقف على أي كتلة (من خلال النقر على الكتلة).
لعرض القيم الحالية للمعلمات (المستشعرات ، المرحلات) في الشاشة ، استخدم كتلة الطباعة.
إليك
مقطع فيديو نظرة عامة حول استخدام المصحح.
قسم للفضوليين. ولكن ما هو تحت غطاء محرك السيارة؟
من أجل أن تعمل البرامج النصية على الجهاز المستهدف ، تم تطوير مترجم شفهي ثانوي ومجمّع يتضمن 38 تعليمات. تم إنشاء مولد تعليمات برمجية متخصص في التعليمات البرمجية المصدر blockly التي تحول الكتل المرئية إلى تعليمات المجمّع. في المستقبل ، يتم تحويل برنامج المجمّع هذا إلى رمز ثانوي ونقله إلى الجهاز للتنفيذ.
إن بنية هذا الجهاز الظاهري بسيطة للغاية وليس من المنطقي وصفها ؛ على الشبكة سوف تجد العديد من المقالات حول تصميم الأجهزة الافتراضية البسيطة.
بالنسبة إلى مكدس الجهاز الظاهري الخاص بي ، عادة ما أقوم بتخصيص 1000 بايت ، وهذا يكفي بهامش. بالطبع ، يمكن أن تتكرر عمليات الاستعادة العميقة في أي مكدس ، لكن من غير المرجح أن تجد تطبيقًا عمليًا.
bytecode الناتج هو المدمجة جدا. على سبيل المثال ، يكون رمز البايت كود لحساب نفس المضروب هو 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 ميجا هرتز).


أعتقد أن هذه نتيجة جيدة ، على الأقل هذه السرعة أسرع بعشر مرات من سرعة
Lua و
Espruino .
الجزء الأخير
للتلخيص ، أقول إن استخدام البرامج النصية لا يسمح لنا ببرمجة منطق جهاز فردي فحسب ، بل يجعل أيضًا من الممكن ربط العديد من الأجهزة بآلية واحدة ، حيث تؤثر بعض الأجهزة على سلوك الآخرين.
وألاحظ أيضًا أن الطريقة المختارة لتخزين البرامج النصية (مباشرة في الأجهزة نفسها ، وليس على الخادم) ، تعمل على تبسيط تحويل الأجهزة الحالية إلى خادم آخر ، على سبيل المثال ، إلى المنزل التوت ، إليك
التعليمات .
هذا كل شيء ، سأكون سعيدًا لسماع النصائح والنقد البناء.