البرمجة المرئية لـ Sonoff Basic

البرمجة المرئية لـ Sonoff Basic
مقال حول كيفية إنشاء وحدة تحكم منطقية قابلة للبرمجة من جهاز صيني رخيص. سيجد مثل هذا الجهاز استخدامه في التشغيل الآلي للمنزل وكفصول عملية في علوم الكمبيوتر المدرسية.
كمرجع، يعمل برنامج Sonoff Basic بشكل افتراضي مع تطبيق الهاتف المحمول من خلال خدمة سحابية صينية، وبعد التعديل المقترح، سيكون كل التفاعل الإضافي مع هذا الجهاز ممكنًا في المتصفح.

القسم الأول. توصيل Sonoff بخدمة MGT24

الخطوة 1: إنشاء لوحة التحكم

سجل على الموقع mgt24 (إذا لم تكن مسجلاً بالفعل) وقم بتسجيل الدخول باستخدام حسابك.
تسجيل الدخولالبرمجة المرئية لـ Sonoff Basic

لإنشاء لوحة تحكم لجهاز جديد، انقر على الزر "+".
مثال على إنشاء لوحةالبرمجة المرئية لـ Sonoff Basic

بمجرد إنشاء اللوحة، ستظهر في قائمة اللوحات الخاصة بك.

في علامة التبويب "الإعداد" باللوحة التي تم إنشاؤها، ابحث عن حقلي "معرف الجهاز" و"مفتاح التفويض"، وفي المستقبل، ستكون هذه المعلومات مطلوبة عند إعداد جهاز Sonoff.
مثال علامة التبويبالبرمجة المرئية لـ Sonoff Basic

الخطوة 2. تعيد تحميل ملفات الجهاز

استخدام الأداة المساعدة XTCOM_UTIL تنزيل البرامج الثابتة PLC Sonoff الأساسية إلى الجهاز، ولهذا ستحتاج إلى محول USB-TTL. هنا تعليمات и تعليمات الفيديو.

الخطوة 3. إعداد الجهاز

قم بتوصيل الطاقة إلى الجهاز، بعد أن يضيء مؤشر LED، اضغط على الزر واستمر في الضغط عليه حتى يبدأ مؤشر LED في الوميض بشكل دوري بالتساوي.
في هذه اللحظة، ستظهر شبكة Wi-Fi جديدة تسمى "PLC Sonoff Basic"، قم بتوصيل جهاز الكمبيوتر الخاص بك بهذه الشبكة.
شرح إشارة LED

مؤشر LED
حالة الجهاز

وميض مزدوج دوري
لا يوجد اتصال بجهاز التوجيه

يضيء بشكل مستمر
تم إنشاء الاتصال مع جهاز التوجيه

وميض موحد دوري
وضع نقطة الوصول للواي فاي

انطفأت
لا يوجد مصدر للطاقة

افتح متصفح الإنترنت وأدخل النص "192.168.4.1" في شريط العناوين، وانتقل إلى صفحة إعدادات الشبكة الخاصة بالجهاز.

املأ الحقول كما يلي:

  • "اسم الشبكة" و"كلمة المرور" (لربط الجهاز بجهاز توجيه wi-fi المنزلي).
  • "معرف الجهاز" و"مفتاح التفويض" (لتخويل الجهاز على خدمة MGT24).

مثال على ضبط معلمات شبكة الجهازالبرمجة المرئية لـ Sonoff Basic

احفظ الإعدادات وأعد تشغيل الجهاز.
ومن تعليمات الفيديو.

الخطوة 4. توصيل أجهزة الاستشعار (اختياري)

يدعم البرنامج الثابت الحالي ما يصل إلى أربعة أجهزة استشعار لدرجة الحرارة ds18b20. هنا تعليمات الفيديو لتركيب أجهزة الاستشعار. على ما يبدو، ستكون هذه الخطوة هي الأصعب، لأنها ستتطلب أذرعًا مستقيمة ومكواة لحام.

القسم الثاني. البرمجة المرئية

الخطوة 1: إنشاء البرامج النصية

تستخدم كبيئة برمجة Blockly، البيئة سهلة التعلم، لذلك لا تحتاج إلى أن تكون مبرمجًا لإنشاء نصوص برمجية بسيطة.

أضفت كتلًا متخصصة لكتابة وقراءة معلمات الجهاز. يتم الوصول إلى أي معلمة بالاسم. بالنسبة لمعلمات الأجهزة البعيدة، يتم استخدام الأسماء المركبة: "parameter@device".
قائمة منسدلة من الخياراتالبرمجة المرئية لـ Sonoff Basic

مثال على السيناريو لتشغيل وإيقاف الحمل بشكل دوري (1 هرتز):
البرمجة المرئية لـ Sonoff Basic

مثال على برنامج نصي يقوم بمزامنة تشغيل جهازين منفصلين. وهي أن مرحل الجهاز المستهدف يكرر تشغيل مرحل الجهاز البعيد.
البرمجة المرئية لـ Sonoff Basic

سيناريو منظم الحرارة (بدون التباطؤ):
البرمجة المرئية لـ Sonoff Basic

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

الخطوة 2: ترتيب البرامج النصية

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

الخطوة 3: تصحيح البرامج النصية

لتصحيح أخطاء البرنامج النصي الذي تم تحميله بالفعل في الجهاز، يمكنك تشغيل تتبع البرنامج خطوة بخطوة. يمكن أن يكون هذا مفيدًا للغاية عندما يتبين أن سلوك البرنامج النصي مختلف عما قصده المؤلف. في هذه الحالة، يسمح التتبع للمؤلف بالعثور بسرعة على مصدر المشكلة وتصحيح الخطأ في البرنامج النصي.

سيناريو لحساب المضروب في وضع التصحيح:
البرمجة المرئية لـ Sonoff Basic

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

قسم للفضوليين. ما هو تحت غطاء محرك السيارة؟

لكي تعمل البرامج النصية على الجهاز المستهدف، تم تطوير مترجم بايت كود ومجمع يحتوي على 38 تعليمات. يحتوي الكود المصدري لـ Blockly على مولد كود متخصص مدمج فيه والذي يحول الكتل المرئية إلى تعليمات التجميع. بعد ذلك، يتم تحويل برنامج المجمع هذا إلى رمز بايت ونقله إلى الجهاز للتنفيذ.
إن بنية هذه الآلة الافتراضية بسيطة للغاية ولا يوجد أي معنى لوصفها، ستجد على الإنترنت العديد من المقالات حول تصميم أبسط الأجهزة الافتراضية.
أقوم عادةً بتخصيص 1000 بايت لمكدس جهازي الافتراضي، وهو ما يكفي لتوفيره. بالطبع، يمكن للتكرارات العميقة أن تستنفد أي مكدس، لكن من غير المرجح أن يكون لها أي استخدام عملي.

الكود الثانوي الناتج مضغوط تمامًا. على سبيل المثال، الرمز الثانوي لحساب نفس المضروب هو 49 بايت فقط. وهذا هو شكلها البصري:
البرمجة المرئية لـ Sonoff Basic

وهذا هو برنامج المجمع الخاص به:

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 ميجا هرتز).
البرمجة المرئية لـ Sonoff Basicالبرمجة المرئية لـ Sonoff Basic
وأعتقد أن هذه نتيجة جيدة، على الأقل هذه السرعة هي ما يقرب من عشر مرات أسرع من لوا и إسبروينو.

الجزء النهائي

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

هذا كل شيء، سأكون سعيدًا بسماع النصائح والنقد البناء.

المصدر: www.habr.com

إضافة تعليق