Share via


Tutorial: Conectar ao Hub IoT um aplicativo de dispositivo de vários componentes do IoT Plug and Play em execução no Linux ou no Windows

Este tutorial mostra como criar um aplicativo de exemplo de dispositivo do IoT Plug and Play com componentes, como conectá-lo ao hub IoT e como usar a ferramenta Azure IoT Explorer para ver as informações que ele envia ao hub. O aplicativo de exemplo é gravado em C e está incluído no SDK do dispositivo IoT do Azure para C. Um construtor de soluções pode usar a ferramenta do Azure IoT Explorer para compreender as funcionalidades de um dispositivo IoT Plug and Play sem a necessidade de ver nenhum código de dispositivo.

Procurar código

Neste tutorial, você:

  • Baixe o código de exemplo.
  • Compilará o código de exemplo.
  • Executará o aplicativo de dispositivo de exemplo e validará se ele se conecta ao seu hub IoT.
  • Examinará o código-fonte.

Pré-requisitos

Antes de continuar, não deixe de configurar seu ambiente, incluindo o hub IoT.

Você pode concluir este tutorial no Linux ou no Windows. Os comandos do shell neste tutorial seguem a convenção do Linux para os separadores de caminho '/', se você está acompanhando no Windows, não deixe de trocar esses separadores por '\'.

Os pré-requisitos diferem por sistema operacional:

Linux

Este tutorial pressupõe que você esteja usando o Ubuntu Linux. As etapas deste tutorial foram testadas com o Ubuntu 18.04.

Para concluir este tutorial no Linux, instale o seguinte software em um ambiente Linux local:

Instale o GCC, o Git, o CMake e todas as dependências exigidas usando o comando apt-get:

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

Verifique se a versão do cmake é superior a 2.8.12 e se a versão do GCC é superior a 4.4.7.

cmake --version
gcc --version

Windows

Para realizar este tutorial no Windows, instale o seguinte software em um ambiente Windows local:

Baixar o código

Se você concluiu o Tutorial: Conectar um aplicativo de exemplo de dispositivo do IoT Plug and Play em execução no Linux ou no Windows ao Hub IoT (C), você já baixou o código.

Neste tutorial, você vai preparar um ambiente de desenvolvimento que pode ser usado para clonar e compilar o SDK do C do dispositivo do Hub IoT do Azure.

Abra um prompt de comando em uma pasta de sua escolha. Execute o seguinte comando para clonar o repositório GitHub dos SDKs de C e Bibliotecas do IoT do Azure nesta localização:

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

Essa operação deve demorar alguns minutos.

Criar e executar o código

Você pode criar e executar o código usando o Visual Studio ou cmake na linha de comando.

Usar o Visual Studio

  1. Abra a pasta raiz do repositório clonado. Depois de alguns segundos, o suporte para CMake no Visual Studio cria tudo de que você precisa para executar e depurar o projeto.

  2. Quando o Visual Studio estiver pronto, em Gerenciador de Soluções, navegue até o iothub_client/samples/pnp/pnp_temperature_controller/ .

  3. Clique com o botão direito do mouse no arquivo pnp_temperature_controller.c e selecione Adicionar Configuração de Depuração. Selecione Padrão.

  4. O Visual Studio abre o arquivo launch.vs.json. Edite esse arquivo conforme mostrado no snippet a seguir para definir as variáveis de ambiente necessárias. Você anotou a ID de escopo e a chave primária de registro ao concluir "Configurar um ambiente" nos inícios rápidos e nos tutoriais do 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. Clique com o botão direito do mouse no arquivo pnp_temperature_controller.c e selecione Definir como Item de Inicialização.

  6. Para rastrear a execução de código no Visual Studio, adicione um ponto de interrupção à função main no arquivo main.

  7. Agora você pode executar e depurar o exemplo no menu Depurar.

Agora, o dispositivo está pronto para receber comandos e atualizações de propriedade e começou a enviar dados telemétricos para o hub. Mantenha o exemplo em execução enquanto você conclui as próximas etapas.

Use cmake na linha de comando

Para compilar a amostra:

  1. Crie uma pasta cmake na pasta raiz do SDK do dispositivo clonado e navegue até ela:

    cd azure-iot-sdk-c
    mkdir cmake
    cd cmake
    
  2. Execute os seguintes comandos para gerar e compilar os arquivos de projeto para SDK e exemplos:

    cmake ..
    cmake --build .
    

Em Configurar um ambiente, você criou quatro variáveis de ambiente para configurar o exemplo e usar o DPS (Serviço de Provisionamento de Dispositivos) para conectar-se ao hub IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE com o valor DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE com a ID de escopo do DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID com o valor my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY com a chave primária de registro.
  • IOTHUB_DEVICE_DPS_ENDPOINT com o valor global.azure-devices-provisioning.net.

Para saber mais sobre a configuração do exemplo, confira o leiame de exemplo.

Para executar o exemplo:

  1. Na pasta cmake, navegue até a pasta que contém o arquivo executável e execute-o:

    # 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
    

Agora, o dispositivo está pronto para receber comandos e atualizações de propriedade e começou a enviar dados telemétricos para o hub. Mantenha o exemplo em execução enquanto você conclui as próximas etapas.

Usar o Azure IoT Explorer para validar o código

Após iniciar o exemplo de cliente do dispositivo, use a ferramenta Azure IoT Explorer para verificar se ele está funcionando.

  1. Abra o Explorador de IoT do Azure.

  2. Na página Hubs IoT, se você ainda não tiver adicionado uma conexão ao seu Hub IoT, selecione + Adicionar conexão. Insira a cadeia de conexão para o Hub IoT que você criou anteriormente e selecione Salvar.

  3. Na página Configurações de IoT Plug and Play, selecione + Adicionar > Pasta local e selecione a pasta local modelos em que você salvou os arquivos de modelo.

  4. Na página Hubs IoT, clique no nome do hub com o qual você deseja trabalhar. Você verá uma lista de dispositivos registrados no Hub IoT.

  5. Clique na ID do dispositivo do dispositivo que você criou anteriormente.

  6. O menu à esquerda mostra os diferentes tipos de informações disponíveis para o dispositivo.

  7. Selecione Componentes IoT Plug and Play para ver as informações de modelo do seu dispositivo.

  8. Você pode ver os vários componentes do dispositivo. O componente padrão e quaisquer componentes extras. Selecione um componente com o qual trabalhar.

  9. Selecione a página Telemetria e escolha Iniciar para ver os dados telemétricos que o dispositivo está enviando para esse componente.

  10. Selecione a página Propriedades (somente leitura) para ver as propriedades somente leitura relatadas para esse componente.

  11. Selecione a página Propriedades (graváveis) para ver as propriedades graváveis que podem ser atualizadas para esse componente.

  12. Selecione uma propriedade pelo respectivo nome, insira um novo valor para ela e selecione Atualizar o valor desejado.

  13. Para que o novo valor apareça, selecione o botão Atualizar.

  14. Selecione a página Comandos para ver todos os comandos para esse componente.

  15. Selecione o comando que você deseja testar e defina o parâmetro correspondente, se houver. Selecione Enviar comando para chamar o comando no dispositivo. É possível ver que o dispositivo responde ao comando na janela de prompt de comando em que o código de exemplo está sendo executado.

Examine o código

Este exemplo implementa um dispositivo controlador de temperatura do IoT Plug and Play. Este exemplo implementa um modelo com vários componentes. O arquivo de modelo V2 de DTDL (linguagem de definição de Gêmeos Digitais) do dispositivo de temperatura define a telemetria, as propriedades e os comandos que o dispositivo implementa.

Funções auxiliares de IoT Plug and Play

Para este exemplo, o código usa algumas funções auxiliares da pasta /common:

pnp_device_client_ll contém o método connect para IoT Plug and Play de IoT com o model-id incluído como um parâmetro: PnP_CreateDeviceClientLLHandle.

pnp_protocol: contém as funções auxiliares de IoT Plug and Play:

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

essas funções auxiliares são genéricas o bastante para você usá-las no seu próprio projeto. Este exemplo os usa nos três arquivos que correspondem a cada componente no modelo:

  • pnp_deviceinfo_component
  • pnp_temperature_controller
  • pnp_thermostat_component

Por exemplo, no arquivo pnp_deviceinfo_component, a função SendReportedPropertyForDeviceInformation usa duas das funções auxiliares:

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);
    }
}

cada componente no exemplo segue esse padrão.

fluxo de código

A função main inicializa a conexão e envia a ID do modelo:

deviceClient = CreateDeviceClientAndAllocateComponents();

O código usa PnP_CreateDeviceClientLLHandle para se conectar ao hub IoT, definir modelId como uma opção e configurar o método do dispositivo e os manipuladores de retorno de chamada do dispositivo gêmeo para métodos diretos e atualizações do dispositivo gêmeo:

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

deviceClient = PnP_CreateDeviceClientLLHandle(&g_pnpDeviceConfiguration);

&g_pnpDeviceConfiguration também contém as informações de conexão. A variável de ambiente IOTHUB_DEVICE_SECURITY_TYPE determina se o exemplo usa uma cadeia de conexão ou o serviço de provisionamento de dispositivos para se conectar ao Hub IoT.

Quando o dispositivo envia uma ID de modelo, ele se torna um dispositivo IoT Plug and Play.

Com os manipuladores de retorno de chamada em vigor, o dispositivo reage às atualizações do gêmeo e a chamadas do método direto:

  • Para o retorno de chamada de dispositivo gêmeo, o PnP_TempControlComponent_DeviceTwinCallback chama a função PnP_ProcessTwinData para processar os dados. PnP_ProcessTwinData usa o PnP_ProcessTwinData para analisar o JSON e visita cada propriedade, chamando PnP_TempControlComponent_ApplicationPropertyCallback em cada elemento.

  • Para o retorno de chamada de comandos, a função PnP_TempControlComponent_DeviceMethodCallback usa a função auxiliar para analisar os nomes de comando e componente:

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

    Em seguida, a função PnP_TempControlComponent_DeviceMethodCallback chama o comando no componente:

    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;
    }
    

A função main inicializa as propriedades somente leitura enviadas ao hub IoT:

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);

A função main entra em um loop para atualizar os dados de evento e telemetria para cada componente:

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

A função PnP_ThermostatComponent_SendTelemetry mostra como usar o struct PNP_THERMOSTAT_COMPONENT. O exemplo usa esse struct para armazenar informações sobre os dois termostatos conectados no controlador de temperatura. O código usa a função PnP_CreateTelemetryMessageHandle para preparar a mensagem e enviá-la:

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

A função main por fim destrói os diferentes componentes e fecha a conexão com o hub.

Este tutorial mostra como criar um aplicativo de exemplo de dispositivo do IoT Plug and Play com componentes, como conectá-lo ao hub IoT e como usar a ferramenta Azure IoT Explorer para ver as informações que ele envia ao hub. O aplicativo de exemplo é escrito em C# e está incluído no SDK do dispositivo IoT do Azure para C#. Um construtor de soluções pode usar a ferramenta Azure IoT Explorer para compreender as funcionalidades de um dispositivo IoT Plug and Play sem a necessidade de ver nenhum código de dispositivo.

Procurar código

Neste tutorial, você:

  • Baixe o código de exemplo.
  • Compilará o código de exemplo.
  • Executará o aplicativo de dispositivo de exemplo e validará se ele se conecta ao seu hub IoT.
  • Examinará o código-fonte.

Pré-requisitos

Antes de continuar, não deixe de configurar seu ambiente, incluindo o hub IoT.

Você pode executar este tutorial no Linux ou no Windows. Os comandos do shell neste tutorial seguem a convenção do Linux para os separadores de caminho '/', se você está acompanhando no Windows, não deixe de trocar esses separadores por '\'.

Clonar o repositório do SDK com o código de exemplo

Se você concluiu o Tutorial: Conectar um aplicativo de exemplo de dispositivo do IoT Plug and Play em execução no Windows ao Hub IoT (C#), você já clonou o repositório.

Clone os exemplos dos Exemplos de IoT do Azure para o repositório GitHub em C#. Abra um prompt de comando em uma pasta de sua escolha. Execute o seguinte comando para clonar o repositório do GitHub do SDK da IoT do Microsoft Azure para .NET:

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

Compilar o código

Agora você pode criar a amostra e executá-la. Execute os seguintes comandos para criar a amostra:

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

Executar o exemplo de dispositivo

Para executar a amostra, execute o seguinte comando:

dotnet run

Agora, o dispositivo está pronto para receber comandos e atualizações de propriedade e começou a enviar dados telemétricos para o hub. Mantenha o exemplo em execução enquanto você conclui as próximas etapas.

Usar o Azure IoT Explorer para validar o código

Após iniciar o exemplo de cliente do dispositivo, use a ferramenta Azure IoT Explorer para verificar se ele está funcionando.

  1. Abra o Explorador de IoT do Azure.

  2. Na página Hubs IoT, se você ainda não tiver adicionado uma conexão ao seu Hub IoT, selecione + Adicionar conexão. Insira a cadeia de conexão para o Hub IoT que você criou anteriormente e selecione Salvar.

  3. Na página Configurações de IoT Plug and Play, selecione + Adicionar > Pasta local e selecione a pasta local modelos em que você salvou os arquivos de modelo.

  4. Na página Hubs IoT, clique no nome do hub com o qual você deseja trabalhar. Você verá uma lista de dispositivos registrados no Hub IoT.

  5. Clique na ID do dispositivo do dispositivo que você criou anteriormente.

  6. O menu à esquerda mostra os diferentes tipos de informações disponíveis para o dispositivo.

  7. Selecione Componentes IoT Plug and Play para ver as informações de modelo do seu dispositivo.

  8. Você pode ver os vários componentes do dispositivo. O componente padrão e quaisquer componentes extras. Selecione um componente com o qual trabalhar.

  9. Selecione a página Telemetria e escolha Iniciar para ver os dados telemétricos que o dispositivo está enviando para esse componente.

  10. Selecione a página Propriedades (somente leitura) para ver as propriedades somente leitura relatadas para esse componente.

  11. Selecione a página Propriedades (graváveis) para ver as propriedades graváveis que podem ser atualizadas para esse componente.

  12. Selecione uma propriedade pelo respectivo nome, insira um novo valor para ela e selecione Atualizar o valor desejado.

  13. Para que o novo valor apareça, selecione o botão Atualizar.

  14. Selecione a página Comandos para ver todos os comandos para esse componente.

  15. Selecione o comando que você deseja testar e defina o parâmetro correspondente, se houver. Selecione Enviar comando para chamar o comando no dispositivo. É possível ver que o dispositivo responde ao comando na janela de prompt de comando em que o código de exemplo está sendo executado.

Examine o código

Este exemplo implementa um dispositivo controlador de temperatura do IoT Plug and Play. O modelo que este exemplo implementa usa vários componentes. O arquivo de modelo V2 de DTDL (linguagem de definição de Gêmeos Digitais) do dispositivo de temperatura define a telemetria, as propriedades e os comandos que o dispositivo implementa.

O código do dispositivo se conecta ao hub IoT usando o método CreateFromConnectionString padrão. O dispositivo envia a ID de modelo do modelo de DTDL que ele implementa na solicitação de conexão. Um dispositivo que envia uma ID de modelo é um dispositivo 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;
}

A ID do modelo é armazenada no código, conforme mostrado no seguinte snippet:

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

Depois que o dispositivo se conectar ao hub IoT, o código registrará os manipuladores de comando. O comando reboot é definido no componente padrão. O comando getMaxMinReport é definido em cada um dos dois componentes do termostato:

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

Há manipuladores separados para as atualizações de propriedade desejadas nos dois componentes de termostato:

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

O código de exemplo envia telemetria de cada componente do termostato:

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

O método SendTemperatureTelemetryAsync usa a classe PnpHhelper para criar mensagens para cada componente:

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

A classe PnpHelper contém outros métodos de exemplo que você pode usar com um modelo de vários componentes.

Use a ferramenta do Azure IoT Explorer para ver a telemetria e as propriedades dos dois componentes do termostato:

Vários dispositivos de componente no Azure IoT Explorer

Também é possível usar a ferramenta Azure IoT Explorer para chamar comandos em um dos dois componentes do termostato ou no componente padrão.

Este tutorial mostra como criar um aplicativo de exemplo de dispositivo do IoT Plug and Play com componentes, como conectá-lo ao hub IoT e como usar a ferramenta Azure IoT Explorer para ver as informações que ele envia ao hub. O aplicativo de exemplo é escrito no Java e é incluído no SDK do dispositivo de IoT do Azure para Java. Um construtor de soluções pode usar a ferramenta Azure IoT Explorer para compreender as funcionalidades de um dispositivo IoT Plug and Play sem a necessidade de ver nenhum código de dispositivo.

Procurar código

Neste tutorial, você:

  • Baixe o código de exemplo.
  • Compilará o código de exemplo.
  • Executará o aplicativo de dispositivo de exemplo e validará se ele se conecta ao seu hub IoT.
  • Examinará o código-fonte.

Pré-requisitos

Antes de continuar, não deixe de configurar seu ambiente, incluindo o hub IoT.

Você pode executar este tutorial no Linux ou no Windows. Os comandos do shell neste tutorial seguem a convenção do Linux para os separadores de caminho '/', se você está acompanhando no Windows, não deixe de trocar esses separadores por '\'.

Para concluir este tutorial, instale o seguinte software em seu ambiente de desenvolvimento local:

Baixar o código

Se você concluiu o Tutorial: Conectar um aplicativo de exemplo de dispositivo do IoT Plug and Play ao Hub IoT (Java), você já clonou o repositório.

Abra um prompt de comando no diretório de sua escolha. Execute o seguinte comando para clonar o repositório GitHub dos SDKs de Java e as Bibliotecas de IoT do Azure nesta localização:

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

Essa operação deve demorar alguns minutos.

Compilar o código

Navegue até a pasta raiz do exemplo de controlador de temperatura no repositório de SDK do Java clonado e compile-o:

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

Executar o exemplo de dispositivo

Em Configurar um ambiente, você criou quatro variáveis de ambiente para configurar o exemplo e usar o DPS (Serviço de Provisionamento de Dispositivos) para conectar-se ao hub IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE com o valor DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE com a ID de escopo do DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID com o valor my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY com a chave primária de registro.
  • IOTHUB_DEVICE_DPS_ENDPOINT com o valor global.azure-devices-provisioning.net.

Para executar o aplicativo de exemplo, navegue até a pasta /device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample e execute o seguinte comando:

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

Agora, o dispositivo está pronto para receber comandos e atualizações de propriedade e começou a enviar dados telemétricos para o hub. Mantenha o exemplo em execução enquanto você conclui as próximas etapas.

Usar o Azure IoT Explorer para validar o código

Após iniciar o exemplo de cliente do dispositivo, use a ferramenta Azure IoT Explorer para verificar se ele está funcionando.

  1. Abra o Explorador de IoT do Azure.

  2. Na página Hubs IoT, se você ainda não tiver adicionado uma conexão ao seu Hub IoT, selecione + Adicionar conexão. Insira a cadeia de conexão para o Hub IoT que você criou anteriormente e selecione Salvar.

  3. Na página Configurações de IoT Plug and Play, selecione + Adicionar > Pasta local e selecione a pasta local modelos em que você salvou os arquivos de modelo.

  4. Na página Hubs IoT, clique no nome do hub com o qual você deseja trabalhar. Você verá uma lista de dispositivos registrados no Hub IoT.

  5. Clique na ID do dispositivo do dispositivo que você criou anteriormente.

  6. O menu à esquerda mostra os diferentes tipos de informações disponíveis para o dispositivo.

  7. Selecione Componentes IoT Plug and Play para ver as informações de modelo do seu dispositivo.

  8. Você pode ver os vários componentes do dispositivo. O componente padrão e quaisquer componentes extras. Selecione um componente com o qual trabalhar.

  9. Selecione a página Telemetria e escolha Iniciar para ver os dados telemétricos que o dispositivo está enviando para esse componente.

  10. Selecione a página Propriedades (somente leitura) para ver as propriedades somente leitura relatadas para esse componente.

  11. Selecione a página Propriedades (graváveis) para ver as propriedades graváveis que podem ser atualizadas para esse componente.

  12. Selecione uma propriedade pelo respectivo nome, insira um novo valor para ela e selecione Atualizar o valor desejado.

  13. Para que o novo valor apareça, selecione o botão Atualizar.

  14. Selecione a página Comandos para ver todos os comandos para esse componente.

  15. Selecione o comando que você deseja testar e defina o parâmetro correspondente, se houver. Selecione Enviar comando para chamar o comando no dispositivo. É possível ver que o dispositivo responde ao comando na janela de prompt de comando em que o código de exemplo está sendo executado.

Examine o código

Este exemplo implementa um dispositivo controlador de temperatura do IoT Plug and Play. O modelo que este exemplo implementa usa vários componentes. O arquivo de modelo V2 de DTDL (linguagem de definição de Gêmeos Digitais) do dispositivo de temperatura define a telemetria, as propriedades e os comandos que o dispositivo implementa.

O código do dispositivo usa a classe DeviceClient padrão para se conectar ao seu hub IoT. O dispositivo envia a ID de modelo do modelo de DTDL que ele implementa na solicitação de conexão. Um dispositivo que envia uma ID de modelo é um dispositivo 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();
}

A ID do modelo é armazenada no código, conforme mostrado no seguinte snippet:

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

Depois que o dispositivo se conectar ao hub IoT, o código registrará os manipuladores de comando.

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

Há manipuladores separados para as atualizações de propriedade desejadas nos dois componentes de termostato:

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);

O código de exemplo envia telemetria de cada componente do termostato:

sendTemperatureReading(THERMOSTAT_1);
sendTemperatureReading(THERMOSTAT_2);

O método sendTemperatureReading usa a classe PnpHhelper para criar mensagens para cada componente:

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

A classe PnpHelper contém outros métodos de exemplo que você pode usar com um modelo de vários componentes.

Use a ferramenta do Azure IoT Explorer para ver a telemetria e as propriedades dos dois componentes do termostato:

Vários dispositivos de componente no Azure IoT Explorer

Também é possível usar a ferramenta Azure IoT Explorer para chamar comandos em um dos dois componentes do termostato ou no componente padrão.

Este tutorial mostra como criar um aplicativo de exemplo de dispositivo do IoT Plug and Play com componentes, como conectá-lo ao hub IoT e como usar a ferramenta Azure IoT Explorer para ver as informações que ele envia ao hub. O aplicativo de exemplo é escrito para Node.js e é incluído no SDK do Dispositivo do Hub IoT do Azure para Node.js. Um construtor de soluções pode usar a ferramenta Azure IoT Explorer para compreender as funcionalidades de um dispositivo IoT Plug and Play sem a necessidade de ver nenhum código de dispositivo.

Procurar código

Neste tutorial, você:

  • Baixe o código de exemplo.
  • Executará o aplicativo de dispositivo de exemplo e validará se ele se conecta ao seu hub IoT.
  • Examinará o código-fonte.

Pré-requisitos

Antes de continuar, não deixe de configurar seu ambiente, incluindo o hub IoT.

Para concluir este tutorial, você precisa do Node.js em seu computador de desenvolvimento. Você pode baixar a versão mais recente recomendada para várias plataformas de nodejs.org.

Você pode verificar a versão atual do Node.js no computador de desenvolvimento usando o seguinte comando:

node --version

Baixar o código

Se você concluiu o Tutorial: Conectar um aplicativo de exemplo de dispositivo do IoT Plug and Play em execução no Windows ao Hub IoT (Node), você já clonou o repositório.

Abra um prompt de comando no diretório de sua escolha. Execute o seguinte comando para clonar o repositório GitHub do SDK do Microsoft Azure IoT para Node.js nesta localização:

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

Instalar as bibliotecas necessárias

Use o SDK do dispositivo para criar o código de exemplo incluído. O aplicativo que você cria simula um dispositivo Plug and Play com vários componentes que se conectam a um hub IoT. O aplicativo envia a telemetria e as propriedades e recebe comandos.

  1. Em uma janela de terminal local, acesse a pasta do repositório clonado e navegue até a pasta /azure-iot-sdk-node/device/samples/javascript. Em seguida, execute o seguinte comando para instalar as bibliotecas necessárias:
npm install

Esse comando instala os arquivos npm relevantes necessários para executar os exemplos na pasta.

Examine o código

Navegue até a pasta azure-iot-sdk-node/device/samples/javascript.

A pasta azure-iot-sdk-node/device/samples/javascript contém o código de exemplo do dispositivo controlador de temperatura do IoT Plug and Play.

O código no arquivo pnp_temperature_controller.js implementa um dispositivo controlador de temperatura do IoT Plug and Play. O modelo que este exemplo implementa usa vários componentes. O arquivo de modelo V2 de DTDL (linguagem de definição de Gêmeos Digitais) do dispositivo de temperatura define a telemetria, as propriedades e os comandos que o dispositivo implementa.

