البرنامج التعليمي: تطوير وحدة C# IoT Edge النمطية باستخدام حاويات Linux

ينطبق على:yes icon IoT Edge 1.1 IoT Edge 1.2 yes icon

استخدم Visual Studio Code لتطوير التعليمات البرمجية C# ونشرها على جهاز يعمل على Azure IoT Edge.

يمكنك استخدام وحدات Azure IoT Edge النمطية لنشر التعليمات البرمجية التي تنفذ منطق عملك مباشرةً على أجهزة IoT Edge. هذا البرنامج التعليمي يرشدك من خلال إنشاء ونشر وحدة IoT Edge التي تعمل على تصفية بيانات الاستشعار. ستستخدم جهاز IoT Edge المحاكي الذي أنشأته في عمليات التشغيل السريع. في هذا البرنامج التعليمي، تتعلم كيفية:

  • استخدام Visual Studio Code لإنشاء وحدة IoT Edge نمطية تستند إلى .NET Core 2.1 SDK.
  • استخدام Visual Studio Code وDocker لإنشاء صورة Docker ونشرها إلى سجلك.
  • نشر الوحدة النمطية إلى جهاز IoT Edge.
  • عرض البيانات التي تم إنشاؤها.

تقوم وحدة IoT Edge التي تقوم بإنشائها في هذا البرنامج التعليمي بتصفية بيانات درجة الحرارة التي تم إنشاؤها بواسطة جهازك. يرسل رسائل فقط تجاه المنبع إذا كانت درجة الحرارة فوق عتبة محددة. هذا النوع من التحليل على الحافة مفيد لتقليل كمية البيانات التي يتم توصيلها وتخزينها في السحابة.

إذا لم يكن لديك اشتراك Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

المتطلبات الأساسية

يوضح هذا البرنامج التعليمي كيفية تطوير وحدة نمطية في ⁧⁩C#⁧⁩ باستخدام ⁧⁩Visual Studio Code⁧⁩، ونشرها على جهاز IoT Edge. إذا كنت تطور الوحدات النمطية باستخدام حاويات Windows، فانتقِل إلى ⁧⁩تطوير وحدة C# IoT Edge النمطية باستخدام حاويات Windows⁧⁩ بدلاً من ذلك.

استخدم الجدول التالي لفهم خياراتك لتطوير ونشر وحدات C# باستخدام حاويات Linux:

C#‎ تعليمة Visual Studio برمجية Visual Studio
Linux AMD64 C# modules for LinuxAMD64 in VS Code C# modules for LinuxAMD64 in Visual Studio
Linux ARM32 C# modules for LinuxARM32 in VS Code C# modules for LinuxARM32 in Visual Studio
لينكس ARM64 C# modules for LinuxARM64 in VS Code C# modules for LinuxARM64 in Visual Studio

قبل بدء هذا البرنامج التعليمي، يجب الانتهاء من البرنامج التعليمي السابق لإعداد بيئة التطوير: ⁧⁩ تطوير وحدات IoT Edge النمطية باستخدام حاويات Linux⁧⁩. بعد استكمال هذا البرنامج التعليمي، يجب أن تكون لديك المتطلبات الأساسية التالية:

لاستكمال هذه البرامج التعليمية، يُرجى إعداد المتطلبات الأساسية الإضافية التالية على جهاز التطوير:

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

تنشئ الخطوات التالية مشروع وحدة IoT Edge نمطية لـ C# باستخدام Visual Studio Code وملحق أدوات IoT Azure. بعد إنشاء قالب مشروع، أضف تعليمات برمجية جديدة بحيث تعمل الوحدة النمطية على تصفية الرسائل استنادًا إلى خصائصها التي تم الإبلاغ عنها.

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

