Share via


Introdução à identidade do módulo e ao módulo gêmeo do Hub IoT usando o portal e o dispositivo .NET

As identidades do módulo e os módulos gêmeos são semelhantes à identidade do dispositivo e ao dispositivo gêmeo do Hub IoT do Azure, mas fornecem melhor granularidade. Enquanto que a identidade do dispositivo e o dispositivo gêmeo do Hub IoT do Azure permitem que o aplicativo de back-end configure um dispositivo e forneça visibilidade às condições do dispositivo, uma identidade do módulo e um módulo gêmeo fornecem essas funcionalidades para componentes individuais de um dispositivo. Em dispositivos compatíveis com vários componentes, como dispositivos de sistema operacional ou dispositivos de firmware, as identidades do módulo e os módulos gêmeos permitem configuração e condições isoladas para cada componente.

Observação

Os recursos descritos neste artigo estão disponíveis apenas na camada padrão do Hub IoT. Para obter mais informações sobre as camadas básica e padrão/gratuita do Hub IoT, confira Escolher a camada certa do Hub IoT para a sua solução.

Neste artigo, você aprenderá a:

  • Criar uma identidade de módulo no portal.

  • Use um SDK do dispositivo .NET para atualizar o módulo gêmeo do seu dispositivo.

Observação

Consulte os SDKs da IoT do Azure para obter mais informações sobre as ferramentas do SDK disponíveis para compilar aplicativos de dispositivo e back-end.

Pré-requisitos

Criar uma identidade de módulo no portal

Em uma identidade de dispositivo, você pode criar até 20 identidades de módulo. Para adicionar uma identidade, siga estas etapas:

  1. Em seu dispositivo existente no portal do Azure, escolha Adicionar identidade do módulo para criar sua primeira identidade do módulo.

  2. Insira o nome myFirstModule. Salve a identidade do módulo.

    Captura de tela que mostra a página 'Detalhes da Identidade do Módulo'.

    A nova identidade do módulo aparece na parte inferior da tela. Selecione-a para ver os detalhes da identidade do módulo.

    Captura de tela que mostra o menu 'Detalhes da Identidade do Módulo'.

Salve a Cadeia de conexão (chave primária). Você a usará na próxima seção para configurar seu módulo no dispositivo em um aplicativo de console.

Atualizar o módulo gêmeo usando o SDK do dispositivo .NET

Agora vamos nos comunicar com a nuvem pelo dispositivo simulado. Depois de criar uma identidade de módulo, um módulo gêmeo é implicitamente criado no Hub IoT. Nesta seção, você criará um aplicativo de console .NET em seu dispositivo simulado que atualiza as propriedades relatadas do módulo gêmeo.

Criar um projeto do Visual Studio

Para criar um aplicativo que atualiza as propriedades relatadas do módulo gêmeo, siga estas etapas:

  1. No Visual Studio, selecione Criar um novo projeto e escolha Aplicativo de console (.NET Framework) e, em seguida, selecione Avançar.

  2. Em Configurar seu novo projeto, insira UpdateModuleTwinReportedProperties como o Nome do projeto. Selecione Avançar para continuar.

    Captura de tela que mostra o pop-up 'Configurar novo projeto'.

  3. Mantenha a estrutura padrão do .NET e selecione Criar.

Instalar o SDK do dispositivo .NET do Hub IoT do Azure

A identidade do módulo e o módulo gêmeo só estão disponíveis nos SDKs do dispositivo de pré-lançamento Hub IoT. Para instalá-la, siga as etapas abaixo:

  1. No Visual Studio, abra Ferramentas>Gerenciador de Pacotes NuGet>Gerenciar Pacotes NuGet para a Solução.

  2. Selecione Procurar e, em seguida, selecione Incluir pré-lançamento. Pesquise por Microsoft.Azure.Devices.Client. Selecione a versão mais recente e instale.

    Captura de tela mostrando como instalar Microsoft.Azure.Devices.Client.

    Agora você tem acesso a todos os recursos do módulo.

Criar um aplicativo de console UpdateModuleTwinReportedProperties

Para criar seu aplicativo, execute estas etapas:

  1. Adicione as instruções using abaixo na parte superior do arquivo Program.cs :
using Microsoft.Azure.Devices.Client;
using Microsoft.Azure.Devices.Shared;
using Newtonsoft.Json;
  1. Adicione os seguintes campos à classe Program . Substitua o valor do espaço reservado pela cadeia de conexão do módulo que você salvou anteriormente.
private const string ModuleConnectionString = "<Your module connection string>";
private static ModuleClient Client = null;
  1. Adicione o seguinte método OnDesiredPropertyChanged à classe de Programa:
private static async Task OnDesiredPropertyChanged(TwinCollection desiredProperties, object userContext)
    {
        Console.WriteLine("desired property change:");
        Console.WriteLine(JsonConvert.SerializeObject(desiredProperties));
        Console.WriteLine("Sending current time as reported property");
        TwinCollection reportedProperties = new TwinCollection
        {
            ["DateTimeLastDesiredPropertyChangeReceived"] = DateTime.Now
        };

        await Client.UpdateReportedPropertiesAsync(reportedProperties).ConfigureAwait(false);
    }
  1. Por fim, substitua o método Main pelo código a seguir:
static void Main(string[] args)
{
    Microsoft.Azure.Devices.Client.TransportType transport = Microsoft.Azure.Devices.Client.TransportType.Amqp;

    try
    {
        Client = ModuleClient.CreateFromConnectionString(ModuleConnectionString, transport);
        Client.SetConnectionStatusChangesHandler(ConnectionStatusChangeHandler);
        Client.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertyChanged, null).Wait();

        Console.WriteLine("Retrieving twin");
        var twinTask = Client.GetTwinAsync();
        twinTask.Wait();
        var twin = twinTask.Result;
        Console.WriteLine(JsonConvert.SerializeObject(twin));

        Console.WriteLine("Sending app start time as reported property");
        TwinCollection reportedProperties = new TwinCollection();
        reportedProperties["DateTimeLastAppLaunch"] = DateTime.Now;

        Client.UpdateReportedPropertiesAsync(reportedProperties);
    }
    catch (AggregateException ex)
    {
        Console.WriteLine("Error in sample: {0}", ex);
    }

    Console.WriteLine("Waiting for Events.  Press enter to exit...");
    Console.ReadKey();
    Client.CloseAsync().Wait();
}

private static void ConnectionStatusChangeHandler(ConnectionStatus status, ConnectionStatusChangeReason reason)
{
    Console.WriteLine($"Status {status} changed: {reason}");
}

Você pode compilar e executar esse aplicativo usando F5.

Agora você já sabe como recuperar o módulo gêmeo e atualizar as propriedades relatadas com o protocolo AMQP.

Próximas etapas

Para continuar a introdução ao Hub IoT e explorar outros cenários de IoT, confira: