Поделиться через


Руководство. Подключение ioT самонастраивающийся нескольких приложений устройств компонентов, работающих в Linux или Windows, к Центр Интернета вещей

В этом руководстве показано, как создать пример приложения устройства IoT Plug and Play с компонентами, подключить его к центру Интернета вещей и с помощью обозревателя Интернета вещей Azure просмотреть сведения, отправляемые в центр. Пример приложения написан на языке C и включен в пакет SDK для устройств Azure IoT для C. Разработчик решения может использовать обозреватель Интернета вещей Azure, чтобы ознакомиться с возможностями устройства IoT Plug and Play, не просматривая код устройства.

Просмотреть код

Изучив это руководство, вы:

  • (скачайте его здесь).
  • Выполните сборку примера кода.
  • Запустите пример приложения устройства и проверьте, подключается ли оно к вашему центру Интернета вещей.
  • Просмотрите исходный код.

Необходимые компоненты

Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.

Операции, описанные в этом учебнике, можно выполнить в Linux или Windows. Команды оболочки в этом учебнике соответствуют требованиям соглашения Linux для разделителей пути "/". Если вы используете Windows, не забудьте изменить эти разделители на "\".

Необходимые условия зависят от операционной системы:

Linux

В этом учебнике предполагается, что вы используете Ubuntu Linux. Действия, описанные в этом руководстве, были протестированы в Ubuntu 18.04.

Для выполнения инструкций, указанных в этом учебнике, в ОС Linux необходимо установить указанное ниже программное обеспечение в локальной среде.

Установите GCC, Git, cmake и все необходимые зависимости с помощью команды apt-get:

sudo apt-get update
sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev

Убедитесь, что версия cmake выше 2.8.12, а версия GCC выше 4.4.7.

cmake --version
gcc --version

Windows

Для выполнения инструкций из этого учебника в ОС Windows установите в локальной среде Windows такое программное обеспечение:

Загрузка кода

Если вы уже выполнили действия, описанные в учебнике "Подключение примера приложения устройства IoT Plug and Play в Linux или Windows к Центру Интернета вещей (C)", то вы уже скачали код.

С помощью этого учебника вы подготовите среду разработки, которую можно использовать для клонирования и сборки пакета SDK для устройств Центра Интернета вещей Azure для C.

Откройте командную строку в выбранной папке. Выполните следующую команду для клонирования репозитория GitHub пакетов SDK и библиотек Интернета вещей Azure для С в это расположение:

git clone https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init

Выполнение этой операции может занять несколько минут.

Сборка и выполнение кода

Вы можете создать и запустить код с помощью Visual Studio или cmake в командной строке.

Использование Visual Studio

  1. Откройте корневую папку клонированного репозитория. Через пару секунд поддержка CMake в Visual Studio создаст все, что необходимо для выполнения и отладки проекта.

  2. Когда среда Visual Studio в Обозревателе решений готова, перейдите к примеру iothub_client/samples/pnp/pnp_temperature_controller/.

  3. Щелкните правой кнопкой мыши файл pnp_temperature_controller.c и выберите Add Debug Configuration (Добавить конфигурацию отладки). Выберите По умолчанию.

  4. Visual Studio откроет файл launch.vs.json. Измените этот файл, как показано в следующем фрагменте кода, чтобы задать необходимые переменные среды. Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы записали идентификатор области и первичный ключ регистрации:

    {
      "version": "0.2.1",
      "defaults": {},
      "configurations": [
        {
          "type": "default",
          "project": "iothub_client\\samples\\pnp\\pnp_temperature_controller\\pnp_temperature_controller.c",
          "projectTarget": "",
          "name": "pnp_temperature_controller.c",
          "env": {
            "IOTHUB_DEVICE_SECURITY_TYPE": "DPS",
            "IOTHUB_DEVICE_DPS_ID_SCOPE": "<Your ID scope>",
            "IOTHUB_DEVICE_DPS_DEVICE_ID": "my-pnp-device",
            "IOTHUB_DEVICE_DPS_DEVICE_KEY": "<Your enrollment primary key>"
          }
        }
      ]
    }
    
  5. Щелкните правой кнопкой мыши файл pnp_temperature_controller.c и выберите Задать как элемент запуска.

  6. Для трассировки выполнения кода в Visual Studio добавьте точку останова в функцию main в файле pnp_temperature_controller.c.

  7. Теперь можно запустить и отладить пример в меню Отладка.

Теперь устройство готово к получению команд и обновлений свойств и начало отправлять данные телеметрии в концентратор. Продолжите работу примера, после того как выполните следующие действия.

Использование cmake в командной строке

Сборка примера

  1. Создайте подкаталог CMake в корневой папке пакета SDK для клонированного устройства и перейдите к этой папке:

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  2. Выполните следующие команды, чтобы создать и собрать файлы проекта для пакетов SDK и примеров:

    cmake ..
    cmake --build .
    

Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы создали пять переменных среды, чтобы настроить пример для подключения к центру Интернета вещей с помощью Подготовки устройств к добавлению в Центр Интернета вещей (DPS):

  • IOTHUB_DEVICE_SECURITY_TYPE со значением DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE с областью идентификатора DPS;
  • IOTHUB_DEVICE_DPS_DEVICE_ID со значением my-pnp-device;
  • IOTHUB_DEVICE_DPS_DEVICE_KEY с первичным ключом регистрации;
  • IOTHUB_DEVICE_DPS_ENDPOINT со значением global.azure-devices-provisioning.net.

Дополнительные сведения о примере конфигурации см. в образце файла сведений.

Запуск примера:

  1. Из папки cmake перейдите к папке, содержащей исполняемый файл, и запустите его:

    # Bash
    cd iothub_client/samples/pnp/pnp_temperature_controller
    ./pnp_temperature_controller
    
    REM Windows
    cd iothub_client\samples\pnp\pnp_temperature_controller\Debug
    pnp_temperature_controller.exe
    

Теперь устройство готово к получению команд и обновлений свойств и начало отправлять данные телеметрии в концентратор. Продолжите работу примера, после того как выполните следующие действия.

Проверка кода с помощью обозревателя Azure IoT