أنشئ قالب حل C# يمكنك تخصيصه باستخدام التعليمات البرمجية.

  1. في Visual Studio Code، حدد ⁧⁩View⁧⁩⁧>⁩⁧⁩Command Palette⁧⁩ لفتح لوحة أوامر VS Code.

  2. في لوحة الأوامر، أدخل الأمر ⁧⁩Azure: Sign in⁧⁩ وشغّله واتبع الإرشادات لتسجيل الدخول إلى حسابك على Azure. إذا كنت قد سجّلت الدخول من قبل، يمكنك تخطي هذه الخطوة.

  3. في لوحة الأوامر، أدخل الأمر ⁧⁩Azure IoT Edge: New IoT Edge solution⁧⁩ وشغّله. اتبع المطالبات في لوح الأوامر لإنشاء الحل الخاص بك.

    الحقل القيمة
    حدد مجلدًا اختر الموقع على جهاز التطوير الخاص بك لأجل VS Code لإنشاء ملفات الحل.
    توفير اسم حل أدخل اسمًا وصفيًّا للحل الذي تستخدمه أو اقبل EdgeSolution الافتراضي.
    تحديد قالب الوحدة النمطية اختر ⁧⁩وحدة C# النمطية⁧⁩.
    توفير اسم وحدة نمطية أطلق اسمًا على الوحدة النمطية ⁧⁩ CSharpFunction ⁧⁩.
    توفير مستودع صور Docker للوحدة النمطية يتضمن مستودع الصور اسم سجل الحاوية واسم صورة الحاوية. صورة الحاوية الخاصة بك مملوءة مسبقًا بالاسم الذي قدمته في الخطوة الأخيرة. استبدل localhost:5000 بقيمة خادم تسجيل الدخول من سجل حاوية Azure. يمكنك استرداد ملقم تسجيل الدخول من صفحة نظرة عامة من تسجيل الحاوية في مدخل Azure.

    يبدو مستودع الصور النهائي مثل <اسم> التسجيل .azurecr.io/csharpmodule.

    Provide Docker image repository

أضف بيانات اعتماد التسجيل الخاصة بك

ملف البيئة يخزن بيانات الاعتماد الخاصة بسجل الحاوية ويشاركها مع وقت التشغيل IoT Edge. يحتاج وقت التشغيل إلى بيانات الاعتماد هذه لسحب الصور الخاصة بك إلى جهاز IoT Edge. استخدم بيانات الاعتماد من القسم ⁧⁩Access keys⁧⁩ من سجل حاويات Azure.

يحاول ملحق IoT Edge سحب بيانات اعتماد تسجيل الحاوية من Azure وتعبئتها في ملف البيئة. تحقق لمعرفة ما إذا كانت بيانات الاعتماد الخاصة بك مضمنة بالفعل. إذا لم يكن كذلك، فأضفها الآن:

  1. في مستكشف VS Code، افتح الملف ⁧⁩.env⁧⁩.
  2. حدث الحقول باستخدام قيم ⁧⁩username⁧⁩ و⁧⁩password⁧⁩ التي نسختها من سجل حاوية Azure.
  3. احفظ هذا الملف.

ملاحظة

يستخدم هذا البرنامج التعليمي بيانات اعتماد تسجيل دخول المسؤول لسجل Azure Container، والتي تعتبر ملائمة لسيناريوهات التطوير والاختبار. عندما تكون جاهزًا لسيناريوهات الإنتاج، نوصي بخيار مصادقة أقل امتيازًا مثل كيانات الخدمة. لمزيد من المعلومات، راجع إدارة الوصول إلى سجل الحاوية.

حدد تصميم الهدف

يمكن حاليًا لبرنامج Visual Studio Code تطوير وحدات C# الوطنية لأجهزة LINUX AMD64 وLinux ARM32v7. تحتاج إلى تحديد التصميم الذي تستهدفه مع كل حل، لأن الحاوية مبنية ويتم تشغيلها بشكل مختلف لكل نوع من أنواع التصاميم. الافتراضي هو Linux AMD64.

  1. افتح لوحة الأوامر وابحث عن Azure IoT Edge: تعيين المنصة الهدف الافتراضي؟ لحل Edge، أو حدد رمز الاختصار في الشريط الجانبي أسفل النافذة.

  2. في لوحة الأوامر، حدد بنية الهدف من قائمة الخيارات. في هذا البرنامج التعليمي، نستخدم جهاز Ubuntu الظاهري كجهاز IoT Edge، لذلك سنتخذ amd64 الافتراضي.

تحديث الوحدة النمطية باستخدام التعليمات البرمجية المخصصة

  1. في مستكشف VS Code، افتح ⁧⁩modules⁧⁩⁧>⁩⁧⁩CSharpModule⁧⁩⁧>⁩⁧⁩Program.cs⁧⁩.

  2. في الجزء العلوي من مساحة الاسم ⁧⁩CSharpModule⁧⁩، أضِف ثلاثة عبارات ⁧⁩using⁧⁩ للأنواع التي يتم استخدامها لاحقًا:

    using System.Collections.Generic;     // For KeyValuePair<>
    using Microsoft.Azure.Devices.Shared; // For TwinCollection
    using Newtonsoft.Json;                // For JsonConvert
    
  3. أضِف متغير ⁧⁩temperatureThreshold⁧⁩ إلى فئة ⁧⁩Program⁧⁩. يضبط هذا المتغير القيمة التي يجب أن تتجاوزها درجة الحرارة المقاسة للبيانات التي سيتم إرسالها إلى مركز IoT.

    static int temperatureThreshold { get; set; } = 25;
    
  4. أضف فئات ⁧⁩MessageBody⁧⁩ و⁧⁩Machine⁧⁩ و⁧⁩Ambient⁧⁩ إلى فئة ⁧⁩Program⁧⁩. تعمل هذه الفئات على تعريف المخطط المتوقع للنص الأساسي الرسائل الواردة.

    class MessageBody
    {
        public Machine machine {get;set;}
        public Ambient ambient {get; set;}
        public string timeCreated {get; set;}
    }
    class Machine
    {
        public double temperature {get; set;}
        public double pressure {get; set;}
    }
    class Ambient
    {
        public double temperature {get; set;}
        public int humidity {get; set;}
    }
    
  5. ابحث عن الدالة ⁧⁩Init⁧⁩. تعمل هذه الدالة على إنشاء كائن ⁧⁩ModuleClient⁧⁩ وتكوينه، ما يسمح للوحدة النمطية بالاتصال بوقت تشغيل Azure IoT Edge المحلي لإرسال الرسائل وتلقيها. بعد إنشاء ⁧⁩ModuleClient⁧⁩، تقرأ التعليمات البرمجية قيمة ⁧⁩temperatureThreshold⁧⁩ من الخصائص المطلوبة للوحدة النمطية. كما تسجل التعليمات البرمجية رد اتصال لتلقي الرسائل من مركز IoT Edge عبر نقطة نهاية تسمى ⁧⁩input1⁧⁩.

    استبدال الطريقة ⁧⁩SetInputMessageHandlerAsync⁧⁩ بأخرى جديدة تعمل على تحديث اسم نقطة النهاية والطريقة التي يتم استدعاؤها عند وصول الإدخال. بالإضافة إلى ذلك، أضِف الطريقة ⁧⁩SetDesiredPropertyUpdateCallbackAsync⁧⁩ للحصول على تحديثات للخصائص المطلوبة. لإجراء هذا التغيير، استبدل السطر الأخير من الطريقة ⁧⁩Init⁧⁩ بالتعليمات البرمجية التالية:

    // Register a callback for messages that are received by the module.
    // await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", PipeMessage, iotHubModuleClient);
    
    // Read the TemperatureThreshold value from the module twin's desired properties
    var moduleTwin = await ioTHubModuleClient.GetTwinAsync();
    await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, ioTHubModuleClient);
    
    // Attach a callback for updates to the module twin's desired properties.
    await ioTHubModuleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null);
    
    // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method.
    await ioTHubModuleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, ioTHubModuleClient);
    
  6. أضِف الطريقة ⁧⁩onDesiredPropertiesUpdate⁧⁩ إلى فئة ⁧⁩Program⁧⁩. تتلقى هذه الطريقة تحديثات على الخصائص المطلوبة من الوحدة النمطية المزدوجة، وتُحدّث متغير ⁧⁩temperatureThreshold⁧⁩ لمطابقته. تحتوي جميع الوحدات النمطية على وحدة مزدوجة خاصة بها، ما يتيح لك تكوين التعليمات البرمجية التي تعمل داخل وحدة نمطية مباشرةً من السحابة.

    static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext)
    {
        try
        {
            Console.WriteLine("Desired property change:");
            Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
    
            if (desiredProperties["TemperatureThreshold"]!=null)
                temperatureThreshold = desiredProperties["TemperatureThreshold"];
    
        }
        catch (AggregateException ex)
        {
            foreach (Exception exception in ex.InnerExceptions)
            {
                Console.WriteLine();
                Console.WriteLine("Error when receiving desired property: {0}", exception);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error when receiving desired property: {0}", ex.Message);
        }
        return Task.CompletedTask;
    }
    
  7. استبدل الطريقة ⁧⁩PipeMessage⁧⁩ بالطريقة ⁧⁩FilterMessages⁧⁩. يتم استدعاء هذه الطريقة عندما تتلقى الوحدة النمطية رسالة من مركز IoT Edge. فهو يعمل على تصفية الرسائل التي تبلغ عن درجات حرارة أقل من الحد الأدنى لدرجة الحرارة التي تم ضبطها عبر الوحدة المزدوجة. تضيف الطريقة أيضًا خاصية ⁧⁩MessageType⁧⁩ إلى الرسالة مع ضبط القيمة على ⁧⁩Alert⁧⁩.

    static async Task<MessageResponse> FilterMessages(Message message, object userContext)
    {
        var counterValue = Interlocked.Increment(ref counter);
        try
        {
            ModuleClient moduleClient = (ModuleClient)userContext;
            var messageBytes = message.GetBytes();
            var messageString = Encoding.UTF8.GetString(messageBytes);
            Console.WriteLine($"Received message {counterValue}: [{messageString}]");
    
            // Get the message body.
            var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString);
    
            if (messageBody != null && messageBody.machine.temperature > temperatureThreshold)
            {
                Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " +
                    $"exceeds threshold {temperatureThreshold}");
                using (var filteredMessage = new Message(messageBytes))
                {
                    foreach (KeyValuePair<string, string> prop in message.Properties)
                    {
                        filteredMessage.Properties.Add(prop.Key, prop.Value);
                    }
    
                    filteredMessage.Properties.Add("MessageType", "Alert");
                    await moduleClient.SendEventAsync("output1", filteredMessage);
                }
            }
    
            // Indicate that the message treatment is completed.
            return MessageResponse.Completed;
        }
        catch (AggregateException ex)
        {
            foreach (Exception exception in ex.InnerExceptions)
            {
                Console.WriteLine();
                Console.WriteLine("Error in sample: {0}", exception);
            }
            // Indicate that the message treatment is not completed.
            var moduleClient = (ModuleClient)userContext;
            return MessageResponse.Abandoned;
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error in sample: {0}", ex.Message);
            // Indicate that the message treatment is not completed.
            ModuleClient moduleClient = (ModuleClient)userContext;
            return MessageResponse.Abandoned;
        }
    }
    
  8. حفظ ملف ⁧⁩«Program.cs»⁧⁩

  9. في مستكشف VS Code، افتح ملف⁧⁩deployment.template.json⁧⁩ في مساحة عمل حل IoT Edge.

  10. نظرًا إلى أننا أجرينا تغييرًا لاسم نقطة النهاية التي تراعيها الوحدة النمطية، نحتاج أيضًا إلى تحديث المسارات في بيان النشر حتى يرسل edgeHub الرسائل إلى نقطة النهاية الجديدة.

    ابحث عن قسم ⁧⁩routes⁧⁩ في الوحدة النمطية المزدوجة ⁧⁩$edgeHub⁧⁩. يمكنك تحديث المسار ⁧⁩sensorToCSharpModule⁧⁩ لاستبدال ⁧input1⁩ بـ ⁧inputFromSensor⁩:

    "sensorToCSharpModule": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/CSharpModule/inputs/inputFromSensor\")"
    
  11. أضِف الوحدة النمطية المزدوجة ⁧⁩CSharpModule⁧⁩ إلى بيان النشر. أدرِج محتوى JSON التالي في الجزء السفلي من القسم ⁧⁩modulesContent⁧⁩، بعد الوحدة النمطية المزدوجة ⁧⁩$edgeHub⁧⁩:

       "CSharpModule": {
           "properties.desired":{
               "TemperatureThreshold":25
           }
       }
    

    Add module twin to deployment template

  12. احفظ ملف publish.template.json.