Abra o arquivo pnp_temperature_controller.js em um editor de código de sua escolha. O código de exemplo mostra como:

  • Defina o modelId que é o DTMI para o dispositivo que você está implementando. Esse DTMI é definido pelo usuário e deve corresponder ao DTMI do modelo de DTDL do controlador de temperatura.

  • Implementar os componentes definidos no modelo de DTDL do controlador de temperatura. Os componentes em um controlador de temperatura real devem implementar essas duas interfaces. Essas duas interfaces já estão publicadas em um repositório central. Neste exemplo, as duas interfaces são:

    • Termostato
    • Informações do dispositivo desenvolvidas pelo Azure
  • Definir os nomes dos componentes. Este exemplo tem dois termostatos e um componente de informações do dispositivo.

  • Defina nomes de comando para os comandos aos quais o dispositivo responde.

  • Definir a constante serialNumber. O serialNumber é corrigido é fixo para qualquer dispositivo específico.

  • Definir os manipuladores de comando.

  • Definir as funções para enviar respostas de comando.

  • Definir funções auxiliares para registrar solicitações de comando em log.

  • Definir uma função auxiliar para criar as propriedades.

  • Definir um ouvinte para atualizações de propriedade.

  • Definir uma função para enviar telemetria deste dispositivo. Tanto os termostatos quanto o componente padrão enviam telemetria. Essa função recebe o nome do componente como parâmetro.

  • Definir uma função main que:

    • Usa o SDK do dispositivo para criar um cliente de dispositivo e conectar-se ao hub IoT. O dispositivo fornece a modelId para que o Hub IoT possa identificar o dispositivo como um dispositivo IoT Plug and Play.

    • Inicia a escuta de solicitações de comando usando a função onDeviceMethod. A função configura um ouvinte para solicitações de comando do serviço:

      • O dispositivo DTDL define os comandos reboot e getMaxMinReport.
      • A função commandHandler define a maneira que o dispositivo responde a um comando.
    • Inicia o envio de telemetria usando setInterval e sendTelemetry.

    • Usa a função helperCreateReportedPropertiesPatch para criar as propriedades e a updateComponentReportedProperties para atualizar as propriedades.

    • Usa desiredPropertyPatchListener para escutar atualizações de propriedade.

    • Desabilita todos os ouvintes e tarefas e sai do loop quando você pressiona Q ou q.

Em Configurar um ambiente, você criou quatro variáveis de ambiente para configurar o exemplo e usar o DPS (Serviço de Provisionamento de Dispositivos) para conectar-se ao hub IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE com o valor DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE com a ID de escopo do DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID com o valor my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY com a chave primária de registro.
  • IOTHUB_DEVICE_DPS_ENDPOINT com o valor global.azure-devices-provisioning.net.

Para saber mais sobre a configuração do exemplo, confira o leiame de exemplo.

Agora que você já viu o código, use o seguinte comando para executar o exemplo:

node pnp_temperature_controller.js

Você vê a saída a seguir, indicando que o dispositivo começou a enviar dados telemétricos para o hub e agora está pronto para receber comandos e atualizações de propriedade.

Mensagens de confirmação do dispositivo

Mantenha o exemplo em execução enquanto você conclui as próximas etapas.

Usar o Azure IoT Explorer para validar o código

Após iniciar o exemplo de cliente do dispositivo, use a ferramenta Azure IoT Explorer para verificar se ele está funcionando.

  1. Abra o Explorador de IoT do Azure.

  2. Na página Hubs IoT, se você ainda não tiver adicionado uma conexão ao seu Hub IoT, selecione + Adicionar conexão. Insira a cadeia de conexão para o Hub IoT que você criou anteriormente e selecione Salvar.

  3. Na página Configurações de IoT Plug and Play, selecione + Adicionar > Pasta local e selecione a pasta local modelos em que você salvou os arquivos de modelo.

  4. Na página Hubs IoT, clique no nome do hub com o qual você deseja trabalhar. Você verá uma lista de dispositivos registrados no Hub IoT.

  5. Clique na ID do dispositivo do dispositivo que você criou anteriormente.

  6. O menu à esquerda mostra os diferentes tipos de informações disponíveis para o dispositivo.

  7. Selecione Componentes IoT Plug and Play para ver as informações de modelo do seu dispositivo.

  8. Você pode ver os vários componentes do dispositivo. O componente padrão e quaisquer componentes extras. Selecione um componente com o qual trabalhar.

  9. Selecione a página Telemetria e escolha Iniciar para ver os dados telemétricos que o dispositivo está enviando para esse componente.

  10. Selecione a página Propriedades (somente leitura) para ver as propriedades somente leitura relatadas para esse componente.

  11. Selecione a página Propriedades (graváveis) para ver as propriedades graváveis que podem ser atualizadas para esse componente.

  12. Selecione uma propriedade pelo respectivo nome, insira um novo valor para ela e selecione Atualizar o valor desejado.

  13. Para que o novo valor apareça, selecione o botão Atualizar.

  14. Selecione a página Comandos para ver todos os comandos para esse componente.

  15. Selecione o comando que você deseja testar e defina o parâmetro correspondente, se houver. Selecione Enviar comando para chamar o comando no dispositivo. É possível ver que o dispositivo responde ao comando na janela de prompt de comando em que o código de exemplo está sendo executado.

Este tutorial mostra como criar um aplicativo de exemplo de dispositivo do IoT Plug and Play com componentes, como conectá-lo ao hub IoT e como usar a ferramenta Azure IoT Explorer para ver as informações que ele envia ao hub. O aplicativo de exemplo é escrito no Python e é incluído no SDK do dispositivo de IoT do Azure para Python. Um construtor de soluções pode usar a ferramenta Azure IoT Explorer para compreender as funcionalidades de um dispositivo IoT Plug and Play sem a necessidade de ver nenhum código de dispositivo.

Procurar código

Neste tutorial, você:

  • Baixe o código de exemplo.
  • Executará o aplicativo de dispositivo de exemplo e validará se ele se conecta ao seu hub IoT.
  • Examinará o código-fonte.

Pré-requisitos

Antes de continuar, não deixe de configurar seu ambiente, incluindo o hub IoT.

Você pode executar este tutorial no Linux ou no Windows. Os comandos do shell neste tutorial seguem a convenção do Linux para os separadores de caminho '/', se você está acompanhando no Windows, não deixe de trocar esses separadores por '\'.

Para concluir este tutorial, é necessário ter o Python instalado em seu computador de desenvolvimento. Verifique o SDK do Python da Internet das Coisas do Azure, para obter os requisitos atuais de versão do Python. Verifique a sua versão do Python com o seguinte comando:

python --version

Baixe a versão mais recente recomendada para várias plataformas em python.org.

Baixar o código

O pacote azure-iot-device é publicado como um PIP.

No ambiente Python local, instale o pacote da seguinte maneira:

pip install azure-iot-device

Se você concluiu o Tutorial: Conectar um aplicativo de exemplo de dispositivo do IoT Plug and Play em execução no Windows ao Hub IoT (Python), você já clonou o repositório.

Clone o repositório de IoT do SDK do Python:

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

Examine o código

Este exemplo implementa um dispositivo controlador de temperatura do IoT Plug and Play. O modelo que este exemplo implementa usa vários componentes. O arquivo de modelo V2 de DTDL (linguagem de definição de Gêmeos Digitais) do dispositivo de temperatura define a telemetria, as propriedades e os comandos que o dispositivo implementa.

A pasta azure-iot-sdk-python/samples/pnp contém o código de exemplo do dispositivo IoT Plug and Play. Os arquivos para o exemplo do controlador de temperatura são:

  • temp_controller_with_thermostats.py
  • pnp_helper.py

O controlador de temperatura tem vários componentes e um componente padrão, com base no modelo de DTDL do controlador de temperatura.

Abra o arquivo temp_controller_with_thermostats.py em um editor de sua escolha. O código neste arquivo:

  1. Importa pnp_helper.py para obter acesso aos métodos auxiliares.

  2. Define dois DTMIs (identificadores de modelo de gêmeos digitais) que representam com exclusividade duas interfaces diferentes, definidas no modelo de DTDL. Os componentes em um controlador de temperatura real devem implementar essas duas interfaces. Essas duas interfaces já estão publicadas em um repositório central. Esses DTMIs devem ser conhecidos do usuário e variar dependendo do cenário de implementação do dispositivo. Para o exemplo atual, essas duas interfaces representam:

    • Um termostato
    • Informações do dispositivo desenvolvidas pelo Azure.
  3. Define o model_id do DTMI do dispositivo que está sendo implementado. O DTMI é definido pelo usuário e deve corresponder ao DTMI no arquivo de modelo de DTDL.

  4. Define os nomes fornecidos aos componentes no arquivo DTDL. Há dois termostatos conectados no DTDL e um componente de informações do dispositivo. Uma constante chamada serial_number também é definida no componente padrão. Uma serial_number não pode ser alterada em um dispositivo.

  5. Define implementações do manipulador de comando. Esses identificadores definem o que o dispositivo faz quando recebe solicitações de comando.

  6. Define funções para criar uma resposta de comando. Essas funções definem como o dispositivo responde com as solicitações de comando. Você cria funções de resposta de comando se um comando precisa enviar uma resposta personalizada de volta para o hub IoT. Se uma função de resposta para um comando não for fornecida, uma resposta genérica será enviada. Neste exemplo, somente o comando getMaxMinReport tem uma resposta personalizada.

  7. Define uma função para enviar telemetria deste dispositivo. Tanto os termostatos quanto o componente padrão enviam telemetria. Essa função tem um parâmetro de nome de componente opcional para permitir que ela identifique qual componente enviou a telemetria.

  8. Define um ouvinte para solicitações de comando.

  9. Define um ouvinte para as atualizações de propriedade desejadas.

  10. Tem uma função main que:

    • Usa o SDK do dispositivo para criar um cliente de dispositivo e conectar-se ao hub IoT. O dispositivo envia a model_id para que o hub IoT possa identificar o dispositivo como um dispositivo do IoT Plug and Play.

    • Usa a função create_reported_properties no arquivo auxiliar para criar as propriedades. Passe o nome do componente e as propriedades como pares chave-valor para essa função.

    • Atualiza as propriedades legíveis para seus componentes chamando patch_twin_reported_properties.

    • Inicia a escuta de solicitações de comando usando a função execute_command_listener. A função configura um ouvinte para solicitações de comando do serviço. Ao configurar o ouvinte, você fornece um method_name, user_command_handler e um create_user_response_handler opcional como parâmetros.

      • O method_name define a solicitação de comando. Neste exemplo, o modelo define os comandos reboot e getMaxMinReport.
      • A função user_command_handler define o que o dispositivo deve fazer quando recebe um comando.
      • A função create_user_response_handler cria uma resposta a ser enviada ao hub IoT quando um comando é executado com êxito. Você pode vê-la no portal. Se essa função não for fornecida, uma resposta genérica será enviada ao serviço.
    • Usa execute_property_listener para escutar atualizações de propriedade.

    • Inicia o envio de telemetria usando send_telemetry. O código de exemplo usa um loop para chamar três funções de envio de telemetria. Cada uma é chamada a cada oito segundos

    • Desabilita todos os ouvintes e tarefas e sai do loop quando você pressiona Q ou q.