После запуска примера клиента устройства используйте обозреватель Интернета вещей Azure, чтобы убедиться, что он работает.

  1. Откройте обозреватель Azure IoT.

  2. Если вы еще не установили подключение к центру Интернета вещей, на странице Центров Интернета вещей выберите + Add connection (+ Добавить подключение). Введите строку подключения для центра Интернета вещей, созданного ранее, и нажмите кнопку Save (Сохранить).

  3. На странице "Параметры" самонастраивающийся Интернета вещей выберите +Добавить > локальную папку и выберите папку локальных моделей, в которой сохранены файлы модели.

  4. На странице Центров Интернета вещей щелкните имя центра, с которым вы хотите работать. Откроется список устройств, зарегистрированных в Центре Интернета вещей

  5. Щелкните идентификатор ранее созданного устройства.

  6. В меню слева отображаются различные типы сведений, доступных для устройства.

  7. Выберите IoT Plug and Play components (Компоненты Plug and Play IoT), чтобы просмотреть сведения о модели для устройства.

  8. Вы можете просматривать различные компоненты устройства. Компонент по умолчанию и все дополнительные компоненты. Выберите компонент для работы.

  9. Выберите страницу Telemetry (Телеметрия) и щелкните Start (Запустить), чтобы просмотреть данные телеметрии, которые отправляет устройство для компонента.

  10. Выберите страницу Properties (read-only) (Свойства (только для чтения)), чтобы просмотреть свойства только для чтения, сообщаемые для этого компонента.

  11. Выберите страницу Properties(writable) (Свойства (доступные для записи)), чтобы просмотреть доступные для записи свойства, которые можно обновить для этого компонента.

  12. Выберите свойство по имени, введите новое значение и щелкните Update desired value (Обновить нужное значение).

  13. Чтобы увидеть новое значение, нажмите кнопку Refresh (Обновить).

  14. Выберите страницу команд, чтобы просмотреть все команды для этого компонента.

  15. Выберите команду, которую нужно проверить, и при необходимости задайте параметр. Выберите Send command (Отправить команду), чтобы вызвать команду на устройстве. Ответ устройства на команду можно увидеть в окне командной строки, где выполняется пример кода.

Просмотр кода

В этом примере реализуется устройство контроллера температуры IoT Plug and Play. В этом примере реализуется модель с несколькими компонентами. Файл модели языка определения Цифровых двойников (DTDL) для устройства температуры определяет данные телеметрии, свойства и команды, которые реализует устройство.

Функции вспомогательного приложения IoT Plug and Play

В этом примере код использует некоторые функции вспомогательного приложения из папки /common:

pnp_device_client_ll содержит метод connect для IoT Plug and Play с model-id, включенным в качестве параметра: PnP_CreateDeviceClientLLHandle.

pnp_protocol содержит функции вспомогательного приложения IoT Plug and Play:

  • PnP_CreateReportedProperty
  • PnP_CreateReportedPropertyWithStatus
  • PnP_ParseCommandName
  • PnP_CreateTelemetryMessageHandle
  • PnP_ProcessTwinData
  • PnP_CopyPayloadToString
  • PnP_CreateDeviceClientLLHandle_ViaDps

Эти функции вспомогательного приложения достаточно универсальны для использования в собственном проекте. В этом примере они используются в трех файлах, соответствующих каждому компоненту в модели:

  • pnp_deviceinfo_component
  • pnp_temperature_controller
  • pnp_thermostat_component

Например, в файле pnp_deviceinfo_component функция SendReportedPropertyForDeviceInformation использует две функции вспомогательного приложения:

if ((jsonToSend = PnP_CreateReportedProperty(componentName, propertyName, propertyValue)) == NULL)
{
    LogError("Unable to build reported property response for propertyName=%s, propertyValue=%s", propertyName, propertyValue);
}
else
{
    const char* jsonToSendStr = STRING_c_str(jsonToSend);
    size_t jsonToSendStrLen = strlen(jsonToSendStr);

    if ((iothubClientResult = IoTHubDeviceClient_LL_SendReportedState(deviceClientLL, (const unsigned char*)jsonToSendStr, jsonToSendStrLen, NULL, NULL)) != IOTHUB_CLIENT_OK)
    {
        LogError("Unable to send reported state for property=%s, error=%d", propertyName, iothubClientResult);
    }
    else
    {
        LogInfo("Sending device information property to IoTHub.  propertyName=%s, propertyValue=%s", propertyName, propertyValue);
    }
}

Каждый компонент в примере соответствует этому шаблону.

поток кода.

Функция main инициализирует соединение и отправляет идентификатор модели:

deviceClient = CreateDeviceClientAndAllocateComponents();

Код использует PnP_CreateDeviceClientLLHandle для подключения к центру Интернета вещей, установки modelId в качестве параметра и настройки метода устройства и обработчиков обратного вызова двойника устройства для прямых методов и обновлений двойника устройства:

g_pnpDeviceConfiguration.deviceMethodCallback = PnP_TempControlComponent_DeviceMethodCallback;
g_pnpDeviceConfiguration.deviceTwinCallback = PnP_TempControlComponent_DeviceTwinCallback;
g_pnpDeviceConfiguration.modelId = g_temperatureControllerModelId;
...

deviceClient = PnP_CreateDeviceClientLLHandle(&g_pnpDeviceConfiguration);

&g_pnpDeviceConfiguration также содержит сведения о соединении. IOTHUB_DEVICE_SECURITY_TYPE переменной среды определяет, использует ли образец строку подключения или службу подготовки устройств для подключения к центру Интернета вещей.

Если устройство отправляет идентификатор модели, оно становится устройством IoT Plug and Play.

При наличии обработчиков обратного вызова устройство реагирует на обновления двойника и прямые вызовы метода:

  • Для обратного вызова двойника устройства PnP_TempControlComponent_DeviceTwinCallback вызывает функцию PnP_ProcessTwinData для обработки данных. PnP_ProcessTwinData использует шаблон посетителя для анализа JSON и последующего посещения каждого свойства, вызывая PnP_TempControlComponent_ApplicationPropertyCallback для каждого элемента.

  • Для обратного вызова команд функция PnP_TempControlComponent_DeviceMethodCallback использует вспомогательную функцию для анализа команды и имен компонента:

    PnP_ParseCommandName(methodName, &componentName, &componentNameSize, &pnpCommandName);
    

    Затем функция PnP_TempControlComponent_DeviceMethodCallback вызывает команду для компонента:

    LogInfo("Received PnP command for component=%.*s, command=%s", (int)componentNameSize, componentName, pnpCommandName);
    if (strncmp((const char*)componentName, g_thermostatComponent1Name, g_thermostatComponent1Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle1, pnpCommandName, rootValue, response, responseSize);
    }
    else if (strncmp((const char*)componentName, g_thermostatComponent2Name, g_thermostatComponent2Size) == 0)
    {
        result = PnP_ThermostatComponent_ProcessCommand(g_thermostatHandle2, pnpCommandName, rootValue, response, responseSize);
    }
    else
    {
        LogError("PnP component=%.*s is not supported by TemperatureController", (int)componentNameSize, componentName);
        result = PNP_STATUS_NOT_FOUND;
    }
    

Функция main инициализирует свойства только для чтения, отправляемые в центр Интернета вещей:

PnP_TempControlComponent_ReportSerialNumber_Property(deviceClient);
PnP_DeviceInfoComponent_Report_All_Properties(g_deviceInfoComponentName, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle1, deviceClient);
PnP_TempControlComponent_Report_MaxTempSinceLastReboot_Property(g_thermostatHandle2, deviceClient);

Функция main входит в цикл для обновления данных событий и телеметрии каждого компонента:

while (true)
{
    PnP_TempControlComponent_SendWorkingSet(deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle1, deviceClient);
    PnP_ThermostatComponent_SendTelemetry(g_thermostatHandle2, deviceClient);
}

Функция PnP_ThermostatComponent_SendTelemetry показывает, как использовать структуру PNP_THERMOSTAT_COMPONENT. В примере эта структура используется для хранения сведений о двух терморегуляторах в контроллере температуры. Код использует функцию PnP_CreateTelemetryMessageHandle для подготовки и отправки сообщения:

messageHandle = PnP_CreateTelemetryMessageHandle(pnpThermostatComponent->componentName, temperatureStringBuffer);
...
iothubResult = IoTHubDeviceClient_LL_SendEventAsync(deviceClientLL, messageHandle, NULL, NULL);

Затем функция main уничтожает различные компоненты и прерывает подключение к концентратору.

В этом руководстве показано, как создать пример приложения устройства IoT Plug and Play с компонентами, подключить его к центру Интернета вещей и с помощью обозревателя Интернета вещей Azure просмотреть сведения, отправляемые в центр. Пример приложения написан на языке C# и включен в пакет SDK для устройств центра Интернета вещей Azure для C#. Разработчик решения может использовать обозреватель Интернета вещей Azure, чтобы ознакомиться с возможностями устройства IoT Plug and Play, не просматривая код устройства.

Просмотреть код

Изучив это руководство, вы:

  • (скачайте его здесь).
  • Выполните сборку примера кода.
  • Запустите пример приложения устройства и проверьте, подключается ли оно к вашему центру Интернета вещей.
  • Просмотрите исходный код.

Необходимые компоненты

Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.

Операции, описанные в этом учебнике, можно выполнить в Linux или Windows. Команды оболочки в этом учебнике соответствуют требованиям соглашения Linux для разделителей пути "/". Если вы используете Windows, не забудьте изменить эти разделители на "\".

  • Последний пакет SDK для .NET для вашей платформы.
  • Git.

Клонирование репозитория пакета SDK с помощью примера кода

