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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 البرنامج النصي لإرسال البيانات

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

دالة `send_data()`: دالة برمجية تُرسل قراءات درجة الحرارة والرطوبة إلى خدمة ويب سحابية.

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

```markmap

تطوير وبرمجة الأردوينو

مشروع الحديقة الذكية بالأردوينو

المكونات المطلوبة

  • مستشعر الحرارة (Temperature Sensor)

توصيل المكونات

#### توصيل مستشعر درجة الحرارة

  • توصيل طرف Power (الطاقة) للمستشعر بالعمود الموجب في لوحة التوصيل (سلك أحمر).
  • توصيل طرف Vout (الجهد) للمستشعر بالطرف التناظري A2 في الأردوينو (سلك أخضر).
  • توصيل طرف GND (الأرضي) للمستشعر بالعمود السالب في لوحة التوصيل (سلك أسود).
  • #### توصيل مستشعر رطوبة التربة

  • توصيل طرف Power (الطاقة) للمستشعر بالعمود الموجب في لوحة التوصيل (سلك أحمر).
  • توصيل طرف GND (الأرضي) للمستشعر بالعمود السالب في لوحة التوصيل (سلك أسود).
  • توصيل طرف Signal (الإشارة) للمستشعر بالطرف التناظري A4 في الأردوينو (سلك أخضر).
  • #### الدائرة بصورتها النهائية

    • توصيل الأطراف بالمكونات
    • المكونات المتصلة:
    - مستشعر رطوبة التربة (Soil Moisture Sensor)

    - ترانزستور (TMP)

    - محرك (Motor)

    #### الدائرة المادية (Physical Circuit)

    • صورة الدائرة بمكوناتها المادية
    • المكونات الظاهرة:
    - مستشعر رطوبة التربة (Capacitive Soil Moisture Sensor v1.2)

    - لوحة الأردوينو (Arduino Uno R3)

    - لوحة التوصيل (Breadboard)

    - محرك التيار المستمر (DC Motor)

    برمجة المكونات

    #### الخطوات البرمجية

  • استدعاء المكتبات المطلوبة (pyfirmata, time)
  • تكوين منفذ الاتصال والأطراف (COM4، محرك DC، مستشعر درجة الحرارة، مستشعر الرطوبة)
  • إعداد الاتصال بين PyFirmata ولوحة الأردوينو
  • تنفيذ دالة التحكم في محرك التيار المستمر (water_plant)
  • #### استكشاف الأخطاء وإصلاحها

    ##### التحقق من صحة بيانات المستشعر

    • استخدام حلقة تكرار لا نهائية (`while True`)
    • قراءة القيم غير المعالجة من الأطراف التناظرية
    • إضافة شرط `if` للتحقق من أن القيم ليست `None`
    ##### معالجة وتحويل البيانات

    • تحويل قيمة درجة الحرارة إلى درجات مئوية
    • تحويل مستوى الرطوبة إلى نسبة مئوية
    ##### إدخال شروط الري

    • كتابة شرط التحكم في الري:
    - إذا كانت `(temperature >= 24.0) and (moisture <= 40.0)`

    - استدعاء دالة `water_plant(dc_motor_pin)`

    ##### عرض التقارير

    • طباعة تقرير درجة الحرارة: `"Temperature : " + str(temperature) + " C"`
    • طباعة تقرير الرطوبة: `"Moisture : " + str(round(moisture, 2)) + "%"`
    • إضافة `time.sleep(10)` في نهاية الحلقة

    التفاعل مع خدمات الويب السحابية

    #### تطوير المشروع

    • إرسال البيانات عبر خدمة الويب السحابية من منصة Binary IoT Cloud
    #### عرض البيانات على المنصة

    • عرض البيانات البيئية المجمعة بواسطة الأردوينو
    • مثال: جدول ورسوم بيانية لقراءات درجة الحرارة والرطوبة
    ##### بيانات مثال من المنصة

    • درجة الحرارة: تتراوح بين 25.36°C و 25.43°C
    • الرطوبة: تتراوح بين 39.39% و 42.84%
    #### التسجيل في المنصة السحابية

    ##### خطوات التسجيل

  • الانتقال إلى موقع المنصة: https://ksa-iot.azurewebsites.net/Login.aspx
  • الضغط على "تسجيل" من صفحة الترحيب.
  • تعبئة بيانات الحساب:
  • - اسم المستخدم (Username)

    - كلمة المرور (Password)

    - رقم التعريف الشخصي (PIN): 174563

  • الضغط على زر "Register" (تسجيل).
  • ##### واجهة التسجيل (شكل 4.26)

    • تحتوي على رمز QR للوصول.
    • نموذج يحتوي على حقول:
    - Username

    - Password

    - Confirm Password

    - Pin

    - زر Register

    • أرقام مرقمة (1-5) تشير إلى تسلسل الإجراءات.
    #### استدعاء واجهة برمجة تطبيقات الويب (Web API) باستخدام البايثون

    ##### مفهوم Web API و JSON

    • Web API: نقطة وصل للتواصل بين برنامج وخادم على الإنترنت.
    • JSON: تنسيق مفتوح لنقل البيانات (مفتاح - قيمة).
    ##### خطوات البرمجة

  • تثبيت حزمة `requests`:
  • ```

    #### البرنامج بشكله النهائي (Complete Code)

    ##### المكتبات المستوردة

    • `from datetime import datetime`
    • `import time`
    • `import requests`
    • `import pyfirmata`
    ##### إعداد الاتصال بالأردوينو

    • `board = pyfirmata.Arduino('COM4')`
    ##### دالة `send_data()`

    • الوظيفة: إرسال البيانات إلى خدمة الويب السحابية.
    • المدخلات: `username`, `password`, `temperature`, `moisture`
    • الخطوات داخل الدالة:
    1. تحديد رابط API: `api_url = "https://ksa-iot-api.azurewebsites.net/api/readings"`

    2. الحصول على التاريخ والوقت الحالي: `date_time = str(datetime.now())`

    3. إنشاء كائن JSON يحتوي على جميع البيانات.

    4. إرسال البيانات باستخدام `requests.post(api_url, json=reading)`

    ##### إضافة الدالة في البرنامج الرئيسي

    • استدعاء الدالة: `send_data(username, password, temperature, moisture)`
    • إضافة تأخير 30 ثانية: `time.sleep(30)`
    ```

    نقاط مهمة

    • دالة `send_data()` تأخذ أربعة مُدخلات: اسم المستخدم، كلمة المرور، درجة الحرارة، والرطوبة.
    • تُرسل الدالة البيانات إلى رابط API محدد (`https://ksa-iot-api.azurewebsites.net/api/readings`) باستخدام طريقة `POST`.
    • يجب إضافة استدعاء الدالة في البرنامج الرئيسي مع إيقاف التنفيذ لمدة 30 ثانية بين كل إرسال.
    • البرنامج النهائي يستورد مكتبات `datetime`, `time`, `requests`, و `pyfirmata`.

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

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

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

    تعرض هنا كافة التعليمات البرمجية للدالة send_data()

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

    def send_data(username, password, temperature, moisture): api_url = "https://ksa-iot-api.azurewebsites.net/api/readings" date_time = str(datetime.now()) reading = { "username": username, "password": password, "temperature": temperature, "moisture": moisture, "datetime": date_time } response = requests.post(api_url, json=reading)

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

    أضف دالة send_data() في البرنامج الرئيس لإرسال البيانات عن البيئة التي جمعت كل 30 ثانية:

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

    send_data(username, password, temperature, moisture) time.sleep(30)

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

    البرنامج بشكله النهائي Complete Code

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

    from datetime import datetime import time import requests import pyfirmata board = pyfirmata.Arduino('COM4')

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

    تعرض هنا كافة التعليمات البرمجية للدالة send_data() def send_data(username, password, temperature, moisture): api_url = "https://ksa-iot-api.azurewebsites.net/api/readings" date_time = str(datetime.now()) reading = { "username": username, "password": password, "temperature": temperature, "moisture": moisture, "datetime": date_time } response = requests.post(api_url, json=reading) أضف دالة send_data() في البرنامج الرئيس لإرسال البيانات عن البيئة التي جمعت كل 30 ثانية: send_data(username, password, temperature, moisture) time.sleep(30) البرنامج بشكله النهائي Complete Code from datetime import datetime import time import requests import pyfirmata board = pyfirmata.Arduino('COM4')

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

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

    ما هي المكتبة البرمجية المستخدمة في النص لإرسال طلبات HTTP إلى خادم الويب؟

    • أ) مكتبة `pyfirmata`.
    • ب) مكتبة `datetime`.
    • ج) مكتبة `requests`.
    • د) مكتبة `time`.

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

    الإجابة: مكتبة `requests`.

    الشرح: 1. في بداية البرنامج، يتم استيراد المكتبات الضرورية. 2. من بينها، يتم استيراد مكتبة `requests` باستخدام `import requests`. 3. داخل دالة `send_data()`، يتم استخدام الدالة `post()` من هذه المكتبة لإرسال البيانات إلى عنوان URL المحدد. 4. إذن، المكتبة المسؤولة عن التواصل مع خادم الويب عبر HTTP هي مكتبة `requests`.

    تلميح: يظهر اسمها في سطر `import` وفي سطر `response = requests.post(...)`.

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

    ما هو تنسيق البيانات الذي يتم إرساله إلى الخادم عبر دالة `send_data()`؟

    • أ) تنسيق XML.
    • ب) تنسيق CSV.
    • ج) تنسيق نص عادي (Plain Text).
    • د) تنسيق JSON.

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

    الإجابة: تنسيق JSON.

    الشرح: 1. تقوم دالة `send_data()` بإنشاء قاموس Python باسم `reading` يحتوي على البيانات. 2. عند استدعاء `requests.post()`، يتم تمرير هذا القاموس إلى الوسيط `json=`. 3. تقوم مكتبة `requests` تلقائياً بتحويل القاموس Python إلى تنسيق JSON وإضافة رأس HTTP المناسب (`Content-Type: application/json`). 4. لذلك، يتم إرسال البيانات إلى الخادم بتنسيق JSON.

    تلميح: انظر إلى الوسيط `json=` المستخدم مع دالة `requests.post()`.

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

    ما هي الوظيفة الأساسية للدالة `send_data()` في سياق إنترنت الأشياء كما وردت في النص؟

    • أ) جمع البيانات من مستشعرات الأردوينو وتخزينها محلياً.
    • ب) إرسال بيانات القراءات (درجة الحرارة والرطوبة) إلى خادم API عبر الإنترنت.
    • ج) عرض بيانات المستشعرات على شاشة المستخدم في الوقت الفعلي.
    • د) معالجة وتحليل البيانات البيئية لتوليد تقارير.

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

    الإجابة: إرسال بيانات القراءات (درجة الحرارة والرطوبة) إلى خادم API عبر الإنترنت.

    الشرح: 1. تأخذ الدالة `send_data()` أربعة معلمات: اسم المستخدم، كلمة المرور، درجة الحرارة، والرطوبة. 2. تقوم بإنشاء كائن `reading` يحتوي على هذه البيانات بالإضافة إلى الطابع الزمني. 3. تستخدم مكتبة `requests` لإرسال هذا الكائن بتنسيق JSON إلى عنوان URL محدد للخادم باستخدام طلب POST. 4. الوظيفة الأساسية هي إرسال البيانات التي تم جمعها من المستشعرات إلى خادم بعيد عبر الإنترنت لمعالجتها أو تخزينها.

    تلميح: تتضمن الدالة معلمات مثل `temperature` و `moisture` وتستخدم `requests.post`.

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

    أي من الدوال التالية تُستخدم في لغة بايثون لإرسال بيانات الحساسات (مثل درجة الحرارة والرطوبة) إلى واجهة برمجة تطبيقات (API) سحابية بتنسيق JSON كما ورد في الدرس؟

    • أ) requests.get()
    • ب) requests.post()
    • ج) requests.update()
    • د) requests.read()

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

    الإجابة: requests.post()

    الشرح: 1. يتم تجميع بيانات الحساسات (المستخدم، كلمة المرور، الحرارة، الرطوبة) في قاموس (Dictionary). 2. تُستخدم مكتبة requests للتعامل مع طلبات HTTP. 3. الدالة ()post هي المسؤولة عن إرسال البيانات إلى رابط الـ API المحدد. 4. يتم تمرير البيانات عبر المعامل json لضمان وصولها بتنسيق مفهوم للخادم السحابي.

    تلميح: فكر في الدالة البرمجية التي تقوم بعملية 'إرسال' (Push) البيانات إلى خادم ويب بدلاً من مجرد طلبها.

    التصنيف: صيغة/خطوات | المستوى: متوسط