Em Configurar um ambiente, você criou quatro variáveis de ambiente para configurar o exemplo e usar o DPS (Serviço de Provisionamento de Dispositivos) para conectar-se ao hub IoT:

  • IOTHUB_DEVICE_SECURITY_TYPE com o valor DPS
  • IOTHUB_DEVICE_DPS_ID_SCOPE com a ID de escopo do DPS.
  • IOTHUB_DEVICE_DPS_DEVICE_ID com o valor my-pnp-device.
  • IOTHUB_DEVICE_DPS_DEVICE_KEY com a chave primária de registro.
  • IOTHUB_DEVICE_DPS_ENDPOINT com o valor global.azure-devices-provisioning.net.

Para saber mais sobre a configuração do exemplo, confira o leiame de exemplo.

Use o seguinte comando para executar a amostra:

python temp_controller_with_thermostats.py

O dispositivo de exemplo envia mensagens de telemetria em intervalos de alguns segundos para o hub IoT.

Você vê a saída a seguir, que indica que o dispositivo está enviando dados telemétricos para o hub e agora está pronto para receber comandos e atualizações de propriedade.

Mensagens de confirmação do dispositivo

Mantenha o exemplo em execução enquanto você conclui as próximas etapas.

Usar o Azure IoT Explorer para validar o código

Após iniciar o exemplo de cliente do dispositivo, use a ferramenta Azure IoT Explorer para verificar se ele está funcionando.

  1. Abra o Explorador de IoT do Azure.

  2. Na página Hubs IoT, se você ainda não tiver adicionado uma conexão ao seu Hub IoT, selecione + Adicionar conexão. Insira a cadeia de conexão para o Hub IoT que você criou anteriormente e selecione Salvar.

  3. Na página Configurações de IoT Plug and Play, selecione + Adicionar > Pasta local e selecione a pasta local modelos em que você salvou os arquivos de modelo.

  4. Na página Hubs IoT, clique no nome do hub com o qual você deseja trabalhar. Você verá uma lista de dispositivos registrados no Hub IoT.

  5. Clique na ID do dispositivo do dispositivo que você criou anteriormente.

  6. O menu à esquerda mostra os diferentes tipos de informações disponíveis para o dispositivo.

  7. Selecione Componentes IoT Plug and Play para ver as informações de modelo do seu dispositivo.

  8. Você pode ver os vários componentes do dispositivo. O componente padrão e quaisquer componentes extras. Selecione um componente com o qual trabalhar.

  9. Selecione a página Telemetria e escolha Iniciar para ver os dados telemétricos que o dispositivo está enviando para esse componente.

  10. Selecione a página Propriedades (somente leitura) para ver as propriedades somente leitura relatadas para esse componente.

  11. Selecione a página Propriedades (graváveis) para ver as propriedades graváveis que podem ser atualizadas para esse componente.

  12. Selecione uma propriedade pelo respectivo nome, insira um novo valor para ela e selecione Atualizar o valor desejado.

  13. Para que o novo valor apareça, selecione o botão Atualizar.

  14. Selecione a página Comandos para ver todos os comandos para esse componente.

  15. Selecione o comando que você deseja testar e defina o parâmetro correspondente, se houver. Selecione Enviar comando para chamar o comando no dispositivo. É possível ver que o dispositivo responde ao comando na janela de prompt de comando em que o código de exemplo está sendo executado.

Limpar os recursos

Se planeja continuar com mais artigos para desenvolvedores de dispositivos, guarde e use novamente os recursos usados nesse artigo. Caso contrário, exclua os recursos criados neste artigo para evitar mais encargos.

Você pode excluir o hub e o dispositivo registrado ao mesmo tempo excluindo o grupo de recursos inteiro com o comando da CLI do Azure a seguir. Não use esse comando se esses recursos estiverem compartilhando um grupo de recursos com outros recursos que você desejar manter.

az group delete --name <YourResourceGroupName>

Para excluir apenas o hub IoT, execute o seguinte comando usando a CLI do Azure:

az iot hub delete --name <YourIoTHubName>

Para excluir apenas a identidade do dispositivo registrada no hub IoT, execute o seguinte comando usando a CLI do Azure:

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

Talvez você também queira remover os arquivos de exemplo clonados do seu computador de desenvolvimento.

Próximas etapas

Neste tutorial, você aprendeu a conectar um dispositivo IoT Plug and Play com componentes a um hub IoT. Para saber mais sobre os modelos de dispositivos IoT Plug and Play, confira: