صفحة 329 - كتاب إنترنت الأشياء - الصف 11 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

📚 معلومات الصفحة

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

📝 ملخص الصفحة

📚 المقطع البرمجي الخاص بالعقد الوسطى

المفاهيم الأساسية

المخزن المؤقت (Buffer): مكان تخزين البيانات المستقبلة حتى قراءتها.

الدالة (BufferSize): تُرجع حجم البيانات الموجودة في المخزن المؤقت.

خريطة المفاهيم

```markmap

أدوات محاكاة إنترنت الأشياء

برنامج كاب كاربون (CupCarbon)

إنشاء مشروع محاكاة جديد

#### الخطوة 1: بدء مشروع جديد

  • اضغط على أيقونة "New Project" (مشروع جديد) من شريط الأدوات.
#### الخطوة 2: حفظ المشروع

  • اختر الموقع المراد حفظ المشروع فيه.
  • اكتب اسم الملف: "My First CupCarbon Simulation".
#### الخطوة 3: تأكيد الحفظ

  • اضغط على زر "Save" (حفظ).

مشروع محاكاة: مراقبة الحريق والتحذيرات

#### إنشاء مشروع جديد للمراقبة

##### الخطوة 1: بدء مشروع جديد

  • اضغط على New Project (مشروع جديد) من شريط الأدوات.
##### الخطوة 2: تسمية المشروع وحفظه

  • اختر الموقع الذي تريد تخزين المشروع فيه.
  • اكتب "Fire Surveillance and Notification" في حقل File name (اسم الملف).
  • اضغط على Save (حفظ).

إنشاء شبكة العقدة بوحدة التحكم الرئيسية والوسطي

#### الخطوة 1: إدراج العقد

  • اضغط على "عقدة إنترنت أشياء (IoT) Node" من شريط Toolbar.
  • اضغط على الخريطة لإضافة العقدة.
  • اضغط على "All" من شريط State.
  • ضع عقدتين أخريين داخل الدائرة الخارجية للعقدة الأولى.
  • اضغط على Esc.
#### الخطوة 2: التعرف على العقد

  • العقدة الأولى المضافة هي وحدة التحكم الرئيسية.
  • العقدتان الأخريان هما عقد الوسطي.
#### الخطوة 3: ضمان الاتصال

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

تابع إضافة العقد الطرفية

#### لإدراج العقد الطرفية:

##### الخطوة 1

  • اضغط على Node IoT (عقدة إنترنت الأشياء) من شريط Toolbar (الأدوات).
##### الخطوة 2

  • ضع عقدتين كل node proxy (عقدة وسطى)، وذلك داخل دائرتها الأخرى.
##### الخطوة 3

  • اضغط على All (الكل) من شريط الحالة.
##### الخطوة 4

  • اضغط على Esc في لوحة المفاتيح.

إنشاء المقاطع البرمجية

#### المكتبات اللازمة

  • `import time`
  • `import random`
#### منطق المحاكاة (العقد الطرفية)

##### توليد حدث حريق عشوائي

  • داخل حلقة `while node.loop():`
  • `fire = random.randint(1, 6)` لتحديد القطاع الذي قد يحدث فيه الحريق.
##### التحقق من وقوع الحريق وإرسال التحذير

  • إذا كانت `fire == 1` (اندلع حريق في القطاع 1):
- `node.print("FIRE!")`

- إنشاء رسالة: `message = "FIRE IN SECTOR " + str(node.id())`

- إرسال الرسالة: `node.send(message)`

##### حالة عدم وجود حريق

  • إذا أنتجت دالة التوليد أي رقم آخر (من 2 إلى 6):
- لا يوجد حريق في القطاع.

- تقوم العقدة بطباعة نص ذاتي فارغ: `node.print("")` لمسح أي نص مطبوع سابقاً.

##### فترة السكون العشوائية

  • تهدف إلى محاكاة الأحداث في الحياة الواقعية.
  • تستخدم الدالة `time.sleep(random.uniform(1, 4))`.
  • فترة السكون تتراوح بين 1 و 4 ثوانٍ.
#### المقطع البرمجي النهائي (edge.py)

#### المقطع البرمجي للعقد الوسطى

##### التحقق من وجود بيانات

  • التحقق من أن حجم المخزن المؤقت أكبر من صفر باستخدام `node.bufferSize() > 0`.
##### قراءة البيانات وإعادة توجيهها

  • قراءة الرسالة المستقبلة باستخدام `message = node.read()`.
  • طباعة رسالة توضيحية: `node.print("FORWARDING...")`.
  • إرسال الرسالة إلى وحدة التحكم الرئيسية (معرفها 1) باستخدام `node.send(message, 1)`.
##### إدارة عرض الرسائل

  • السكون لمدة ثانية واحدة: `time.sleep(1)`.
  • مسح الرسالة المطبوعة: `node.print("")`.
##### ضمان استجابة العقدة

  • السكون لفترة قصيرة جداً (0.01 ثانية) باستخدام `time.sleep(0.01)`.
```

نقاط مهمة

  • يجب أن يكون حجم المخزن المؤقت (Buffer) أكبر من صفر لقراءة البيانات.
  • تقوم العقدة الوسطى بإعادة توجيه الرسالة المستقبلة إلى وحدة التحكم الرئيسية (معرفها 1).
  • يتم استخدام فترات سكون (`time.sleep`) لإعطاء وقت لقراءة الرسائل وضمان استجابة العقدة لتدفق البيانات.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

نوع: محتوى تعليمي

المقطع البرمجي الخاص بالعقد الوسطى

نوع: محتوى تعليمي

عند استقبال العقدة للبيانات، تُخزّن في المخزن المؤقت (Buffer) الخاص بها حتى قراءتها، ولذلك يجب التحقق من حجم المخزن المؤقت في البداية حيث يجب أن تكون قيمته أكبر من صفر (غير فارغ). يُمكن إرجاع حجم المخزن المؤقت بواسطة الدالة (BufferSize).

نوع: محتوى تعليمي

import time while node.loop(): if node.bufferSize() > 0:

نوع: محتوى تعليمي

يمكنك بعد ذلك قراءة البيانات المستقبيلة باستخدام الدالة (read). بعد قراءة الرسالة، تُخزّن في رسالة المتغير. تقوم العقدة أيضاً بطباعة رسالة "FORWARDING" لتوضيح أنها تعيد توجيه الرسالة إلى وحدة التحكم الرئيسية.

نوع: محتوى تعليمي

message = node.read() node.print("FORWARDING...")

نوع: محتوى تعليمي

كما هو الحال في البرنامج السابق، سترسل الرسالة المخزنة في المتغير إلى وحدة التحكم الرئيسية باستخدام الدالة (send). نظراً لأن الرسالة خاصة بقاعدة بيانات ومعرف محدد، فلا يلزم بل يمكن بدلاً من ذلك أن تكون أحادية الإرسال (أي تُرسل إلى عقدة واحدة فقط). في الحالة السابقة، أضيفت وحدة التحكم الرئيسية أولاً، وبالتالي يكون لها معرف مساوياً لـ 1.

نوع: محتوى تعليمي

node.send(message, 1)

نوع: محتوى تعليمي

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

نوع: محتوى تعليمي

time.sleep(1) node.print("")

نوع: محتوى تعليمي

ينتهي المقطع البرمجي بسكون العقدة لفترة زمنية صغيرة جداً ( جزء من مائة من الثانية)، مما يمنحها القدرة على الاستجابة في حالة تلقيها الكثير من البيانات.

نوع: محتوى تعليمي

time.sleep(0.01)

نوع: METADATA

وزارة التعليم Ministry of Education 329 2025 - 1447

📄 النص الكامل للصفحة

المقطع البرمجي الخاص بالعقد الوسطى عند استقبال العقدة للبيانات، تُخزّن في المخزن المؤقت (Buffer) الخاص بها حتى قراءتها، ولذلك يجب التحقق من حجم المخزن المؤقت في البداية حيث يجب أن تكون قيمته أكبر من صفر (غير فارغ). يُمكن إرجاع حجم المخزن المؤقت بواسطة الدالة (BufferSize). import time while node.loop(): if node.bufferSize() > 0: يمكنك بعد ذلك قراءة البيانات المستقبيلة باستخدام الدالة (read). بعد قراءة الرسالة، تُخزّن في رسالة المتغير. تقوم العقدة أيضاً بطباعة رسالة "FORWARDING" لتوضيح أنها تعيد توجيه الرسالة إلى وحدة التحكم الرئيسية. message = node.read() node.print("FORWARDING...") كما هو الحال في البرنامج السابق، سترسل الرسالة المخزنة في المتغير إلى وحدة التحكم الرئيسية باستخدام الدالة (send). نظراً لأن الرسالة خاصة بقاعدة بيانات ومعرف محدد، فلا يلزم بل يمكن بدلاً من ذلك أن تكون أحادية الإرسال (أي تُرسل إلى عقدة واحدة فقط). في الحالة السابقة، أضيفت وحدة التحكم الرئيسية أولاً، وبالتالي يكون لها معرف مساوياً لـ 1. node.send(message, 1) بعد ذلك، سوف تسكن العقدة لمدة ثانية واحدة لمنح المستخدم وقتاً كافياً لقراءة الرسالة التوضيحية المطبوعة على العقدة، ثم ستقوم العقدة بمسح الرسالة وذلك بطباعة نص فارغ. time.sleep(1) node.print("") ينتهي المقطع البرمجي بسكون العقدة لفترة زمنية صغيرة جداً ( جزء من مائة من الثانية)، مما يمنحها القدرة على الاستجابة في حالة تلقيها الكثير من البيانات. time.sleep(0.01) وزارة التعليم Ministry of Education 329 2025 - 1447

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 4 بطاقة لهذه الصفحة

ما الشرط الذي يجب التحقق منه قبل قراءة البيانات المستقبلة من المخزن المؤقت (Buffer) في العقدة الوسطى؟

  • أ) أن يكون حجم المخزن المؤقت أقل من سعته القصوى.
  • ب) أن يكون حجم المخزن المؤقت أكبر من صفر (غير فارغ).
  • ج) أن يكون المخزن المؤقت فارغاً تماماً.
  • د) أن يكون حجم المخزن المؤقت مساوياً لسعة العقدة.

الإجابة الصحيحة: b

الإجابة: أن يكون حجم المخزن المؤقت أكبر من صفر (غير فارغ).

الشرح: 1. تقوم العقدة بتخزين البيانات المستقبلة في المخزن المؤقت (Buffer). 2. قبل قراءة البيانات، يجب التأكد من وجود بيانات فعلياً. 3. يتم ذلك عن طريق التحقق من أن حجم المخزن المؤقت (BufferSize) أكبر من الصفر. 4. هذا الشرط يضمن عدم محاولة قراءة من مخزن فارغ.

تلميح: يتم التحقق من حالة المخزن قبل عملية القراءة.

التصنيف: مفهوم جوهري | المستوى: سهل

ما الدالة المستخدمة في المقطع البرمجي للتحقق من وجود بيانات في المخزن المؤقت (Buffer) قبل قراءتها؟

  • أ) الدالة (read).
  • ب) الدالة (send).
  • ج) الدالة (bufferSize).
  • د) الدالة (print).

الإجابة الصحيحة: c

الإجابة: الدالة (bufferSize).

الشرح: 1. في برمجة العقد الوسطى في إنترنت الأشياء، تُخزّن البيانات المستقبلة في المخزن المؤقت. 2. قبل قراءة هذه البيانات، يجب التحقق من وجودها. 3. يتم ذلك باستدعاء دالة خاصة تُرجع حجم البيانات الموجودة. 4. اسم هذه الدالة هو (bufferSize).

تلميح: تستخدم للتحقق من حجم البيانات المخزنة.

التصنيف: تعريف | المستوى: سهل

ما الغرض من استخدام الأمر (time.sleep(1)) في نهاية عملية إعادة التوجيه في العقدة الوسطى؟

  • أ) لإعادة تشغيل العقدة بعد كل عملية إرسال.
  • ب) لزيادة سرعة معالجة البيانات في العقدة.
  • ج) لسكون العقدة لمدة ثانية واحدة لمنح المستخدم وقتاً لقراءة الرسالة التوضيحية المطبوعة.
  • د) لتفريغ المخزن المؤقت (Buffer) تلقائياً.

الإجابة الصحيحة: c

الإجابة: لسكون العقدة لمدة ثانية واحدة لمنح المستخدم وقتاً لقراءة الرسالة التوضيحية المطبوعة.

الشرح: 1. بعد أن تقوم العقدة بطباعة رسالة "FORWARDING..." لتوضيح عملها. 2. تحتاج إلى إعطاء المستخدم وقتاً كافياً لقراءة هذه الرسالة. 3. لذلك، تُستخدم الدالة (time.sleep(1)) لتوقيف تنفيذ البرنامج لمدة ثانية واحدة. 4. بعد هذه الثانية، تُمسح الرسالة بطباعة نص فارغ.

تلميح: يتعلق بفترة الانتظار بعد طباعة رسالة للمستخدم.

التصنيف: مفهوم جوهري | المستوى: متوسط

ما نوع الإرسال المستخدم عند إعادة توجيه الرسالة من العقدة الوسطى إلى وحدة التحكم الرئيسية في المثال المذكور، ولماذا؟

  • أ) إرسال بث عام (Broadcast) لأن جميع العقد تحتاج للرسالة.
  • ب) إرسال أحادي (Unicast) لأن الرسالة خاصة بقاعدة بيانات ومعرف محدد (معرف وحدة التحكم = 1).
  • ج) إرسال متعدد (Multicast) لمجموعة مختارة من العقد.
  • د) إرسال أي نوع لأن العقدة تختار تلقائياً.

الإجابة الصحيحة: b

الإجابة: إرسال أحادي (Unicast) لأن الرسالة خاصة بقاعدة بيانات ومعرف محدد (معرف وحدة التحكم = 1).

الشرح: 1. تقوم العقدة الوسطى بإعادة توجيه الرسالة المستقبلة. 2. الوجهة هي وحدة التحكم الرئيسية فقط. 3. لأن الرسالة خاصة بقاعدة بيانات ومعرف محدد (معرف وحدة التحكم = 1). 4. لذلك، يكون الإرسال أحادي (Unicast) وليس بثاً عاماً.

تلميح: يتعلق بعدد المستقبلين وخصوصية الرسالة.

التصنيف: مفهوم جوهري | المستوى: متوسط