7.4 KiB
ربط جهاز إنترنت الأشياء بالسحابة - جهاز إنترنت الأشياء الافتراضي و Raspberry Pi
في هذا الجزء من الدرس، ستقوم بربط جهاز إنترنت الأشياء الافتراضي الخاص بك أو Raspberry Pi بمركز إنترنت الأشياء الخاص بك، لإرسال البيانات واستقبال الأوامر.
ربط جهازك بمركز إنترنت الأشياء
الخطوة التالية هي ربط جهازك بمركز إنترنت الأشياء.
المهمة - الربط بمركز إنترنت الأشياء
-
افتح مجلد
soil-moisture-sensor
في VS Code. تأكد من تشغيل البيئة الافتراضية في الطرفية إذا كنت تستخدم جهاز إنترنت أشياء افتراضي. -
قم بتثبيت بعض حزم Pip الإضافية:
pip3 install azure-iot-device
مكتبة
azure-iot-device
تُستخدم للتواصل مع مركز إنترنت الأشياء الخاص بك. -
أضف الواردات التالية إلى أعلى ملف
app.py
، أسفل الواردات الموجودة:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
هذا الكود يستورد SDK للتواصل مع مركز إنترنت الأشياء الخاص بك.
-
قم بإزالة السطر
import paho.mqtt.client as mqtt
حيث لم تعد هذه المكتبة مطلوبة. قم بإزالة كل كود MQTT بما في ذلك أسماء المواضيع، وكل الكود الذي يستخدمmqtt_client
وhandle_command
. احتفظ بحلقةwhile True:
، فقط احذف سطرmqtt_client.publish
من هذه الحلقة. -
أضف الكود التالي أسفل عبارات الواردات:
connection_string = "<connection string>"
استبدل
<connection string>
بسلسلة الاتصال التي استرجعتها للجهاز في وقت سابق من هذا الدرس.💁 هذا ليس أفضل ممارسة. لا يجب أبدًا تخزين سلاسل الاتصال في كود المصدر، حيث يمكن أن يتم إدخالها في نظام التحكم في الكود والعثور عليها من قبل أي شخص. نحن نفعل ذلك هنا من أجل التبسيط. من الأفضل استخدام شيء مثل متغير بيئة وأداة مثل
python-dotenv
. ستتعلم المزيد عن هذا في درس قادم. -
أسفل هذا الكود، أضف التالي لإنشاء كائن عميل جهاز يمكنه التواصل مع مركز إنترنت الأشياء، وربطه:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
قم بتشغيل هذا الكود. سترى جهازك يتصل.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
إرسال البيانات
الآن بعد أن تم ربط جهازك، يمكنك إرسال البيانات إلى مركز إنترنت الأشياء بدلاً من وسيط MQTT.
المهمة - إرسال البيانات
-
أضف الكود التالي داخل حلقة
while True
، قبل السطر الخاص بالنوم:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
هذا الكود ينشئ رسالة
Message
لمركز إنترنت الأشياء تحتوي على قراءة رطوبة التربة كـ JSON، ثم يرسلها إلى مركز إنترنت الأشياء كرسالة من الجهاز إلى السحابة.
التعامل مع الأوامر
يحتاج جهازك إلى التعامل مع أمر من كود الخادم للتحكم في المرحل. يتم إرسال هذا كطلب طريقة مباشرة.
المهمة - التعامل مع طلب طريقة مباشرة
-
أضف الكود التالي قبل حلقة
while True
:def handle_method_request(request): print("Direct method received - ", request.name) if request.name == "relay_on": relay.on() elif request.name == "relay_off": relay.off()
هذا الكود يعرّف طريقة،
handle_method_request
، سيتم استدعاؤها عند استدعاء طريقة مباشرة من قبل مركز إنترنت الأشياء. كل طريقة مباشرة لها اسم، ويتوقع هذا الكود طريقة تسمىrelay_on
لتشغيل المرحل، وrelay_off
لإيقافه.💁 يمكن أيضًا تنفيذ ذلك في طلب طريقة مباشرة واحدة، مع تمرير الحالة المطلوبة للمرحل في حمولة يمكن تمريرها مع طلب الطريقة وتكون متاحة من كائن
request
. -
تتطلب الطرق المباشرة استجابة لإبلاغ الكود المستدعي بأنه تم التعامل معها. أضف الكود التالي في نهاية وظيفة
handle_method_request
لإنشاء استجابة للطلب:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
هذا الكود يرسل استجابة لطلب الطريقة المباشرة مع رمز حالة HTTP 200، ويرسلها مرة أخرى إلى مركز إنترنت الأشياء.
-
أضف الكود التالي أسفل تعريف هذه الوظيفة:
device_client.on_method_request_received = handle_method_request
هذا الكود يخبر عميل مركز إنترنت الأشياء باستدعاء وظيفة
handle_method_request
عند استدعاء طريقة مباشرة.
💁 يمكنك العثور على هذا الكود في مجلد code/pi أو code/virtual-device.
😀 برنامج مستشعر رطوبة التربة الخاص بك متصل بمركز إنترنت الأشياء!
إخلاء المسؤولية:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.