وحدات لوران والمنزل الذكي (الجزء 3). معالجة

Laurent () KernelChip . . MajorDoMo, Arduino Arduino Mega Server. , , … Processing.

صورة

?


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

كتابة رسم


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

صورة

بادئ ذي بدء ، نحن بحاجة إلى توصيل مكتبة بدعم وظائف الشبكة. يتم ذلك في سطر واحد:

import processing.net.*;

ثم دعنا نقدم أوامر اختبار لإدارة وحدات Laurent. دعها تكون أوامر لتشغيل التتابع وإيقاف تشغيله المألوف لك بالفعل من المقالات السابقة. ولا تنس أمر إدخال كلمة المرور ، فبدونه ، لن تستجيب الوحدة لأوامرنا.

String pass = "$KE,PSW,SET,Laurent";
String rele2on = "$KE,REL,2,1";
String rele2off = "$KE,REL,2,0";

نحتاج أيضًا إلى رموز الخدمة وكائن يمثل وحدة Laurent في برنامجنا وسنرسل بواسطتها أوامر إلى هذه الوحدة.

byte CRbyte = 13;
byte LFbyte = 10;
Client myClient;

الآن وظيفة سترسل أوامر التحكم مباشرة إلى الوحدات النمطية:

void sendCommand(String command, Client cl) {
  cl.write(pass);
  cl.write(CRbyte);
  cl.write(LFbyte);
  delay(10);
  cl.write(command);
  cl.write(CRbyte);
  cl.write(LFbyte);
} 

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

الآن وظيفة الإعداد القياسي (). هذه الوظيفة موجودة في جميع الرسومات على المعالجة وهي مخصصة للتهيئة وإعداد المعلمات الأولية.

void setup() { 
  size(300, 300); 
  background(255);
  myClient = new Client(this, "192.168.2.19", 2424); 
} 

نقوم هنا بتعيين حجم نافذة البرنامج ولون الخلفية البيضاء وإنشاء كائن myClient لوحدة Laurent الخاصة بنا. ربما كنت قد فهمت بالفعل أن "192.168.2.19" هو عنوان IP للوحدة النمطية (يجب عليك تغييره إلى العنوان الحقيقي للوحدة النمطية الخاصة بك) ، و 2424 هو المنفذ القياسي لجميع وحدات Laurent ولا تحتاج إلى تغييره.

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

void draw() { 
  sendCommand(rele2on, myClient); 
  delay(3000);
  
  sendCommand(rele2off, myClient); 
  delay(3000);
}

بدلاً من ذلك ، سيتم استبدال rele2on بالأمر "$ KE ، REL ، 2.1" ، وبدلاً من rele2off ، "$ KE ، REL ، 2.0".

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

هنا الرسم الكامل.

كود رسم كامل
import processing.net.*;

byte CRbyte = 13; // HEX 0x0D
byte LFbyte = 10; // HEX 0x0A

// Commands
String pass = "$KE,PSW,SET,Laurent";
String rele2on = "$KE,REL,2,1";
String rele2off = "$KE,REL,2,0";

// Client
Client myClient;

void sendCommand(String command, Client cl) {
cl.write(pass);
cl.write(CRbyte);
cl.write(LFbyte);
delay(10);
cl.write(command);
cl.write(CRbyte);
cl.write(LFbyte);
}

void setup() {
size(300, 300);
background(255);
myClient = new Client(this, «192.168.2.19», 2424);
}

void draw() {
sendCommand(rele2on, myClient);
delay(3000);

sendCommand(rele2off, myClient);
delay(3000);
}

تعليم الأطفال البرمجة


وأخيرًا ، تعلمنا برمجة الأطفال. هذه العملية ، كما تفهم بنفسك ، ليست سهلة وغالبا ما تستخدم لغة برمجة المعالجة لهذا الغرض ، باعتبارها واحدة من أبسطها وأكثرها وضوحا.

لقد اهتم مبدعو اللغة بالفعل وتبسيط كتابة البرامج قدر الإمكان. العمل مع الرسومات بشكل خاص سهل وميسور التكلفة. من الدقائق الأولى من التدريب ، لا يمكن لأطفالك فقط عرض الرسومات على الشاشة ، ولكن حتى رسم رسوم متحركة بسيطة عندما تتحرك الأشكال المرسومة حول الشاشة وتستجيب لحركات الماوس والنقرات. بشكل عام ، من الصعب تخيل لغة أفضل لتعليم برمجة الأطفال.

سنحاول جعل عملية التعلم أكثر إثارة وإثارة. كيف؟ سنمنح الأطفال الفرصة ليس فقط للتحكم في الأشكال الملونة على الشاشة ، ولكن أيضًا للأشياء الحقيقية في العالم الحقيقي مباشرة من برنامجهم الأول في المعالجة.

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

صورة

لذا ، سننشئ شكلاً ولهذا سنحدد إحداثياته ​​وحجمه ونقدم متغيرًا منطقيًا يحتوي على حالة الكائن (الآن في العالم الحقيقي).

int x1 = 100;
int y1 = 100;
int dx = 100;
int dy = 100;
boolean state = false;

الآن النقطة المهمة. من الصعب على الطفل إتقان البرمجة ومن الصعب عليه العمل مع مثل هذه الإنشاءات مثل

sendCommand(rele2on, myClient);

لذلك ، نحن بحاجة إلى تبسيط بناء الجملة اللغوي قدر الإمكان ، ولهذا السبب سنقدم غلافًا "للأطفال" للوظيفة التي تعمل على تشغيل التتابع وإيقاف تشغيله.

void on() {
  sendCommand(rele2on, myClient); 
}

void off() {
  sendCommand(rele2off, myClient); 
}

موافق ، on () أو off () هو بالفعل أفضل بكثير من sendCommand (rele2on ، myClient). والطفل أسهل بكثير في إنشاء برنامج من هذه الهياكل. ولا يزعجك أحد لإظهار الخيال والخروج باسم آخر بسيط ومفهوم لطفلك.

الآن رمز دالة الرسم الرئيسي ().

void draw() { 
  background(64);
 
  if ((mouseX > x1 && mouseX < x1 + dx) && 
      (mouseY > y1 && mouseY < y1 + dy)) {
    fill(152,161,247, 100);
    background(255);   
    if (!state) {
      on();
    }
    state = true;

  } else {
      fill(204,240,152, 100); 
      if (state) {
        off();
      }
      state = false;

    }
  rect(x1, y1, dx, dy);
}

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

  if ((mouseX > x1 && mouseX < x1 + dx) && 
      (mouseY > y1 && mouseY < y1 + dy)) {

أو

    fill(152,161,247, 100);

واستبدالها ببسيطة ومفهومة للطفل.

صورة

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

هنا الرسم الكامل.

كود رسم كامل
import processing.net.*;

int x1 = 100;
int y1 = 100;
int dx = 100;
int dy = 100;
boolean state = false;

byte CRbyte = 13; // HEX 0x0D
byte LFbyte = 10; // HEX 0x0A

// Commands
String pass = "$KE,PSW,SET,Laurent";
String rele2on = "$KE,REL,2,1";
String rele2off = "$KE,REL,2,0";

// Client
Client myClient;

void sendCommand(String command, Client cl) {
cl.write(pass);
cl.write(CRbyte);
cl.write(LFbyte);
delay(10);
cl.write(command);
cl.write(CRbyte);
cl.write(LFbyte);
}

void on() {
sendCommand(rele2on, myClient);
}

void off() {
sendCommand(rele2off, myClient);
}

void setup() {
size(300, 300);
background(255);
myClient = new Client(this, «192.168.2.19», 2424);
}

void draw() {
background(64);

if ((mouseX > x1 && mouseX < x1 + dx) &&
(mouseY > y1 && mouseY < y1 + dy)) {
fill(152,161,247, 100);
background(255);
if (!state) {on();}
state = true;
} else {
fill(204,240,152, 100);
if (state) {off();}
state = false;
}
rect(x1, y1, dx, dy);
}

استنتاج


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

بعد قراءة جميع المقالات في السلسلة ، يمكنك التحكم في وحدات Laurent من أربعة أنظمة شائعة:


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

Source: https://habr.com/ru/post/ar387561/


All Articles