Если вы ознакомились с руководством по подключению примера приложения устройства IoT Plug and Play в Windows к Центру Интернета вещей (C#), значит, вы уже клонировали репозиторий.

Клонируйте примеры из репозитория GitHub с примерами для Интернета вещей Azure на C#. Откройте командную строку в выбранной папке. Выполните следующую команду, чтобы клонировать пакет SDK Для Интернета вещей Microsoft Azure для репозитория .NET GitHub:

git clone https://github.com/Azure/azure-iot-sdk-csharp.git

Сборка кода

Теперь вы можете создать пример и запустить его. Выполните следующие команды, чтобы создать пример:

cd azure-iot-sdk-csharp/iothub/device/samples/solutions/PnpDeviceSamples/TemperatureController
dotnet build

Запуск примера устройства

Чтобы запустить пример, выполните следующую команду:

dotnet run

Теперь устройство готово к получению команд и обновлений свойств и начало отправлять данные телеметрии в концентратор. Продолжите работу примера, после того как выполните следующие действия.

Проверка кода с помощью обозревателя Интернета вещей Azure

После запуска примера клиента устройства используйте обозреватель Интернета вещей Azure, чтобы убедиться, что он работает.

  1. Откройте обозреватель Azure IoT.

  2. Если вы еще не установили подключение к центру Интернета вещей, на странице Центров Интернета вещей выберите + Add connection (+ Добавить подключение). Введите строку подключения для центра Интернета вещей, созданного ранее, и нажмите кнопку Save (Сохранить).

  3. На странице "Параметры" самонастраивающийся Интернета вещей выберите +Добавить > локальную папку и выберите папку локальных моделей, в которой сохранены файлы модели.

  4. На странице Центров Интернета вещей щелкните имя центра, с которым вы хотите работать. Откроется список устройств, зарегистрированных в Центре Интернета вещей

  5. Щелкните идентификатор ранее созданного устройства.

  6. В меню слева отображаются различные типы сведений, доступных для устройства.

  7. Выберите IoT Plug and Play components (Компоненты Plug and Play IoT), чтобы просмотреть сведения о модели для устройства.

  8. Вы можете просматривать различные компоненты устройства. Компонент по умолчанию и все дополнительные компоненты. Выберите компонент для работы.

  9. Выберите страницу Telemetry (Телеметрия) и щелкните Start (Запустить), чтобы просмотреть данные телеметрии, которые отправляет устройство для компонента.

  10. Выберите страницу Properties (read-only) (Свойства (только для чтения)), чтобы просмотреть свойства только для чтения, сообщаемые для этого компонента.

  11. Выберите страницу Properties(writable) (Свойства (доступные для записи)), чтобы просмотреть доступные для записи свойства, которые можно обновить для этого компонента.

  12. Выберите свойство по имени, введите новое значение и щелкните Update desired value (Обновить нужное значение).

  13. Чтобы увидеть новое значение, нажмите кнопку Refresh (Обновить).

  14. Выберите страницу команд, чтобы просмотреть все команды для этого компонента.

  15. Выберите команду, которую нужно проверить, и при необходимости задайте параметр. Выберите Send command (Отправить команду), чтобы вызвать команду на устройстве. Ответ устройства на команду можно увидеть в окне командной строки, где выполняется пример кода.

Просмотр кода

В этом примере реализуется устройство контроллера температуры IoT Plug and Play. Модель, которую реализует этот пример, использует несколько компонентов. Файл модели языка определения Цифровых двойников (DTDL) для устройства температуры определяет данные телеметрии, свойства и команды, которые реализует устройство.

Код устройства подключается к центру Интернета вещей с помощью стандартного метода CreateFromConnectionString. Устройство отправляет идентификатор модели DTDL, которую он реализует в запросе на подключение. Устройство, отправляющее идентификатор модели, — это устройство IoT Plug and Play:

private static DeviceClient InitializeDeviceClient(string hostname, IAuthenticationMethod authenticationMethod)
{
    var options = new ClientOptions
    {
        ModelId = ModelId,
    };

    var deviceClient = DeviceClient.Create(hostname, authenticationMethod, TransportType.Mqtt, options);
    deviceClient.SetConnectionStatusChangesHandler((status, reason) =>
    {
        s_logger.LogDebug($"Connection status change registered - status={status}, reason={reason}.");
    });

    return deviceClient;
}

Идентификатор модели хранится в коде, как показано в следующем фрагменте кода:

private const string ModelId = "dtmi:com:example:TemperatureController;1";

После подключения устройства к центру Интернета вещей код начнет регистрировать обработчики команд. Команда reboot определяется в компоненте по умолчанию. Команда getMaxMinReport указана в каждом из двух компонентов термостата:

await _deviceClient.SetMethodHandlerAsync("reboot", HandleRebootCommandAsync, _deviceClient, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat1*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat1, cancellationToken);
await _deviceClient.SetMethodHandlerAsync("thermostat2*getMaxMinReport", HandleMaxMinReportCommandAsync, Thermostat2, cancellationToken);

На двух компонентах термостата имеются отдельные обработчики для обновления требуемых свойств:

_desiredPropertyUpdateCallbacks.Add(Thermostat1, TargetTemperatureUpdateCallbackAsync);
_desiredPropertyUpdateCallbacks.Add(Thermostat2, TargetTemperatureUpdateCallbackAsync);

Пример кода отправляет данные телеметрии из каждого компонента термостата:

await SendTemperatureAsync(Thermostat1, cancellationToken);
await SendTemperatureAsync(Thermostat2, cancellationToken);

Метод SendTemperatureTelemetryAsync использует класс PnpHhelper для создания сообщений для каждого компонента:

using Message msg = PnpHelper.CreateIothubMessageUtf8(telemetryName, JsonConvert.SerializeObject(currentTemperature), componentName);

Класс PnpHelper содержит другие примеры методов, которые можно использовать с многокомпонентной моделью.

Используйте средство обозревателя Интернета вещей Azure, чтобы просматривать данные телеметрии и свойства двух компонентов термостата:

Многокомпонентное устройство в обозревателе Интернета вещей Azure

Кроме того, средство обозревателя Интернета вещей Azure можно использовать для вызова команд в одном из двух компонентов термостата или в компоненте по умолчанию.

В этом руководстве показано, как создать пример приложения устройства IoT Plug and Play с компонентами, подключить его к центру Интернета вещей и с помощью обозревателя Интернета вещей Azure просмотреть сведения, отправляемые в центр. Пример приложения написан на языке Java и включен в пакет SDK для устройств центра Интернета вещей Azure для Java. Разработчик решения может использовать обозреватель Интернета вещей Azure, чтобы ознакомиться с возможностями устройства IoT Plug and Play, не просматривая код устройства.

Просмотреть код

Изучив это руководство, вы:

  • (скачайте его здесь).
  • Выполните сборку примера кода.
  • Запустите пример приложения устройства и проверьте, подключается ли оно к вашему центру Интернета вещей.
  • Просмотрите исходный код.

Необходимые компоненты

Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.

Операции, описанные в этом учебнике, можно выполнить в Linux или Windows. Команды оболочки в этом учебнике соответствуют требованиям соглашения Linux для разделителей пути "/". Если вы используете Windows, не забудьте изменить эти разделители на "\".

Чтобы завершить работу с этим руководством, установите следующее программное обеспечение в локальной среде разработки:

Загрузка кода

Если вы завершили руководство. Подключение примера приложения устройства IoT самонастраивающийся к Центр Интернета вещей (Java), вы уже клонировали репозиторий.

Откройте командную строку в выбранном каталоге. Выполните следующую команду для клонирования репозитория GitHub пакетов SDK и библиотек Интернета вещей Azure для Java в это расположение:

git clone https://github.com/Azure/azure-iot-sdk-java.git

Выполнение этой операции может занять несколько минут.

Сборка кода

Перейдите в корневую папку образца контроллера температуры в клонированного репозитория пакета SDK Java и создайте его:

cd azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample
mvn clean package

Запуск примера устройства

Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы создали пять переменных среды, чтобы настроить пример для подключения к центру Интернета вещей с помощью Подготовки устройств к добавлению в Центр Интернета вещей (DPS):

  • IOTHUB_DEVICE_SECURITY_TYPE со значением DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE с областью идентификатора DPS;
  • IOTHUB_DEVICE_DPS_DEVICE_ID со значением my-pnp-device;
  • IOTHUB_DEVICE_DPS_DEVICE_KEY с первичным ключом регистрации;
  • IOTHUB_DEVICE_DPS_ENDPOINT со значением global.azure-devices-provisioning.net.

Чтобы запустить пример приложения, перейдите в папку /device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample и выполните следующую команду:

mvn exec:java -Dexec.mainClass="samples.com.microsoft.azure.sdk.iot.device.TemperatureController"

Теперь устройство готово к получению команд и обновлений свойств и начало отправлять данные телеметрии в концентратор. Продолжите работу примера, после того как выполните следующие действия.

Проверка кода с помощью обозревателя Интернета вещей Azure

После запуска примера клиента устройства используйте обозреватель Интернета вещей Azure, чтобы убедиться, что он работает.

  1. Откройте обозреватель Azure IoT.

  2. Если вы еще не установили подключение к центру Интернета вещей, на странице Центров Интернета вещей выберите + Add connection (+ Добавить подключение). Введите строку подключения для центра Интернета вещей, созданного ранее, и нажмите кнопку Save (Сохранить).

  3. На странице "Параметры" самонастраивающийся Интернета вещей выберите +Добавить > локальную папку и выберите папку локальных моделей, в которой сохранены файлы модели.

  4. На странице Центров Интернета вещей щелкните имя центра, с которым вы хотите работать. Откроется список устройств, зарегистрированных в Центре Интернета вещей

  5. Щелкните идентификатор ранее созданного устройства.

  6. В меню слева отображаются различные типы сведений, доступных для устройства.

  7. Выберите IoT Plug and Play components (Компоненты Plug and Play IoT), чтобы просмотреть сведения о модели для устройства.

  8. Вы можете просматривать различные компоненты устройства. Компонент по умолчанию и все дополнительные компоненты. Выберите компонент для работы.

  9. Выберите страницу Telemetry (Телеметрия) и щелкните Start (Запустить), чтобы просмотреть данные телеметрии, которые отправляет устройство для компонента.

  10. Выберите страницу Properties (read-only) (Свойства (только для чтения)), чтобы просмотреть свойства только для чтения, сообщаемые для этого компонента.

  11. Выберите страницу Properties(writable) (Свойства (доступные для записи)), чтобы просмотреть доступные для записи свойства, которые можно обновить для этого компонента.

  12. Выберите свойство по имени, введите новое значение и щелкните Update desired value (Обновить нужное значение).

  13. Чтобы увидеть новое значение, нажмите кнопку Refresh (Обновить).

  14. Выберите страницу команд, чтобы просмотреть все команды для этого компонента.

  15. Выберите команду, которую нужно проверить, и при необходимости задайте параметр. Выберите Send command (Отправить команду), чтобы вызвать команду на устройстве. Ответ устройства на команду можно увидеть в окне командной строки, где выполняется пример кода.

Просмотр кода

В этом примере реализуется устройство контроллера температуры IoT Plug and Play. Модель, которую реализует этот пример, использует несколько компонентов. Файл модели языка определения Цифровых двойников (DTDL) для устройства температуры определяет данные телеметрии, свойства и команды, которые реализует устройство.

Код устройства использует стандартный класс DeviceClient для подключения к центру Интернета вещей. Устройство отправляет идентификатор модели DTDL, которую он реализует в запросе на подключение. Устройство, отправляющее идентификатор модели, — это устройство IoT Plug and Play:

private static void initializeDeviceClient() throws URISyntaxException, IOException {
    ClientOptions options = new ClientOptions();
    options.setModelId(MODEL_ID);
    deviceClient = new DeviceClient(deviceConnectionString, protocol, options);

    deviceClient.registerConnectionStatusChangeCallback((status, statusChangeReason, throwable, callbackContext) -> {
        log.debug("Connection status change registered: status={}, reason={}", status, statusChangeReason);

        if (throwable != null) {
            log.debug("The connection status change was caused by the following Throwable: {}", throwable.getMessage());
            throwable.printStackTrace();
        }
    }, deviceClient);

    deviceClient.open();
}

Идентификатор модели хранится в коде, как показано в следующем фрагменте кода:

private static final String MODEL_ID = "dtmi:com:example:Thermostat;1";

После подключения устройства к центру Интернета вещей код начнет регистрировать обработчики команд.

deviceClient.subscribeToDeviceMethod(new MethodCallback(), null, new MethodIotHubEventCallback(), null);

На двух компонентах термостата имеются отдельные обработчики для обновления требуемых свойств:

deviceClient.startDeviceTwin(new TwinIotHubEventCallback(), null, new GenericPropertyUpdateCallback(), null);
Map<Property, Pair<TwinPropertyCallBack, Object>> desiredPropertyUpdateCallback = Stream.of(
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_1, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_1)),
        new AbstractMap.SimpleEntry<Property, Pair<TwinPropertyCallBack, Object>>(
                new Property(THERMOSTAT_2, null),
                new Pair<>(new TargetTemperatureUpdateCallback(), THERMOSTAT_2))
).collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));

deviceClient.subscribeToTwinDesiredProperties(desiredPropertyUpdateCallback);

Пример кода отправляет данные телеметрии из каждого компонента термостата:

sendTemperatureReading(THERMOSTAT_1);
sendTemperatureReading(THERMOSTAT_2);

Метод sendTemperatureReading использует класс PnpHhelper для создания сообщений для каждого компонента:

Message message = PnpHelper.createIotHubMessageUtf8(telemetryName, currentTemperature, componentName);

Класс PnpHelper содержит другие примеры методов, которые можно использовать с многокомпонентной моделью.

Используйте средство обозревателя Интернета вещей Azure, чтобы просматривать данные телеметрии и свойства двух компонентов термостата:

Многокомпонентное устройство в обозревателе Интернета вещей Azure

Кроме того, средство обозревателя Интернета вещей Azure можно использовать для вызова команд в одном из двух компонентов термостата или в компоненте по умолчанию.

В этом руководстве показано, как создать пример приложения устройства IoT Plug and Play с компонентами, подключить его к центру Интернета вещей и с помощью обозревателя Интернета вещей Azure просмотреть сведения, отправляемые в центр. Пример приложения написан для Node.js и включен в пакет SDK для устройств Центра Интернета вещей Azure для Node.js. Разработчик решения может использовать обозреватель Интернета вещей Azure, чтобы ознакомиться с возможностями устройства IoT Plug and Play, не просматривая код устройства.

Просмотреть код