أنشئ الوحدة النمطية وانقلها

لقد أنشأت في القسم السابق حل IoT Edge ثم أضفت التعليمات البرمجية إلى CSharpModule. تعمل التعليمات البرمجية الجديدة على تصفية الرسائل حيث تكون درجة حرارة الجهاز المبلغ عنها ضمن الحدود المقبولة. الآن تحتاج إلى إنشاء الحل كصورة حاوية ونقلها إلى سجل الحاوية.

  1. افتح المحطة الطرفية المدمجة لـ VS Code بتحديد View>Terminal.

  2. قم بتسجيل الدخول إلى Docker بإدخال الأمر التالي في المحطة الطرفية. قم بتسجيل الدخول باستخدام اسم المستخدم وكلمة المرور وخادم تسجيل الدخول من سجل الحاويات Azure. يمكنك استرداد هذه القيم من قسم Access keys في السجل الخاص بك في منصة Azure.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    قد تتلقى تحذيرًا أمنيًا يوصي باستخدام --password-stdin. على الرغم من أن أفضل الممارسات موصى بها لسيناريوهات الإنتاج، إلا أنها خارج نطاق هذا البرنامج التعليمي. لمزيد من المعلومات، راجع مرجع تسجيل دخول docker.

  3. في مستكشف VS Code، انقر بزر الماوس الأيمن فوق ملف publish.template.json وحدد Build and Push IoT Edge Solution.

    يبدأ أمر الإنشاء والدفع ثلاث عمليات. أولاً، ينشئ مجلدًا جديدًا في الحل يسمى ⁧⁩config⁧⁩ والذي يحتوي على بيان النشر الكامل، والذي تم إنشاؤه بناءً على المعلومات الموجودة في قالب النشر وملفات الحل الأخرى. ثانياً، يقوم بتشغيل docker build لإنشاء صورة الحاوية بناءً على ملف dockerfile المناسب للبنية المستهدفة. بعد ذلك، يقوم بتشغيل docker push لدفع مستودع الصور إلى سجل الحاوية الخاص بك.

    قد تستغرق هذه العملية عدة دقائق في المرة الأولى، ولكنها تكون أسرع في المرة التالية التي تعمل فيها على تشغيل الأوامر.

