سيناريوهات استخدام C SDK وC SDK المضمنة

توفر Microsoft حزم SDK لجهاز Azure IoT والبرامج الوسيطة لسيناريوهات الجهاز المضمنة والمقيدة. تساعد هذه المقالة مطوري الأجهزة على تحديد أي واحد لاستخدامه لتطبيقك.

يوضح الرسم التخطيطي التالي أربعة سيناريوهات شائعة يقوم فيها العملاء بتوصيل الأجهزة ب Azure IoT، باستخدام SDK المستند إلى C (C99). توفر بقية هذه المقالة المزيد من التفاصيل حول كل سيناريو.

رسم تخطيطي لسيناريوهات SDK الشائعة.

السيناريو 1 - Azure IoT C SDK (لنظامي التشغيل Linux وWindows)

بدءا من عام 2015، كان Azure IoT C SDK أول Azure SDK تم إنشاؤه لتوصيل الأجهزة بخدمات IoT. إنه نظام أساسي مستقر تم إنشاؤه لتوفير الإمكانات التالية لتوصيل الأجهزة ب Azure IoT:

  • خدمات IoT Hub
  • عملاء خدمة تزويد الأجهزة
  • ثلاثة خيارات لنقل الاتصالات (MQTT وAMQP وHTTP)، والتي يتم إنشاؤها وصيانتها بواسطة Microsoft
  • خيارات متعددة من مكدسات TLS الشائعة (OpenSSL و Schannel و Bed TLS وفقا للنظام الأساسي المستهدف)
  • مآخذ توصيل TCP (Win32 أو Berkeley أو Mbed)

توفير نقل الاتصالات، TLS وتجريد مأخذ التوصيل له تكلفة أداء. تتطلب malloc العديد من المسارات واستدعاءات memcpy بين طبقات التجريد المختلفة. تكلفة الأداء هذه صغيرة مقارنة بسطح المكتب أو جهاز Raspberry Pi. ومع ذلك، على جهاز مقيد حقا، تصبح التكلفة حملا كبيرا مع إمكانية تجزئة الذاكرة. تتطلب طبقة نقل الاتصالات أيضا استدعاء دالة doWork كل 100 مللي ثانية على الأقل. تجعل هذه المكالمات المتكررة من الصعب تحسين SDK للأجهزة التي تعمل بالبطارية. كما أن وجود طبقات تجريد متعددة يجعل من الصعب على العملاء استخدام أي مكتبة معينة أو تغييرها.

يوصى بالسيناريو 1 لأجهزة Windows أو Linux، والتي عادة ما تكون أقل حساسية لاستخدام الذاكرة أو استهلاك الطاقة. ومع ذلك، يمكن للأجهزة المستندة إلى Windows وLinux أيضا استخدام Embedded C SDK كما هو موضح في السيناريو 2. تتضمن الخيارات الأخرى للأجهزة المستندة إلى Windows وLinux حزم SDK لجهاز Azure IoT الأخرى: Java SDK و.NET SDK وNode SDK وPython SDK.

السيناريو 2 - C SDK المضمن (لسيناريوهات Bare Metal ووحدات التحكم الدقيقة)

في عام 2020، أصدرت Microsoft Azure SDK ل Embedded C (المعروفة أيضا باسم Embedded C SDK). تم إنشاء SDK هذا استنادا إلى ملاحظات العملاء والحاجة المتزايدة لدعم أجهزة وحدة التحكم الدقيقة المقيدة. عادة ما تقلل وحدات التحكم الدقيقة المقيدة من الذاكرة وقوة المعالجة.

يحتوي SDK C المضمن على الخصائص الرئيسية التالية:

  • لا يوجد تخصيص ديناميكي للذاكرة. يجب على العملاء تخصيص بنيات البيانات حيث يرغبون في مثل الذاكرة العمومية أو كومة الذاكرة المؤقتة أو المكدس. ثم يجب تمرير عنوان البنية المخصصة إلى وظائف SDK لتهيئة وتنفيذ عمليات مختلفة.
  • MQTT فقط. يعد استخدام MQTT فقط مثاليا للأجهزة المقيدة لأنه بروتوكول شبكة فعال وخفيف الوزن. يتم حاليا دعم MQTT v3.1.1 فقط.
  • أحضر مكدس الشبكة الخاص بك. لا تنفذ SDK C المضمنة أي عمليات إدخال/إخراج. يسمح هذا الأسلوب للعملاء بتحديد عملاء MQTT وTLS وSocket الذين لديهم أفضل ملاءمة للنظام الأساسي المستهدف.
  • مجموعة ميزات مشابهة مثل C SDK. يوفر SDK C المضمن ميزات مماثلة ل Azure IoT C SDK، مع الاستثناءات التالية التي لا توفرها SDK C المضمنة:
    • تحميل إلى كائن ثنائي كبير الحجم
    • القدرة على التشغيل كوحدة IoT Edge
    • الميزات المستندة إلى AMQP مثل تجميع رسائل المحتوى وتعدد الأجهزة
  • بصمة إجمالية أصغر. يمكن أن يستغرق SDK C المضمن، كما يظهر في عينة توضح كيفية الاتصال ب IoT Hub، أقل من 74 كيلوبايت من ROM و8.26 كيلوبايت من ذاكرة الوصول العشوائي.

يدعم SDK C المضمن وحدات التحكم الدقيقة بدون نظام تشغيل ووحدات تحكم مصغرة مع نظام تشغيل في الوقت الحقيقي (مثل Eclipse ThreadX) وLinux وWindows. يمكن للعملاء تنفيذ طبقات النظام الأساسي المخصصة لاستخدام SDK على الأجهزة المخصصة. كما توفر SDK بعض طبقات النظام الأساسي مثل Arduino وSwift. تشجع Microsoft المجتمع على إرسال طبقات النظام الأساسي الأخرى لزيادة الأنظمة الأساسية المدعومة الجاهزة. رياح نهر VxWorks هو مثال على طبقة النظام الأساسي التي يقدمها المجتمع.

يضيف SDK C المضمن بعض فوائد البرمجة بسبب مرونته مقارنة ب Azure IoT C SDK. وعلى وجه الخصوص، ستستفيد التطبيقات التي تستخدم الأجهزة المقيدة من وفورات هائلة في الموارد وتحكم برمجي أكبر. بالمقارنة، إذا كنت تستخدم Eclipse ThreadX أو FreeRTOS، يمكنك الحصول على نفس هذه الفوائد جنبا إلى جنب مع ميزات أخرى لكل تنفيذ RTOS.

السيناريو 3 - Eclipse ThreadX مع البرامج الوسيطة ل Azure IoT (للمشاريع المستندة إلى Eclipse ThreadX)

يتضمن السيناريو 3 استخدام Eclipse ThreadX والبرامج الوسيطة ل Azure IoT. تم إنشاء Eclipse ThreadX أعلى SDK C المضمن، ويضيف دعم MQTT وTLS. يعرض البرنامج الوسيط ل Eclipse ThreadX واجهات برمجة التطبيقات للتطبيق المشابهة لواجهات برمجة تطبيقات Eclipse ThreadX الأصلية. يجعل هذا الأسلوب من السهل على المطورين استخدام واجهات برمجة التطبيقات وتوصيل أجهزتهم المستندة إلى Eclipse ThreadX ب Azure IoT. Eclipse ThreadX هو نظام أساسي متكامل وفعال ومضمن في الوقت الحقيقي، ويوفر جميع ميزات الشبكات وإنترنت الأشياء التي تحتاجها للحل الخاص بك.

تتوفر نماذج للعديد من مجموعات المطورين الشائعة من ST وNXP و Renesas و Microchip. تعمل هذه العينات مع Azure IoT Hub أو Azure IoT Central، وتتوفر كمشروعات IAR Workbench أو شبه الموصلات IDE على GitHub.

نظرا لأنه يستند إلى SDK C المضمن، فإن البرنامج الوسيط Azure IoT ل Eclipse ThreadX هو تخصيص غير مخصص للذاكرة. يجب على العملاء تخصيص بنيات بيانات SDK في الذاكرة العمومية أو كومة الذاكرة المؤقتة أو مكدس الذاكرة المؤقتة. بعد تخصيص العملاء لبنية بيانات، يجب عليهم تمرير عنوان البنية إلى وظائف SDK لتهيئة وتنفيذ عمليات مختلفة.

السيناريو 4 - FreeRTOS مع البرامج الوسيطة FreeRTOS (للاستخدام مع المشاريع المستندة إلى FreeRTOS)

السيناريو 4 يجلب البرنامج الوسيط C المضمن إلى FreeRTOS. تم إنشاء البرنامج الوسيط C المضمن أعلى SDK C المضمن ويضيف دعم MQTT عبر مكتبة مصدر مفتوح coreMQTT. يعمل هذا البرنامج الوسيط ل FreeRTOS على مستوى MQTT. يقوم بإنشاء اتصال MQTT، والاشتراك وإلغاء الاشتراك من الموضوعات، ويرسل الرسائل ويتلقىها. تتم معالجة قطع الاتصال من قبل العميل عبر واجهات برمجة تطبيقات البرامج الوسيطة.

يتحكم العملاء في تكوين TLS/TCP والاتصال بنقطة النهاية. يسمح هذا النهج بالمرونة بين تطبيقات البرامج أو الأجهزة لأي من المكدس. لا يتم إنشاء أي مهام خلفية بواسطة البرنامج الوسيط Azure IoT ل FreeRTOS. يتم إرسال الرسائل وتلقيها بشكل متزامن.

يتم توفير التنفيذ الأساسي في مستودع GitHub هذا. تتوفر عينات للعديد من مجموعات المطورين الشائعة، بما في ذلك NXP1060 وSTM32 و ESP32. تعمل العينات مع Azure IoT Hub وAzure IoT Central وAzure Device Provisioning Service، وهي متوفرة في مستودع GitHub هذا.

نظرا لأنه يستند إلى Azure Embedded C SDK، فإن البرنامج الوسيط Azure IoT ل FreeRTOS هو أيضا تخصيص غير مخصص للذاكرة. يجب على العملاء تخصيص بنيات بيانات SDK في الذاكرة العمومية أو كومة الذاكرة المؤقتة أو مكدس الذاكرة المؤقتة. بعد تخصيص العملاء لبنية بيانات، يجب عليهم تمرير عنوان الهياكل المخصصة إلى وظائف SDK لتهيئة وتنفيذ عمليات مختلفة.

سيناريوهات الاستخدام التقني ل SDK المستندة إلى C

يلخص الرسم التخطيطي التالي الخيارات التقنية لكل سيناريو استخدام SDK موضح في هذه المقالة.

رسم تخطيطي مع تفاصيل المطور لسيناريوهات استخدام C SDK الأربعة.

مقارنة SDK المستندة إلى C حسب الذاكرة والبروتوكولات

يقارن الجدول التالي سيناريوهات تطوير SDK الأربعة للجهاز استنادا إلى الذاكرة واستخدام البروتوكول.

  الذاكره
تخصيص
الذاكره
استخدام
البروتوكولات
دعم
مستحسن ل
Azure IoT C SDK ديناميكي في الغالب Unrestricted. يمكن أن يمتد
إلى 1 ميغابايت أو أكثر في ذاكرة الوصول العشوائي.
AMQP
HTTP
MQTT v3.1.1
الأنظمة المستندة إلى المعالج الدقيق
Microsoft Windows
Linux
Apple OS X
Azure SDK ل Embedded C ثابت فقط مقيد بمقدار
يخصص تطبيق البيانات.
MQTT v3.1.1 وحدات التحكم المصغرة
تطبيقات بلا نظام تشغيل
التطبيقات المستندة إلى RTOS
Azure IoT Middleware for Eclipse ThreadX ثابت فقط مقيد MQTT v3.1.1 وحدات التحكم المصغرة
التطبيقات المستندة إلى RTOS
Azure IoT Middleware for FreeRTOS ثابت فقط مقيد MQTT v3.1.1 وحدات التحكم المصغرة
التطبيقات المستندة إلى RTOS

ميزات Azure IoT المدعومة من قبل كل SDK

يقارن الجدول التالي سيناريوهات تطوير SDK الأربعة للجهاز استنادا إلى دعم ميزات Azure IoT.

  Azure IoT C SDK Azure SDK ل
C مضمن
Azure IoT
البرامج الوسيطة ل
Eclipse ThreadX
Azure IoT
البرامج الوسيطة ل
FreeRTOS
مصادقة عميل SAS ‏‏نعم‬ نعم نعم ‏‏نعم‬
x509 Client Authentication ‏‏نعم‬ نعم نعم ‏‏نعم‬
توفير الجهاز ‏‏نعم‬ نعم نعم ‏‏نعم‬
القياس عن بعد ‏‏نعم‬ نعم نعم ‏‏نعم‬
رسائل من السحابة إلى الجهاز ‏‏نعم‬ نعم نعم ‏‏نعم‬
الطرق المباشرة ‏‏نعم‬ نعم نعم ‏‏نعم‬
توأم الجهاز ‏‏نعم‬ نعم نعم ‏‏نعم‬
IoT Plug-And-Play ‏‏نعم‬ نعم نعم ‏‏نعم‬
تجميع بيانات تتبع الاستخدام
(AMQP، HTTP)
‏‏نعم‬ لا لا لا
التحميلات إلى Azure Blob ‏‏نعم‬ لا لا لا
التكامل التلقائي في
حاويات IoT Edge المستضافة
‏‏نعم‬ لا لا لا

الخطوات التالية

لمعرفة المزيد حول تطوير الجهاز وSDKs المتوفرة ل Azure IoT، راجع الجدول التالي.