Изучив это руководство, вы:

  • (скачайте его здесь).
  • Запустите пример приложения устройства и проверьте, подключается ли оно к вашему центру Интернета вещей.
  • Просмотрите исходный код.

Необходимые компоненты

Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.

Для выполнения инструкций, приведенных в этом учебнике, на компьютере для разработки необходимо установить платформу Node.js. Вы можете скачать последнюю рекомендуемую версию для нескольких платформ на сайте nodejs.org.

Текущую версию Node.js на компьютере, на котором ведется разработка, можно проверить, используя следующую команду:

node --version

Загрузка кода

Если вы выполняли задания из руководства по подключению примера приложения устройства IoT Plug and Play в Windows к Центру Интернета вещей (Node), вы уже клонировали репозиторий.

Откройте командную строку в выбранном каталоге. Выполните следующую команду для клонирования репозитория пакетов SDK для Интернета вещей Microsoft Azure для Node.js с GitHub в это расположение:

git clone https://github.com/Azure/azure-iot-sdk-node

Установка обязательных библиотек

Используйте пакет SDK для устройств, чтобы выполнить сборку прилагаемого примера кода. Создаваемое приложение имитирует многокомпонентное устройство Plug and Play, которое подключается к центру Интернета вещей. Оно отправляет данные телеметрии и свойства, а также получает команды.

  1. В окне локального терминала перейдите в папку клонированного репозитория, а затем в папку /azure-iot-sdk-node/device/samples/javascript. Затем выполните следующую команду, чтобы установить обязательные библиотеки:
npm install

Эта команда устанавливает соответствующие файлы npm, необходимые для запуска примеров в папке.

Просмотр кода

Перейдите к папке azure-iot-sdk-node/device/samples/javascript .

Папка azure-iot-sdk-node/device/samples/javascript содержит пример кода для устройства контроллера температуры Интернета вещей самонастраивающийся.

Код в файле pnp_temperature_controller.js реализует устройство регулятора температуры IoT Plug and Play. Модель, которую реализует этот пример, использует несколько компонентов. Файл модели языка определения Цифровых двойников (DTDL) для устройства температуры определяет данные телеметрии, свойства и команды, которые реализует устройство.

Откройте файл pnp_temperature_controller.js в выбранном редакторе кода. В примере кода показано, как:

  • modelId Определите DTMI для реализуемого устройства. Этот DTMI определяется пользователем и должен соответствовать DTMI модели DTDL контроллера температуры.

  • Реализуйте компоненты, определенные в модели DTDL контроллера температуры. Компоненты в реальном контроллере температуры должны реализовывать эти два интерфейса. Эти два интерфейса уже опубликованы в центральном репозитории. В этом примере этими двумя интерфейсами являются:

    • Термостат
    • Сведения об устройстве, разработанном Azure.
  • Определить имена компонентов. В этом примере содержится два терморегулятора и один информационный компонент устройства.

  • Определите имена команд для команд, на которые отвечает устройство.

  • Определить serialNumber константы. serialNumber закрепляется за каждым заданным устройством.

  • Определить обработчики команд.

  • Определить функции, предназначенные для отправки ответов команд.

  • Определить вспомогательные функции, предназначенные для регистрации запросов команд.

  • Определить вспомогательную функцию для создания свойств.

  • Определить прослушиватель обновлений свойств.

  • Определить функцию для отправки данных телеметрии с этого устройства. Данные телеметрии отправляются с помощью терморегуляторов и компонента по умолчанию. Эта функция получает имя компонента в качестве параметра.

  • Определить функцию main, которая:

    • Использует пакет SDK для устройств для создания клиента устройства и подключения к центру Интернета вещей. Устройство предоставляет modelId, чтобы Центр Интернета вещей мог определить устройство IoT Plug and Play.

    • Начинает прослушивание запросов команд с помощью функции onDeviceMethod. Функция настраивает прослушиватель для запросов команд от службы.

      • DTDL устройства определяют команды reboot и getMaxMinReport.
      • Функция commandHandler определяет способ реагирования устройства на команду.
    • Начинает отправку данных телеметрии с помощью setInterval и sendTelemetry.

    • Использует функцию helperCreateReportedPropertiesPatch, чтобы создавать свойства, а updateComponentReportedProperties — чтобы их обновлять.

    • Использует desiredPropertyPatchListener для прослушивания обновлений свойств.

    • Отключает все прослушиватели и задачи и выходит из цикла при нажатии кнопки Q или q.

Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы создали пять переменных среды, чтобы настроить пример для подключения к центру Интернета вещей с помощью Подготовки устройств к добавлению в Центр Интернета вещей (DPS):

  • IOTHUB_DEVICE_SECURITY_TYPE со значением DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE с областью идентификатора DPS;
  • IOTHUB_DEVICE_DPS_DEVICE_ID со значением my-pnp-device;
  • IOTHUB_DEVICE_DPS_DEVICE_KEY с первичным ключом регистрации;
  • IOTHUB_DEVICE_DPS_ENDPOINT со значением global.azure-devices-provisioning.net.

Дополнительные сведения о примере конфигурации см. в образце файла сведений.

Теперь, когда вы просмотрели код, выполните следующую команду, чтобы запустить пример:

node pnp_temperature_controller.js

Вы увидите приведенный ниже результат, который указывает на то, что устройство начало отправлять данные телеметрии в центр и готово к получению команд и обновлений свойств.

Сообщения о подтверждении устройства

Продолжите работу примера, после того как выполните следующие действия.

Проверка кода с помощью обозревателя Интернета вещей Azure