نشر الحل وتشغيله

استخدم مستكشف Visual Studio Code وملحق أدوات Azure IoT لنشر مشروع الوحدة النمطية على جهاز IoT Edge. لديك بالفعل بيان نشر مُجهز للسيناريو الخاص بك، الملف deployment.amd64.json في مجلد التكوين. كل ما عليك القيام به الآن هو تحديد جهاز لتلقي النشر.

تأكد من أن جهاز IoT Edge الخاص بك يعمل.

  1. في مستكشف Visual Studio Code ضمن قسم Azure IoT Hub، قم بتوسيع الأجهزة لمشاهدة قائمة أجهزة إنترنت الأشياء الخاصة بك.

  2. انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge الخاص بك، ثم حدد Create Deployment for Single Device.

  3. افتح الملف deployment.amd64.json في المجلد config ثم انقر فوق Select Edge Deployment Manifest. لا تستخدم الملف deployment.template.js.

  4. تحت جهازك، قم بتوسيع الوحدات النمطية لمشاهدة قائمة بالوحدات التي تم نشرها وتشغيلها. انقر فوق زر التحديث. من المفترض أن يظهر لك ⁧⁩CSharpModule⁧⁩ الجديدة تعمل بالتعاون مع الوحدة النمطية ⁧⁩SimulatedTemperatureSensor⁧⁩ و⁧⁩$ edgeAgent⁧⁩ و⁧⁩$edgeHub⁧⁩.

    قد يستغرق الأمر بضع دقائق لبدء تشغيل الوحدات النمطية. يحتاج وقت تشغيل IoT Edge إلى استلام بيان النشر الجديد الخاص به، وسحب صور الوحدة النمطية من وقت تشغيل الحاوية، ثم بدء تشغيل كل وحدة نمطية جديدة.

