الاتصال في شبكة إنترنت الأشياء - إنترنت الأشياء - ثاني ثانوي
الجزء الأول
1. أسس إنترنت الأشياء
2. إنترنت الأشياء في حياتنا
3. إنشاء تطبيقات إنترنت الأشياء باستخدام الأردوينو
4. إنشاء تطبيق سحابي لإنترنت الأشياء
الجزء الثاني
5 .تطبيقات إنترنت الأشياء المتقدمة
6 .برمجة إنترنت الأشياء باستخدام ++C
7 .الرسائل في إنترنت الأشياء
8. محاكاة شبكة مستشعرات إنترنت الأشياء اللاسلكية
الدرس الثاني الاتصال في شبكة إنترنت الأشياء 3 www.en.edu.sa الاتصال بين الأجهزة Communication between Devices تكون شبكة إنترنت الأشياء من العديد من الأجهزة التي ترسل وتستقبل البيانات بين بعضها. التماير هذه الأجهزة في إمكانياتها المختلفة مثل النطاق. وعرض النطاق الترددي للبيانات واستهلاكها للطاقة. وبالتالي تقوم بتشغيل مجموعات مختلفة من الأوامر التوفير العديد من الوظائف تنشئ في المشروع الآتي شبكة مثل هذه. وتتكشف اللبنات البرمجية الأساسية المكونة لها. مراقبة الحريق والتحذيرات Fire Surveillance and Notification ستنشن في هذا الدرس مشروعاً يحاكي نظام مراقبة الحرائق في المصانع. سيتم في هذه المحاكاة إنشاء حرائق عشوائية في مصنع، وسيبلغ النظام وحدة التحكم الرئيسة بالمصنع عن القطاع الذي يوجد فيه الحريق سينقذ ذلك باستخدام مجموعة متنوعة من العقد ذات الوظائف المختلفة التي ستتواصل مع بعضها لتمرير الرسالة بدءًا من العقد الطرفية (Edges) مروراً بالعقد الوسطى (Proxies) لتصل أخيرا إلى العقدة الداخلية المتحكم الرئيس .(main controller) العقد ووظائفها The Nodes and their Functions ستستخدم ثلاثة أنواع من العقد في مشروعك التمثيل قطاعات المصنع المختلفة . قد يحدث حريق في الأطراف (Edges). وسيتم تحديده بواسطة مولد أرقام عشوائي في مثل هذه الحالات، ستطيع العقدة رسالة ذاتية وترسل رسالة مختلفة تحتوي على رقم القطاع إلى عقدة الوسطى (Proxy) المحاورة لها، ثم ستسكن المدة زمنية محددة. . سيقرأ الوكلاء أي رسائل قد تلقوها ويعيدونها إلى وحدة المتحكم الرئيسة (main controller). كما قد يقومون بطباعة رسالة ذاتية لإبلاغ المستخدم بما يقومون به. . تقوم وحدة التحكم الرئيسة أيضا قرابة أي رسائل قد تكون تلقتها. وتطيع الرسائل التي أنشئت بواسطة العقد الطرفية التي تخبر المستخدم بالحريق. الطفية المطر البسطي الطرفية الرقة الطرحة ورارة التعليم C
تعليم 1 CupCarton let 50 لتبدأ بإنشاء مشروع جديد لإنشاء مشروع جديد أضغط على New Project ( مشروع جديد ) من شريط الأدوات ) اختر الموقع الذي تريد تعرين المشروع فيه. ثم اكتب Fire Surveillance and Notification" في حقل File name الملف واستغط على Save ( حفظ ) 0 2 8.13 استاء مشروع ده 3 324
ابدأ بإنشاء شبكة العقدة بإصافة وحدة التحكم الرئيسة والوسطى بدا لم يتم وضع العقد داخل نصف قطر وحلية المتحكم، فلن تتمكن من الاتصال والتقلب على ذلك اسحبها وأفلتها بالقرب من وحدة لادراج وحدة المتحكم وعقد الوسطى اضغط على IOT Node ( عقدة انترنت أشياء ) من شريط Toolbar ( الأدوات) اضغط على الخريطة لإضافة العقدة. اضغط على All (الكل) من شريط State ( الحالة ) . > مع عقدني حربي على يسار ويعين العقدة الأولى وداخل دائرتها الخارجية ) المتحكم حتى يغير سيم ثنائي الاتحاد يربط بين المحسين اضغط على Es. 1 3 4 2 العقبة الأولى التي ستصاب هي الوحدة التحكم الرئيسة والأخرى في الوسطى. شكل 15 8: اصابة وجد التحكم على الوسطى
1 تابع بإضافة العقد الطرفية لإدراج العقد الطرفية > اضغط على IoT Node عضة انترنت أشياء) من شريط Toolbar ( الأدوات) | مع عند تين على كل proxy node (عقدة الوسطى)، وذلك داخل دائرتها الخارجية، ولكن خارج نطاق في عقده أخرى > اضغط على All (الكل) من شريط الحالة أضغط على Ext في لوحة المفاتيح 3 2 شکر 815 الساعة العقد الطرقية 326
import time: import random إنشاء المقاطع البرمجية Creating the Scripts ستتعرف الآن على المقاطع البرمجية التي ستقوم بتشغيل العقد. لنبدأ ببرمجة العقد الطرفية. في البداية. أضف المكتبات اللازمة. تأخذ دالة توليد الأرقام العشرية ( )randint عددين صحيح بن كوسيطين. وتعيد عددا صحيحًا عشوائيا داخل نطاق هدين العددين، على سبيل المثال، وفي الحالة السابقة ستنى (16)randint عددًا صحيحا بشكل عشوائي بقيمة بين 1 إلى 6. سيستخدم الرقم ليمثل القطاع الذي قد يندلع فيه الحريق في كل فترة زمنية وسيتم تخزين العدد الصحيح في منغير fire while node. Loop(): fire = random.randint(1, 6) إذا افترضنا أن دالة ( )randint ترجع الرقم 1 فستكون النيران قد اندلعت افتراضيا في هذا القطاع، سيتحقق البرنامج مما إذا كانت قيمة المتغير fire تاوي .1 . وإذا كان الأمر كذلك. سيتم تشغيل سلسلة من الأوامر بما فيها طباعة الرسالة "FIREY" ( حريق) على العقدة نقها وإرسال رسالة تحتوي على معرف القطاع الخاص بها إلى العقد الوسطى (proxy nade) المجاورة لها. إن معرف القطاع هو نفسه رقم معرف العقدة، وهو عدد صحيح فريد. إذا كان معرف القطاع 5، فستكون الرسالة المرسلة FIRE IN SECTOR S" (حريق في قطاع (5). يمكن إرجاع معرف العقدة وبالتالي القطاع بواسطة الدالة ( )id، يتم إرجاع المعرف كرقم، لذلك يجب تحويلة" إلى نوع نص قبل أن يربط بالرسالة المتبقية. if fire == 1: node.print("FIRE!") message: "FIRE IN SECTOR + str(node.id()) يمكن للعقد إرسال البيانات لبعضها باستخدام دالة ( ) send تستخدم الدالة وسيطا واحدا فقط، وهو نص الرسالة الذي تقوم ببته إلى جميع العضد داخل نطاقها. .node.seh message) حرارة التعليم
إذا أنتجت دالة توليد الأرقام العشوائية أي عدد صحيح آخر (في حالتنا أي رقم من 2 إلى 6 ، فلا يوجد حريق في القطاع. ويتعين على العقدة ببساطة طباعة نص ذاتي فارغ المسح أي نص مطبوع سابقا. else: node.print("") في الختام، ستسكن العقدة لفترة زمنية عشوائية. وذلك لمحاكاة عشوائية الأحداث في الحياة الواقعية. سيتحقق ذلك باستخدام الدالة ( ) uniform التي تعمل مثل دالة ( )randint. ولكنها تنتج أعدادا حقيقية ولبس فقط أعدادا صحيحة. ستتراوح فترة السكون في مشروعك بين 1-4 ثوان. time. sleep(random.uniform(1, 4)) import time import random while node.loop(): fire =random, randint(1, 6) + str(node. id()) af Fire == 1: node.print("FIRE!") message = "FIRE IN SECTOR node.send (inessage) else: node print("") time.sleep(random.uniform(1, 4)) مرارة التعليم المقطع البرمجي النهائي (edge.py) Complete Code (edge.py) 328
التالي هو المقطع البرمجي الخاص بالعقد الوسطى. عند استقبال العقدة للبيانات تخزن في المخزن المؤقت (buffer) الخاص بها حتى قراءتها، ولذلك يجب التحقق من حجم المخزن المؤقت في البداية حيث يجب أن تكون قيمته أكبر من صمر ( غير (فارغ يمكن إرجاع حجم المخزن المؤقت بواسطة الدالة ( )bufferSize import time while node. Loop(): if node.bufferSize() > 0: يمكنك بعد ذلك قراءة البيانات المستقبلة باستخدام الدالة .(read. بعد قراءة الرسالة تخزن في رسالة المتغير. تقوم العقدة أيضا بطباعة رسالة " ...FORWARDING" لتوضح أنها تعيد توجيه الرسالة إلى وحدة التحكم الرئيسة. message=node.read() node.print("FORWARDING...") كما هو الحال في البرنامج السابق. سترسل الرسالة المخزنة في المتغير إلى وحدة التحكم الرئيسة باستخدام الدالة ( )send. وفي هذه المرة وبصرف النظر عن الرسالة، سيستلزم الأمر وسيطة إضافية وهي معرف العقدة المستقبلة (Node (D). نظرا لكون الرسالة خاصة بعقدة واحدة ويمعرف محدد هلا يلزم بث الرسالة، بل يمكن بدلا من ذلك أن تكون أحادية الإرسال ( أي ترسل إلى عقدة واحدة فقط). في الحالة السابقة، أضيفت وحدة المتحكم الرئيسة أولا، وبالتالي يكون لها معرف مساويا 1. node.send(message, 1) بعد ذلك. سوف تسكن العقدة المدة ثانية واحدة لمنح المستخدم وقتا كافيا لقراءة الرسالة التوضيحية المطبوعة على العقدة. ثم ستقوم العقدة بمسح الرسالة وذلك بطباعة بصى فارغ. time.sleep(1) node.print("") ينتهي المقطع اليرمجي بسكون العقدة لفترة زمنية صغيرة جدا ( جزء من مائة من الثانية)، مما يمنحها القدرة على الاستجابة في حالة تلقيها الكثير من البيانات. time.sleep(0.01) درارة التعليم 329
import time while node.loop(): if node.bufferSize() > 0: message= node.read() node.print("FORWARDING...") node.send(message, 1)+ time.sleep(1) node.print("") time.sleep(0.01) المقطع البرمجي النهائي (proxy.py) معامل الرقم في عدالة | |send هو رفع معرف عقدة وحدة المتحكم Complete code (proxy.py) يتشابه المقطع البرمجي لوحدة المتحكم نوعا ما مع برامج العقد الوسطى. فهو يفحص المحزن المؤقت، ويقرأ الرسالة المستلمة، ولكن الرسالة الذاتية المطبوعة هي نفس الرسالة التي أنشئت في الأصل بواسطة عقدة الطرفية ( edge node ) . import time while node.loop(): if node.bufferSize() > 0: message = node.read() node.print(message): بعد ذلك وكما حدث في عقد الوسطى، ستسكن وحدة المتحكم ولكن لمدة لاتبتين هذه المرة لم تطبع نصا فارغا وفي الخيام ستكن لفترة قصيرة بنفس الطريقة التي حدثت مع العقد الوسطى. time sleep(2) mode print("") time.sleep(0.01) 330
import time while node. Loop(): if node.bufferSize() > 0: message node.read() node.print(message) time.sleep(2) node.print(") time.sleep(0.01) المقطع البرمجي النهائي (controller.py ) شكل 8.16 الشبكة شكلية الهالي درارة التعليم 331 Complete code (controller.py) الطرفية
3 الآن وبعد أن تعرفت على وظيفة المقاطع البرمجية، تابع عملك وقم بإنشائها. لإنشاء البرنامج وتطبيقه على عقدة وحدة المتحكم لانشاء المقطع البرمجي اضغط على نايتون في شريط الأدرات 0 أكتب أوامر بايتون البرمجية في الحقل الشارع 2 أكت controller (وحدة المتحكم | 2 حفل File name ( اسم الملف ). اضغط على Save | حفظ ... أغلق نافذة محرر بايتون النسي. 1 gedee 2 شكل 17 8 أساء المقطع البرمجي وزارة التعليم 4 x5 332
لادراج البرنامج . > اضغط على العقدة. < اضغط على علامة تبويب Device parameters ) معاملات الجهار ) : قائمة Parameters ( المعاملات) 2 اضغط على صندوق Soript file ملف المقطع البرمجي) . القالمة المنسدلة، اختر ملف controller, py واضغط على الزر الموجود على اليمين الأدراج المقطع البرمجي في مي العشرة 0 > اضغط على Save Project ( حفظ المشروع من Toolbar (شريط الأدوات ) . 5 Z 3 4 مرارة التعليم شن 8:18 إضافة المقطع الرمحي 333 1
انشئ المقاطع البرمجية الأخرى بنفس الطريقة، وانسخ أوامرها وطبقها على العقد المقابلة لها. بحيث تحتوي جميع العقد على المقطع البرمجي عند الانتهاء اضغط على Run lot Simulation استخدم أسماء نصية معبرة ( تشغيل محاكاة إنترنت الأشياء) من شريط الأدوات. الواضحة للمقاطع البرمجية مثل proxy py edge.py الاحظ أنه نظرا لاستخدامك مولدات أرقام عشوائية، فقد تشتعل حرائق في بعض القطاعات الموجودة على الأطراف أكثر من غيرها والتي قد لا تشتعل فيها حرائق على الإطلاق. 334 حرارة التعليم شم 19 18 حالات المحاكاة
تمرينات 1 وسع مشروعك الدعم عقدة طرقية (Edge) نصاف لكل عقدة وسطى (Proxy)، بحيث يكون لكل عقدة وسطى ثلاثة عقد طرفية، لا تنس إضافة المقاطع البرمجية داخل العقد الحديدة. 2 وسع مترو عند الدعم عقدة وسطى اضافية. وأضف عقدتين طرفيتين جديدتين الى الوسطي بحيث يكون لدى وحدة المتحكم الرئيسة ثلاث عقد وسطى. ولكل عقدة وسطى عقدتين طرفيتين. لا تنس اضافة المقاطع البرمجية داخل العقد الجديدة. 2 جنداي قسم من التعليمات البرمجية يقرر تكرار حدوث الحرائق عدل مشروعك في برنامج كاب كاربون ( CupCarbon) لزيادة احتمال حدوث الحرائق أكثر من المسابق. 4 قد يؤدي أي تأخير إمتى (latency) في شبكة المصنع إلى تأخير الاتصال بين العقد قم بتعديل برنامجك الخاص يعقد الوسطى لجعل العقد في وضع السكون الفترة أطول هل لاحظت وجود أي تأخير او فقدان لأي رسائل دور ملاحظاتك أبتاه 5 وسع مشروعك ليدعم احتمال حدوث تسرب المياه و حدوت الفيضان عدل برنامجك للقطاعات المعرضة للحي التي بحيث يعلى إرجاع القيمة من دالة توليد الارقام العشوائية () andint القيمة 2 حدوت تشري المياه أو فيجار ي هذا القطاع على العقدة القيام بطباعة الرسالة المناسبة وإرسالها صرارة التصلي