После запуска примера клиента устройства используйте обозреватель Интернета вещей Azure, чтобы убедиться, что он работает.

  1. Откройте обозреватель Azure IoT.

  2. Если вы еще не установили подключение к центру Интернета вещей, на странице Центров Интернета вещей выберите + Add connection (+ Добавить подключение). Введите строку подключения для центра Интернета вещей, созданного ранее, и нажмите кнопку Save (Сохранить).

  3. На странице "Параметры" самонастраивающийся Интернета вещей выберите +Добавить > локальную папку и выберите папку локальных моделей, в которой сохранены файлы модели.

  4. На странице Центров Интернета вещей щелкните имя центра, с которым вы хотите работать. Откроется список устройств, зарегистрированных в Центре Интернета вещей

  5. Щелкните идентификатор ранее созданного устройства.

  6. В меню слева отображаются различные типы сведений, доступных для устройства.

  7. Выберите IoT Plug and Play components (Компоненты Plug and Play IoT), чтобы просмотреть сведения о модели для устройства.

  8. Вы можете просматривать различные компоненты устройства. Компонент по умолчанию и все дополнительные компоненты. Выберите компонент для работы.

  9. Выберите страницу Telemetry (Телеметрия) и щелкните Start (Запустить), чтобы просмотреть данные телеметрии, которые отправляет устройство для компонента.

  10. Выберите страницу Properties (read-only) (Свойства (только для чтения)), чтобы просмотреть свойства только для чтения, сообщаемые для этого компонента.

  11. Выберите страницу Properties(writable) (Свойства (доступные для записи)), чтобы просмотреть доступные для записи свойства, которые можно обновить для этого компонента.

  12. Выберите свойство по имени, введите новое значение и щелкните Update desired value (Обновить нужное значение).

  13. Чтобы увидеть новое значение, нажмите кнопку Refresh (Обновить).

  14. Выберите страницу команд, чтобы просмотреть все команды для этого компонента.

  15. Выберите команду, которую нужно проверить, и при необходимости задайте параметр. Выберите Send command (Отправить команду), чтобы вызвать команду на устройстве. Ответ устройства на команду можно увидеть в окне командной строки, где выполняется пример кода.

В этом руководстве показано, как создать пример приложения устройства IoT Plug and Play с компонентами, подключить его к центру Интернета вещей и с помощью обозревателя Интернета вещей Azure просмотреть сведения, отправляемые в центр. Пример приложения написан на языке Python и включен в пакет SDK для устройств центра Интернета вещей Azure для Python. Разработчик решения может использовать обозреватель Интернета вещей Azure, чтобы ознакомиться с возможностями устройства IoT Plug and Play, не просматривая код устройства.

Просмотреть код

Изучив это руководство, вы:

  • (скачайте его здесь).
  • Запустите пример приложения устройства и проверьте, подключается ли оно к вашему центру Интернета вещей.
  • Просмотрите исходный код.

Необходимые компоненты

Прежде чем продолжить, убедитесь, что вы настроили среду, в том числе центр Интернета вещей.

Операции, описанные в этом учебнике, можно выполнить в Linux или Windows. Команды оболочки в этом учебнике соответствуют требованиям соглашения Linux для разделителей пути "/". Если вы используете Windows, не забудьте изменить эти разделители на "\".

Чтобы завершить работу с этим руководством, необходимо установить Python на компьютере разработки. Проверьте пакет SDK Для Python Для Интернета вещей Azure для текущих требований к версии Python. Проверить версию Python можно с помощью следующей команды:

python --version

Вы можете скачать последнюю рекомендуемую версию для нескольких платформ на сайте python.org.

Загрузка кода

Пакет azure-iot-device опубликован как PIP.

В локальной среде Python установите пакет следующим образом:

pip install azure-iot-device

Если вы ознакомились с руководством по подключению примера приложения устройства IoT Plug and Play в Windows к Центру Интернета вещей (Python), значит, вы уже клонировали репозиторий.

Клонируйте репозиторий пакета SDK Интернета вещей для Python:

git clone --branch v2 https://github.com/Azure/azure-iot-sdk-python

Просмотр кода

В этом примере реализуется устройство контроллера температуры IoT Plug and Play. Модель, которую реализует этот пример, использует несколько компонентов. Файл модели языка определения Цифровых двойников (DTDL) для устройства температуры определяет данные телеметрии, свойства и команды, которые реализует устройство.

Папка azure-iot-sdk-python/samples/pnp содержит пример кода для устройства Интернета вещей самонастраивающийся. Ниже приведены файлы для устройства контроля температуры:

  • temp_controller_with_thermostats.py
  • pnp_helper.py

Устройство для контроля температуры имеет несколько компонентов и компонент по умолчанию на основе модели DTDL.

Откройте файл temp_controller_with_thermostats.py в любом редакторе. Код в этом файле:

  1. Импортирует pnp_helper.py, чтобы получить доступ к вспомогательным методам.

  2. Определяет два идентификатора модели цифрового двойника (DTMIs), которые уникальным образом представляют два разных интерфейса, определенные в модели DTDL. Компоненты в реальном контроллере температуры должны реализовывать эти два интерфейса. Эти два интерфейса уже опубликованы в центральном репозитории. Эти DTMIs должны быть известны пользователю и изменяться в зависимости от сценария реализации устройства. Для текущего примера эти два интерфейса представляют собой:

    • Терморегулятор.
    • Сведения об устройстве, разработанном Azure.
  3. Определяет DTMI model_id для реализуемого устройства. DTMI определяется пользователем и должен соответствовать DTMI в файле модели DTDL.

  4. Определяет имена, присвоенные компонентам в файле DTDL. В DTDL есть два терморегулятора и один информационный компонент устройства. Константа serial_number также определяется в компоненте по умолчанию. Невозможно изменить serial_number устройства.

  5. Определяет реализации обработчика команд. Эти обработчики определяют, что делает устройство при получении запросов команд.

  6. Определяет функции для создания ответа команды. Эти функции определяют, как устройство реагирует на запросы команд. Функции ответа команды создаются, если команде необходимо отправить пользовательский ответ обратно в Центр Интернета вещей. Если функция ответа для команды не указана, отправляется универсальный ответ. В этом примере пользовательский ответ есть только у команды getMaxMinReport.

  7. Определяет функцию для отправки данных телеметрии с этого устройства. Данные телеметрии отправляются с помощью терморегуляторов и компонента по умолчанию. Эта функция имеет необязательный параметр имени компонента, чтобы он мог определить, какой компонент отправил телеметрию.

  8. Определяет прослушиватель для запросов команд.

  9. Определяет прослушиватель для требуемых обновлений свойств.

  10. Имеет функцию main, которая:

    • Использует пакет SDK для устройств для создания клиента устройства и подключения к центру Интернета вещей. Устройство отправляет model_id, чтобы Центр Интернета вещей мог определить устройство IoT Plug and Play.

    • Использует функцию create_reported_properties во вспомогательном файле для создания свойств. Передайте имя компонента и свойства в виде пар "ключ — значение" для этой функции.

    • Обновляет доступные для чтения свойства своих компонентов путем вызова patch_twin_reported_properties.

    • Начинает прослушивание запросов команд с помощью функции execute_command_listener. Функция настраивает прослушиватель для запросов команд от службы. При настройке прослушивателя укажите method_nameuser_command_handlerи необязательное значение create_user_response_handler в качестве параметров.

      • method_name определяет запрос команды. В этом примере модель определяет перезагрузку команд и getMaxMinReport.
      • Функция user_command_handler определяет действия устройства при получении команды.
      • Функция create_user_response_handler создает ответ, который будет отправлен в центр Интернета вещей при успешном выполнении команды. Этот ответ можно просмотреть на портале. Если эта функция не указана, в службу отправляется общий ответ.
    • Использует execute_property_listener для прослушивания обновлений свойств.

    • Начинает отправку телеметрии с помощью send_telemetry. В примере кода используется цикл для вызова трех функций отправки телеметрии. Все они вызываются каждые восемь секунд

    • Отключает все прослушиватели и задачи и выходит из цикла при нажатии кнопки Q или q.

Во время работы со статьей Настройка среды для кратких руководств и учебников IoT Plug and Play вы создали пять переменных среды, чтобы настроить пример для подключения к центру Интернета вещей с помощью Подготовки устройств к добавлению в Центр Интернета вещей (DPS):

  • IOTHUB_DEVICE_SECURITY_TYPE со значением DPS.
  • IOTHUB_DEVICE_DPS_ID_SCOPE с областью идентификатора DPS;
  • IOTHUB_DEVICE_DPS_DEVICE_ID со значением my-pnp-device;
  • IOTHUB_DEVICE_DPS_DEVICE_KEY с первичным ключом регистрации;
  • IOTHUB_DEVICE_DPS_ENDPOINT со значением global.azure-devices-provisioning.net.

Дополнительные сведения о примере конфигурации см. в образце файла сведений.

Для запуска примера используйте следующую команду:

python temp_controller_with_thermostats.py

Пример устройства отправляет сообщения телеметрии каждые несколько секунд в Центр Интернета вещей.

Вы увидите приведенный ниже результат, который указывает на то, что устройство начало отправлять данные телеметрии в центр и готово к получению команд и обновлений свойств.

Сообщения о подтверждении устройства

Продолжите работу примера, после того как выполните следующие действия.

Проверка кода с помощью обозревателя Интернета вещей Azure

После запуска примера клиента устройства используйте обозреватель Интернета вещей Azure, чтобы убедиться, что он работает.

  1. Откройте обозреватель Azure IoT.

  2. Если вы еще не установили подключение к центру Интернета вещей, на странице Центров Интернета вещей выберите + Add connection (+ Добавить подключение). Введите строку подключения для центра Интернета вещей, созданного ранее, и нажмите кнопку Save (Сохранить).

  3. На странице "Параметры" самонастраивающийся Интернета вещей выберите +Добавить > локальную папку и выберите папку локальных моделей, в которой сохранены файлы модели.

  4. На странице Центров Интернета вещей щелкните имя центра, с которым вы хотите работать. Откроется список устройств, зарегистрированных в Центре Интернета вещей

  5. Щелкните идентификатор ранее созданного устройства.

  6. В меню слева отображаются различные типы сведений, доступных для устройства.

  7. Выберите IoT Plug and Play components (Компоненты Plug and Play IoT), чтобы просмотреть сведения о модели для устройства.

  8. Вы можете просматривать различные компоненты устройства. Компонент по умолчанию и все дополнительные компоненты. Выберите компонент для работы.

  9. Выберите страницу Telemetry (Телеметрия) и щелкните Start (Запустить), чтобы просмотреть данные телеметрии, которые отправляет устройство для компонента.

  10. Выберите страницу Properties (read-only) (Свойства (только для чтения)), чтобы просмотреть свойства только для чтения, сообщаемые для этого компонента.

  11. Выберите страницу Properties(writable) (Свойства (доступные для записи)), чтобы просмотреть доступные для записи свойства, которые можно обновить для этого компонента.

  12. Выберите свойство по имени, введите новое значение и щелкните Update desired value (Обновить нужное значение).

  13. Чтобы увидеть новое значение, нажмите кнопку Refresh (Обновить).

  14. Выберите страницу команд, чтобы просмотреть все команды для этого компонента.

  15. Выберите команду, которую нужно проверить, и при необходимости задайте параметр. Выберите Send command (Отправить команду), чтобы вызвать команду на устройстве. Ответ устройства на команду можно увидеть в окне командной строки, где выполняется пример кода.

Очистка ресурсов

Если вы планируете продолжить работу с дополнительными статьями разработчиков устройств, вы можете сохранить и повторно использовать ресурсы, используемые в этой статье. В противном случае можно удалить ресурсы, созданные в этой статье, чтобы избежать дополнительных расходов.

Вы можете одновременно удалить центр и зарегистрированное устройство, удалив всю группу ресурсов с помощью приведенной команды Azure CLI. Не выполняйте данную команду, если эти ресурсы находятся в группе ресурсов с другими нужными вам ресурсами.

az group delete --name <YourResourceGroupName>

Чтобы удалить только Центр Интернета вещей, выполните следующую команду с помощью Azure CLI:

az iot hub delete --name <YourIoTHubName>

Чтобы удалить только то удостоверение устройства, которое вы зарегистрировали в Центре Интернета вещей, выполните следующую команду с помощью интерфейса командной строки Azure:

az iot hub device-identity delete --hub-name <YourIoTHubName> --device-id <YourDeviceID>

Вы также можете удалить клонированные примеры файлов с компьютера, на котором выполняется разработка.

Следующие шаги

Из этого учебника вы узнали, как подключить устройство IoT Plug and Play с компонентами к Центру Интернета вещей. Дополнительные сведения о моделях устройства IoT Plug and Play см. в статье