عرض البيانات التي تم إنشاؤها

بعد تطبيق بيان النشر على جهاز IoT Edge، يعمل وقت تشغيل IoT Edge على الجهاز على تجميع معلومات النشر الجديدة وبدء التنفيذ عليها. يتم إيقاف أي وحدات نمطية تعمل على الجهاز غير مضمنة في بيان النشر. يتم بدء تشغيل أي وحدات مفقودة من الجهاز.

  1. في مستكشف Visual Studio Code، انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge وحدد Start Monitoring Built-in Event Endpoint.

  2. عرض الرسائل التي تصل إلى مركز IoT. قد يستغرق وصول الرسائل بعض الوقت، لأن جهاز IoT Edge يجب أن يتلقى عملية النشر الجديد وبدء تشغيل جميع الوحدات النمطية. وبعد ذلك، تنتظر التغييرات التي أجريناها على رمز CModule حتى تصل درجة حرارة الجهاز إلى 25 درجة قبل إرسال الرسائل. كما أنها تضيف نوع الرسالة ⁧⁩Alert⁧⁩ إلى أي رسائل تصل إلى الحد الأدنى لدرجة الحرارة.

    View messages arriving at IoT Hub

تحرير الوحدة النمطية المزدوجة

استخدمنا وحدة Sharp Module النمطية المزدوجة في بيان النشر لضبط الحد الأدنى لدرجة الحرارة عند 25 درجة. يمكنك استخدام الوحدة النمطية المزدوجة لتغيير الوظيفة دون الحاجة إلى تحديث التعليمات البرمجية للوحدة النمطية.

  1. في Visual Studio Code، وسّع التفاصيل الموجودة ضمن جهاز IoT Edge لرؤية الوحدات النمطية قيد التشغيل.

  2. انقر بزر الماوس الأيمن فوق ⁧⁩CSharpModule⁧⁩، وحدد ⁧⁩Edit module twin⁧⁩.

  3. ابحث عن ⁧⁩TemperatureThreshold⁧⁩ في الخصائص المطلوبة. تغيير قيمته إلى درجة حرارة جديدة من 5 درجات إلى 10 درجات أعلى من آخر درجة حرارة مبلغ عنها.

  4. احفظ ملف الوحدة النمطية المزدوجة.

  5. انقر بزر الماوس الأيمن في أي مكان في جزء تحرير الوحدة النمطية المزدوجة وحدد تحديث الوحدة النمطية المزدوجة.

  6. وراقب الرسائل الواردة من الجهاز إلى السحابة. يجب أن تشاهد الرسائل تتوقف حتى يتم الوصول إلى حد درجة الحرارة الجديد.

تنظيف الموارد

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

غير ذلك يمكنك حذف التكوينات المحلية وموارد Azure التي استخدمتها في هذه المقالة لتجنب التكاليف.

حذف موارد Azure

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

لحذف الموارد:

  1. سجّل الدخول إلى مدخل Microsoft Azure، ثم حدد Resource groups.

  2. حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.

  3. راجع قائمة الموارد الموجودة في مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، فيمكنك النقر فوق كل مورد لحذفها بشكل فردي.

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

لقد أنشأت في هذا البرنامج التعليمي وحدة IoT Edge النمطية التي تحتوي على تعليمات برمجية لتصفية البيانات الأولية التي أنشأها جهاز IoT Edge.

يمكنك متابعة الدروس التالية لمعرفة كيف يمكن أن تساعدك Azure IoT Edge في نشر خدمات سحابة Azure لمعالجة البيانات وتحليلها على الحافة.