MR e Azure 313: serviço Hub IoTMR and Azure 313: IoT Hub Service

Observação

Os tutoriais do Mixed Reality Academy foram projetados com o HoloLens (1ª geração) e os headsets imersivos de realidade misturada em mente.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Dessa forma, achamos que é importante continuar disponibilizando esses tutoriais para os desenvolvedores que ainda buscam obter diretrizes para o desenvolvimento visando esses dispositivos.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Esses tutoriais não serão atualizados com os conjuntos de ferramentas mais recentes nem com as interações usadas para o HoloLens 2.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Eles serão mantidos para continuar funcionando nos dispositivos compatíveis.They will be maintained to continue working on the supported devices. Haverá uma nova série de tutoriais que serão publicados no futuro, que demonstrarão como desenvolver para o HoloLens 2.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Esse aviso será atualizado com um link para esses tutoriais quando eles forem postados.This notice will be updated with a link to those tutorials when they are posted.

resultado do curso

Neste curso, você aprenderá a implementar um serviço de Hub IOT do Azure em uma máquina virtual que executa o sistema operacional Ubuntu 16,4.In this course, you will learn how to implement an Azure IoT Hub Service on a virtual machine running the Ubuntu 16.4 operating system. Um aplicativo de funções do Azure será usado para receber mensagens de sua VM do Ubuntu e armazenar o resultado em um serviço tabela do Azure.An Azure Function App will then be used to receive messages from your Ubuntu VM, and store the result within an Azure Table Service. Você poderá exibir esses dados usando Power bi em fone de ouvido Microsoft HoloLens ou IMERSIVA (VR).You will then be able to view this data using Power BI on Microsoft HoloLens or immersive (VR) headset.

O conteúdo deste curso é aplicável a IOT Edge dispositivos, no entanto, para fins deste curso, o foco estará em um ambiente de máquina virtual, para que o acesso a um dispositivo de borda físico não seja necessário.The content of this course is applicable to IoT Edge devices, though for the purpose of this course, the focus will be on a virtual machine environment, so that access to a physical Edge device is not necessary.

Ao concluir este curso, você aprenderá a:By completing this course, you will learn to:

  • Implante um módulo IOT Edge em uma máquina virtual (Ubuntu 16 os), que representará seu dispositivo IOT.Deploy an IoT Edge module to a Virtual Machine (Ubuntu 16 OS), which will represent your IoT device.
  • Adicione um modelo do Azure visão personalizada Tensorflow ao módulo de borda, com código que analisará as imagens armazenadas no contêiner.Add an Azure Custom Vision Tensorflow Model to the Edge module, with code that will analyze images stored in the container.
  • Configure o módulo para enviar a mensagem de resultado de análise de volta para o serviço do Hub IOT.Set up the module to send the analysis result message back to your IoT Hub Service.
  • Use uma aplicativo de funções do Azure para armazenar a mensagem em uma tabela do Azure.Use an Azure Function App to store the message within an Azure Table.
  • Configure Power bi para coletar a mensagem armazenada e criar um relatório.Set up Power BI to collect the stored message and create a report.
  • Visualize os dados da mensagem de IoT dentro do Power bi.Visualize your IoT message data within Power BI.

Os serviços que serão usados incluem:The Services you will use include:

  • O Hub IOT do Azure é um serviço Microsoft Azure que permite aos desenvolvedores conectar, monitorar e gerenciar ativos de IOT.Azure IoT Hub is a Microsoft Azure Service which allows developers to connect, monitor, and manage, IoT assets. Para obter mais informações, visite a página de serviço do Hub IOT do Azure.For more information, visit the Azure IoT Hub Service page.

  • O registro de contêiner do Azure é um serviço Microsoft Azure que permite aos desenvolvedores armazenar imagens de contêiner para vários tipos de contêineres.Azure Container Registry is a Microsoft Azure Service which allows developers to store container images, for various types of containers. Para obter mais informações, visite a página de serviço do registro de contêiner do Azure.For more information, visit the Azure Container Registry Service page.

  • O azure aplicativo de funções é um serviço Microsoft Azure, que permite aos desenvolvedores executar pequenas partes de código, ' Functions ', no Azure.Azure Function App is a Microsoft Azure Service, which allows developers to run small pieces of code, 'functions', in Azure. Isso fornece uma maneira de delegar trabalho para a nuvem, em vez de seu aplicativo local, que pode ter muitos benefícios.This provides a way to delegate work to the cloud, rather than your local application, which can have many benefits. O Azure Functions dá suporte a várias linguagens de desenvolvimento, incluindo C # , F # , Node.js, Java e php.Azure Functions supports several development languages, including C#, F#, Node.js, Java, and PHP. Para obter mais informações, visite a página Azure Functions.For more information, visit the Azure Functions page.

  • Armazenamento do Azure: as tabelas são um serviço Microsoft Azure, que permite aos desenvolvedores armazenar dados estruturados, não SQL, na nuvem, tornando-os facilmente acessíveis em qualquer lugar.Azure Storage: Tables is a Microsoft Azure Service, which allows developers to store structured, non-SQL, data in the cloud, making it easily accessible anywhere. O serviço apresenta um design sem esquema, permitindo a evolução das tabelas conforme necessário e, portanto, é muito flexível.The Service boasts a schema-less design, allowing for the evolution of tables as needed, and thus is very flexible. Para obter mais informações, visite a página tabelas do AzureFor more information, visit the Azure Tables page

Este curso ensinará a você como configurar e usar o serviço do Hub IoT e, em seguida, Visualizar uma resposta fornecida por um dispositivo.This course will teach you how to setup and use the IoT Hub Service, and then visualize a response provided by a device. Será necessário aplicar esses conceitos a uma configuração de serviço do Hub IoT personalizada, que você pode estar criando.It will be up to you to apply these concepts to a custom IoT Hub Service setup, which you might be building.

Suporte a dispositivosDevice support

CursoCourse HoloLensHoloLens Headsets imersivosImmersive headsets
MR e Azure 313: serviço Hub IoTMR and Azure 313: IoT Hub Service ✔️✔️ ✔️✔️

Pré-requisitosPrerequisites

Para obter os pré-requisitos mais atualizados para o desenvolvimento com realidade misturada, incluindo com o Microsoft HoloLens, visite o artigo instalar as ferramentas .For the most up-to-date prerequisites for developing with mixed reality, including with the Microsoft HoloLens, visit the Install the tools article.

Observação

Este tutorial foi projetado para desenvolvedores que têm experiência básica com o Python.This tutorial is designed for developers who have basic experience with Python. Além disso, lembre-se de que os pré-requisitos e as instruções escritas neste documento representam o que foi testado e verificado no momento da gravação (julho de 2018).Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (July 2018). Você está livre para usar o software mais recente, conforme listado no artigo instalar as ferramentas , embora não seja recomendável que as informações neste curso correspondam perfeitamente ao que você encontrará em softwares mais recentes do que os listados abaixo.You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you will find in newer software than that listed below.

O hardware e o software a seguir são necessários:The following hardware and software is required:

  • Atualização dos criadores de outono do Windows 10 (ou posterior), modo de desenvolvedor habilitadoWindows 10 Fall Creators Update (or later), Developer Mode enabled

    Aviso

    Você não pode executar uma máquina virtual usando o Hyper-V no Windows 10 Home Edition.You cannot run a Virtual Machine using Hyper-V on Windows 10 Home Edition.

  • SDK do Windows 10 (versão mais recente)Windows 10 SDK (latest version)

  • Um HoloLens, modo de desenvolvedor habilitadoA HoloLens, Developer Mode enabled

  • Visual Studio 2017.15.4 (usado somente para acessar o Azure cloud Explorer)Visual Studio 2017.15.4 (Only used to access the Azure Cloud Explorer)

  • Acesso à Internet para o Azure e para o serviço Hub IoT.Internet Access for Azure, and for IoT Hub Service. Para obter mais informações, siga este link para a página de serviço do Hub IOTFor more information, please follow this link to IoT Hub Service page

  • Um modelo de aprendizado de máquina.A machine learning model. Se você não tiver seu próprio modelo pronto para usar, poderá usar o modelo fornecido com este curso.If you do not have your own ready to use model, you can use the model provided with this course.

  • Software Hyper-V habilitado em seu computador de desenvolvimento do Windows 10.Hyper-V software enabled on your Windows 10 development machine.

  • Uma máquina virtual executando o Ubuntu (16,4 ou 18,4), em execução em seu computador de desenvolvimento ou, como alternativa, você pode usar um computador separado executando o Linux (Ubuntu 16,4 ou 18,4).A Virtual Machine running Ubuntu (16.4 or 18.4), running on your development machine or alternatively you can use a separate computer running Linux (Ubuntu 16.4 or 18.4). Você pode encontrar mais informações sobre como criar uma VM no Windows usando o Hyper-V no capítulo "antes de começar". (https://docs.microsoft.com/virtualization/hyper-v-on-windows/quick-start/quick-create-virtual-machine).You can find more information on how to create a VM on Windows using Hyper-V in the "Before you Start" chapter.(https://docs.microsoft.com/virtualization/hyper-v-on-windows/quick-start/quick-create-virtual-machine).

Antes de começarBefore you start

  1. Configure e teste seu HoloLens.Set up and test your HoloLens. Se você precisar de suporte para configurar seu HoloLens, visite o artigo configuração do hololens.If you need support setting up your HoloLens, make sure to visit the HoloLens setup article.
  2. É uma boa ideia executar a calibragem e o ajuste do sensor ao começar a desenvolver um novo aplicativo do HoloLens (às vezes, ele pode ajudar a executar essas tarefas para cada usuário).It is a good idea to perform Calibration and Sensor Tuning when beginning developing a new HoloLens app (sometimes it can help to perform those tasks for each user).

Para obter ajuda sobre calibragem, siga este link para o artigo Calibration do HoloLens.For help on Calibration, please follow this link to the HoloLens Calibration article.

Para obter ajuda sobre o ajuste do sensor, siga este link para o artigo de ajuste do sensor do HoloLens.For help on Sensor Tuning, please follow this link to the HoloLens Sensor Tuning article.

  1. Configure sua máquina virtual Ubuntu usando o Hyper-V.Set up your Ubuntu Virtual Machine using Hyper-V. Os recursos a seguir ajudarão você com o processo.The following resources will help you with the process.

    1. Primeiro, siga este link para baixar o ISO 16.04.4 LTS (Xenial Xerus).First, follow this link to download the Ubuntu 16.04.4 LTS (Xenial Xerus) ISO. Selecione a imagem da área de trabalho do PC de 64 bits (amd64).Select the 64-bit PC (AMD64) desktop image.
    2. Verifique se o Hyper-V está habilitado em seu computador com Windows 10.Make sure Hyper-V is enabled on your Windows 10 machine. Você pode seguir este link para obter orientação sobre como instalar e habilitar o Hyper-V no Windows 10.You can follow this link for guidance on installing and enabling Hyper-V on Windows 10.
    3. Inicie o Hyper-V e crie uma nova VM Ubuntu.Start Hyper-V and create a new Ubuntu VM. Você pode seguir este link para obter um guia passo a passo sobre como criar uma VM com o Hyper-V.You can follow this link for a step by step guide on how to create a VM with Hyper-V. Quando solicitado a "instalar um sistema operacional de um arquivo de imagem inicializável", selecione a ISO do Ubuntu que você baixou anteriormente.When requested to "Install an operating system from a bootable image file", select the Ubuntu ISO you have download earlier.

    Observação

    Não é recomendável usar a criação rápida do Hyper-V .Using Hyper-V Quick Create is not suggested.

Capítulo 1 – recuperar o modelo de Visão PersonalizadaChapter 1 - Retrieve the Custom Vision model

Com este curso, você terá acesso a um modelo de visão personalizada predefinido que detecta teclados e mouses de imagens.With this course you will have access to a pre-built Custom Vision model that detects keyboards and mice from images. Se você usar isso, vá para o capítulo 2.If you use this, proceed to Chapter 2.

No entanto, você pode seguir estas etapas se desejar usar seu próprio modelo de Visão Personalizada:However, you can follow these steps if you wish to use your own Custom Vision model:

  1. Em seu projeto de visão personalizada , vá para a guia desempenho .In your Custom Vision Project go to the Performance tab.

    Aviso

    Seu modelo deve usar um domínio compacto para exportar o modelo.Your model must use a compact domain, to export the model. Você pode alterar o domínio de modelos nas configurações do seu projeto.You can change your models domain in the settings for your project.

    guia desempenho

  2. Selecione a iteração que você deseja exportar e clique em Exportar.Select the Iteration you want to export and click on Export. Uma folha será exibida.A blade will appear.

    folha de exportação

  3. Na folha, clique em arquivo do Docker.In the blade click Docker File.

    selecionar Docker

  4. Clique em Linux no menu suspenso e, em seguida, clique em baixar.Click Linux in the drop-down menu and then click on Download.

    Clique em baixar

  5. Descompacte o conteúdo.Unzip the content. Você vai usá-lo mais tarde neste curso.You will use it later in this course.

Capítulo 2-o serviço de registro de contêinerChapter 2 - The Container Registry Service

O serviço de registro de contêiner é o repositório usado para hospedar seus contêineres.The Container Registry Service is the repository used to host your containers.

O serviço do Hub IOT que você criará e usará neste curso, se refere ao serviço de registro de contêiner para obter os contêineres a serem implantados em seu dispositivo de borda.The IoT Hub Service that you will build and use in this course, refers to Container Registry Service to obtain the containers to deploy in your Edge Device.

  1. Primeiro, siga este link para o portal do Azuree faça logon com suas credenciais.First, follow this link to the Azure Portal, and login with your credentials.

  2. Vá para criar um recurso e procure registro de contêiner.Go to Create a resource and look for Container Registry.

    registro de contêiner

  3. Clique em criar.Click on Create.

  4. Defina os parâmetros de instalação do serviço:Set the Service setup parameters:

    1. Insira um nome para seu projeto, neste exemplo, seu chamado IoTCRegistry.Insert a name for your project, In this example its called IoTCRegistry.

    2. Escolha um grupo de recursos ou crie um novo.Choose a Resource Group or create a new one. Um grupo de recursos fornece uma maneira de monitorar, controlar o acesso, provisionar e gerenciar a cobrança de uma coleção de ativos do Azure.A resource group provides a way to monitor, control access, provision, and manage, billing for a collection of Azure assets. É recomendável manter todos os serviços do Azure associados a um único projeto (por exemplo, esses cursos) em um grupo de recursos comum).It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

    3. Defina o local do serviço.Set the location of the Service.

    4. Defina usuário administrador para habilitar.Set Admin user to Enable.

    5. Defina SKU como básico.Set SKU to Basic.

  5. Clique em criar e aguarde até que os serviços sejam criados.Click Create and wait for the Services to be created.

  6. Depois que a notificação for exibida informando sobre a criação bem-sucedida do registro de contêiner, clique em ir para o recurso a ser redirecionado para sua página de serviço.Once the notification pops up informing you of the successful creation of the Container Registry, click on Go to resource to be redirected to your Service page.

  7. Na página Serviço de registro de contêiner , clique em chaves de acesso.In the Container Registry Service page, click on Access keys.

  8. Tome nota (você pode usar o bloco de notas) dos seguintes parâmetros:Take note (you could use your Notepad) of the following parameters:

    1. Servidor de logonLogin Server
    2. Nome de usuárioUsername
    3. SenhaPassword

Capítulo 3-o serviço do Hub IoTChapter 3 - The IoT Hub Service

Agora, você começará a criação e a configuração do seu serviço de Hub IOT.Now you will begin the creation and setup of your IoT Hub Service.

  1. Se ainda não estiver conectado, faça logon no portal do Azure.If not already signed in, log into the Azure Portal.

  2. Depois de conectado, clique em criar um recurso no canto superior esquerdo e procure Hub IOT e clique em Enter.Once logged in, click on Create a resource in the top left corner, and search for IoT Hub, and click Enter.

Pesquisar conta de armazenamento

  1. A nova página fornecerá uma descrição do serviço de conta de armazenamento .The new page will provide a description of the Storage account Service. Na parte inferior esquerda desse prompt, clique no botão criar para criar uma instância desse serviço.At the bottom left of this prompt, click the Create button, to create an instance of this Service.

    criar instância de armazenamento

  2. Depois de clicar em criar, um painel será exibido:Once you have clicked on Create, a panel will appear:

    1. Escolha um grupo de recursos ou crie um novo.Choose a Resource Group or create a new one. Um grupo de recursos fornece uma maneira de monitorar, controlar o acesso, provisionar e gerenciar a cobrança de uma coleção de ativos do Azure.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. É recomendável manter todos os serviços do Azure associados a um único projeto (por exemplo, esses cursos) em um grupo de recursos comum).It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

      Se você quiser ler mais sobre grupos de recursos do Azure, siga este link sobre como gerenciar um grupo de recursos.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    2. Selecione um local apropriado (use o mesmo local em todos os serviços criados neste curso).Select an appropriate Location (Use the same location across all the Services you create in this course).

    3. Insira o nome desejado para esta instância de serviço.Insert your desired Name for this Service instance.

  3. Na parte inferior da página, clique em Avançar: tamanho e escala.On the bottom of the page click on Next: Size and scale.

    criar instância de armazenamento

  4. Nesta página, selecione seu preço e camada de escala (se esta for sua primeira instância de serviço do Hub IOT, uma camada gratuita deverá estar disponível para você).In this page, select your Pricing and scale tier (if this is your first IoT Hub Service instance, a free tier should be available to you).

  5. Clique em examinar + criar.Click on Review + Create.

    criar instância de armazenamento

  6. Examine suas configurações e clique em criar.Review your settings and click on Create.

    criar instância de armazenamento

  7. Depois que a notificação for exibida informando sobre a criação bem-sucedida do serviço do Hub IOT , clique em ir para o recurso a ser redirecionado para sua página de serviço.Once the notification pops up informing you of the successful creation of the IoT Hub Service, click on Go to resource to be redirected to your Service page.

    criar instância de armazenamento

  8. Role o painel lateral à esquerda até ver o Gerenciamento de dispositivo automático, clique em IOT Edge.Scroll the side panel on the left until you see Automatic Device Management, the click on IoT Edge.

    criar instância de armazenamento

  9. Na janela que aparece à direita, clique em adicionar IOT Edge dispositivo.In the window that appears to the right, click on Add IoT Edge Device. Uma folha será exibida à direita.A blade will appear to the right.

  10. Na folha, forneça ao novo dispositivo uma ID de dispositivo (um nome de sua escolha).In the blade, provide your new device a Device ID (a name of your choice). Em seguida, clique em Salvar.Then, click Save. As chaves primária e secundária serão geradas automaticamente, se você tiver a geração automática de tiques.The Primary and Secondary Keys will auto generate, if you have Auto Generate ticked.

    criar instância de armazenamento

  11. Você navegará de volta para a seção dispositivos IOT Edge , em que o novo dispositivo será listado.You will navigate back to the IoT Edge Devices section, where your new device will be listed. Clique em seu novo dispositivo (descrito em vermelho na imagem abaixo).Click on your new device (outlined in red in the below image).

    criar instância de armazenamento

  12. Na página de detalhes do dispositivo que aparece, faça uma cópia da cadeia de conexão (chave primária).On the Device Details page that appears, take a copy of the Connection String (primary key).

    criar instância de armazenamento

  13. Volte para o painel à esquerda e clique em políticas de acesso compartilhado para abri-lo.Go back to the panel on the left, and click Shared access policies, to open it.

  14. Na página exibida, clique em iothubowner e uma folha será exibida à direita da tela.On the page that appears, click iothubowner, and a blade will appear to the right of the screen.

  15. Tome nota (no bloco de notas) da cadeia de conexão (chave primária) para usar posteriormente ao definir a cadeia de conexão para o dispositivo.Take note (on your Notepad) of the Connection string (primary key), for later use when setting the Connection String to your device.

    criar instância de armazenamento

Capítulo 4-Configurando o ambiente de desenvolvimentoChapter 4 - Setting up the development environment

Para criar e implantar módulos para borda do Hub IOT, você precisará dos seguintes componentes instalados em seu computador de desenvolvimento executando o Windows 10:In order to create and deploy modules for IoT Hub Edge, you will require the following components installed on your development machine running Windows 10:

  1. Docker for Windows, ele solicitará que você crie uma conta para ser capaz de baixar.Docker for Windows, it will ask you to create an account to be able to download.

    baixar o Docker para Windowsdownload docker for windows

    Importante

    O Docker requer Windows 10 pro, Enterprise 14393 ou Windows Server 2016 RTM para ser executado.Docker requires Windows 10 PRO, Enterprise 14393, or Windows Server 2016 RTM, to run. Se você estiver executando outras versões do Windows 10, poderá tentar instalar o Docker usando a caixa de Ferramentas do Docker.If you are running other versions of Windows 10, you can try installing Docker using the Docker Toolbox.

  2. Python 3,6.Python 3.6.

    baixar o Python 3,6download python 3.6

  3. Visual Studio Code (também conhecido como vs Code).Visual Studio Code (also known as VS Code).

    baixar VS Codedownload VS Code

Depois de instalar o software mencionado acima, será necessário reiniciar o computador.After installing the software mentioned above, you will need to restart your machine.

Capítulo 5-Configurando o ambiente do UbuntuChapter 5 - Setting up the Ubuntu environment

Agora você pode passar para a configuração de seu dispositivo que executa o sistema operacional Ubuntu.Now you can move on to setting up your device running Ubuntu OS. Siga as etapas abaixo para instalar o software necessário, para implantar seus contêineres no seu quadro:Follow the steps below, to install the necessary software, to deploy your containers on your board:

Importante

Você sempre deve preceder os comandos de terminal com sudo para executar como usuário administrador.You should always precede the terminal commands with sudo to run as admin user. ,i.e:

sudo docker \<option> \<command> \<argument>
  1. Abra o terminal do Ubuntu e use o seguinte comando para instalar o Pip:Open the Ubuntu Terminal, and use the following command to install pip:

    [! Dica] você pode abrir o terminal muito facilmente usando o atalho de teclado: Ctrl + Alt + T.[!HINT] You can open Terminal very easily through using the keyboard shortcut: Ctrl + Alt + T.

        sudo apt-get install python-pip
    
  2. Ao longo deste capítulo, você pode ser solicitado, por terminal, por permissão para usar o armazenamento do dispositivo e, para inserir y/n (Sim ou não), digite ' y ' e pressione a tecla Enter , para aceitar.Throughout this Chapter, you may be prompted, by Terminal, for permission to use your device storage, and for you to input y/n (yes or no), type 'y', and then press the Enter key, to accept.

  3. Depois que esse comando for concluído, use o seguinte comando para instalar a ondulação:Once that command has completed, use the following command to install curl:

        sudo apt install curl
    
  4. Depois que o Pip e a ondulação forem instalados, use o seguinte comando para instalar o IOT Edge Runtime, que é necessário para implantar e controlar os módulos no seu quadro:Once pip and curl are installed, use the following command to install the IoT Edge runtime, this is necessary to deploy and control the modules on your board:

        curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > ./microsoft-prod.list
    
        sudo cp ./microsoft-prod.list /etc/apt/sources.list.d/
    
        curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    
        sudo cp ./microsoft.gpg /etc/apt/trusted.gpg.d/
    
        sudo apt-get update
    
        sudo apt-get install moby-engine
    
        sudo apt-get install moby-cli
    
        sudo apt-get update
    
        sudo apt-get install iotedge
    
  5. Neste ponto, você será solicitado a abrir o arquivo de configuração de tempo de execução, para inserir a cadeia de conexão do dispositivo, que você anotou (no bloco de notas), ao criar o serviço de Hub IOT (na etapa 14, do capítulo 3).At this point you will be prompted to open up the runtime config file, to insert the Device Connection String, that you noted down (in your Notepad), when creating the IoT Hub Service (at step 14, of Chapter 3). Execute a seguinte linha no terminal para abrir esse arquivo:Run the following line on the terminal to open that file:

        sudo nano /etc/iotedge/config.yaml
    
  6. O arquivo config. YAML será exibido, pronto para você editar:The config.yaml file will be displayed, ready for you to edit:

    Aviso

    Quando esse arquivo é aberto, pode ser um pouco confuso.When this file opens, it may be somewhat confusing. Você será o texto editando esse arquivo, dentro do próprio terminal .You will be text editing this file, within the Terminal itself.

    1. Use as teclas de direção do teclado para rolar para baixo (você precisará rolar uma pequena maneira) para chegar à linha que contém ":Use the arrow keys on your keyboard to scroll down (you will need to scroll down a little way), to reach the line containing":

      "<ADD DEVICE CONNECTION STRING HERE>"."<ADD DEVICE CONNECTION STRING HERE>".

    2. Substitua a linha, incluindo os colchetes, pela cadeia de conexão do dispositivo que você anotou anteriormente.Substitute line, including the brackets, with the Device Connection String you have noted earlier.

  7. Com a cadeia de conexão em vigor, no teclado, pressione as teclas Ctrl-X para salvar o arquivo.With your Connection String in place, on your keyboard, press the Ctrl-X keys to save the file. Ele solicitará que você confirme digitando Y. Em seguida, pressione a tecla Enter para confirmar.It will ask you to confirm by typing Y. Then, press the Enter key, to confirm. Você voltará para o terminal normal.You will go back to the regular Terminal.

  8. Depois que todos os comandos forem executados com êxito, você terá instalado o IOT Edge Runtime.Once these commands have all run successfully, you will have installed the IoT Edge Runtime. Depois de inicializado, o tempo de execução começará por conta própria toda vez que o dispositivo for ligado e ficará em segundo plano, aguardando que os módulos sejam implantados do serviço do Hub IOT.Once initialized, the runtime will start on its own every time the device is powered up, and will sit in the background, waiting for modules to be deployed from the IoT Hub Service.

  9. Execute a seguinte linha de comando para inicializar o tempo de execução de IOT Edge:Run the following command line to initialize the IoT Edge Runtime:

        sudo systemctl restart iotedge
    

    Importante

    Se você fizer alterações no arquivo. YAML ou na configuração acima, será necessário executar a linha de reinicialização acima novamente, dentro do terminal.If you make changes to your .yaml file, or the above setup, you will need to run the above restart line again, within Terminal.

  10. Verifique o status do tempo de execução do IOT Edge executando a seguinte linha de comando.Check the IoT Edge Runtime status by running the following command line. O tempo de execução deve aparecer com o status ativo (em execução) em texto verde.The runtime should appear with the status active (running) in green text.

        sudo systemctl status iotedge
    
  11. Pressione as teclas Ctrl-C para sair da página status.Press the Ctrl-C keys, to exit the status page. Você pode verificar se o tempo de execução de IOT Edge está extraindo os contêineres corretamente digitando o seguinte comando:You can verify that the IoT Edge Runtime is pulling the containers correctly by typing the following command:

        sudo docker ps
    
  12. Uma lista com dois (2) contêineres deve aparecer.A list with two (2) containers should appear. Esses são os módulos padrão criados automaticamente pelo serviço de Hub IoT (edgeAgent e edgeHub).These are the default modules that are automatically created by the IoT Hub Service (edgeAgent and edgeHub). Depois de criar e implantar seus próprios módulos, eles serão exibidos nessa lista, sob os padrões.Once you create and deploy your own modules, they will appear in this list, underneath the default ones.

Capítulo 6-instalar as extensõesChapter 6 - Install the extensions

Importante

Os próximos capítulos (6-9) devem ser executados em seu computador com Windows 10.The next few Chapters (6-9) are to be performed on your Windows 10 machine.

  1. Abra vs Code.Open VS Code.

  2. Clique no botão extensões (quadrado) na barra à esquerda de vs Code, para abrir o painel extensões.Click on the Extensions (square) button on the left bar of VS Code, to open the Extensions panel.

  3. Procure e instale as seguintes extensões (conforme mostrado na imagem abaixo):Search for, and install, the following extensions (as shown in the image below):

    1. Azure IoT EdgeAzure IoT Edge
    2. Kit de Ferramentas do Azure IoTAzure IoT Toolkit
    3. DockerDocker

    Criar seu contêiner

  4. Depois que as extensões forem instaladas, feche e abra novamente VS Code.Once the extensions are installed, close and re-open VS Code.

  5. Com vs Code abrir mais uma vez, navegue para Exibir > terminal integrado.With VS Code open once more, navigate to View > Integrated terminal.

  6. Agora, você instalará o CookieCutter.You will now install Cookiecutter. No terminal, execute o seguinte comando bash:In the terminal run the following bash command:

        pip install --upgrade --user cookiecutter
    

    [! Dica] se você tiver problemas com este comando:[!HINT] If you have trouble with this command:

    1. Reinicie VS Code e/ou seu computador.Restart VS Code, and/ or your computer.
    2. Pode ser necessário alternar o terminal de vs Code para aquele que você esteve usando para instalar o Python, ou seja, o PowerShell (especialmente caso o ambiente do Python já tenha sido instalado em seu computador).It might be necessary to switch the VS Code Terminal to the one you have been using to install Python, i.e. Powershell (especially in case the Python environment was already installed on your machine). Com o terminal aberto, você encontrará o menu suspenso no lado direito do terminal.With the Terminal open, you will find the drop down menu on the right side of the Terminal. Criar seu contêinerCreate your container
    3. Verifique se o caminho de instalação do Python foi adicionado como variável de ambiente em seu computador.Make sure the Python installation path is added as Environment Variable on your machine. CookieCutter deve fazer parte do mesmo caminho de local.Cookiecutter should be part of the same location path. Siga este link para obter mais informações sobre variáveis de ambiente,Please follow this link for more information on Environment Variables,
  7. Depois que o CookieCutter terminar de instalar, você deverá reiniciar o computador para que o CookieCutter seja reconhecido como um comando, no ambiente do sistema.Once Cookiecutter has finished installing, you should restart your machine, so that Cookiecutter is recognized as a command, within your System's environment.

Capítulo 7-criar sua solução de contêinerChapter 7 - Create your container solution

Neste ponto, você precisa criar o contêiner, com o módulo, para ser enviado por push para o registro de contêiner.At this point, you need to create the container, with the module, to be pushed into the Container Registry. Depois de enviar o contêiner por push, você usará o serviço de borda do Hub IOT para implantá-lo em seu dispositivo, que está executando o tempo de execução de IOT Edge.Once you have pushed your container, you will use the IoT Hub Edge Service to deploy it to your device, which is running the IoT Edge runtime.

  1. Em vs Code, clique em Exibir > paleta de comandos.From VS Code, click View > Command palette.

  2. Na paleta, pesquise e execute Azure IOT Edge: nova solução do IOT Edge.In the palette, search and run Azure IoT Edge: New Iot Edge Solution.

  3. Navegue até um local onde você deseja criar sua solução.Browse into a location where you want to create your solution. Pressione a tecla Enter para aceitar o local.Press the Enter key, to accept the location.

  4. Dê um nome à sua solução.Give a name to your solution. Pressione a tecla Enter para confirmar o nome fornecido.Press the Enter key, to confirm your provided name.

  5. Agora, você será solicitado a escolher a estrutura de modelo para sua solução.Now you will be prompted to choose the template framework for your solution. Clique em módulo python.Click Python Module. Pressione a tecla Enter para confirmar essa escolha.Press the Enter key, to confirm this choice.

  6. Dê um nome ao seu módulo.Give a name to your module. Pressione a tecla Enter para confirmar o nome do seu módulo.Press the Enter key, to confirm the name of your module. Certifique-se de anotar (com o bloco de notas) do nome do módulo, pois ele será usado posteriormente.Make sure to take a note (with your Notepad) of the module name, as it is used later.

  7. Você observará que um endereço de repositório de imagem do Docker predefinido aparecerá na paleta.You will notice a pre-built Docker Image Repository address will appear on the palette. Ele se parecerá com:It will look like:

    localhost: 5000/-o nome do seu módulo-.localhost:5000/-THE NAME OF YOUR MODULE-.

  8. Exclua localhost: 5000 e, em seu lugar, insira o endereço do servidor de logon do registro de contêiner , que você anotou ao criar o serviço de registro de contêiner (na etapa 8, do capítulo 2).Delete localhost:5000, and in its place insert the Container Registry Login Server address, which you noted when creating the Container Registry Service (in step 8, of Chapter 2). Pressione a tecla Enter para confirmar o endereço.Press the Enter key, to confirm the address.

  9. Neste ponto, a solução que contém o modelo para seu módulo python será criada e sua estrutura será exibida na guia explorar, de vs Code, no lado esquerdo da tela.At this point, the solution containing the template for your Python module will be created and its structure will be displayed in the Explore Tab, of VS Code, on the left side of the screen. Se a guia explorar não estiver aberta, você poderá abri-la clicando no botão superior, na barra à esquerda.If the Explore Tab is not open, you can open it by clicking the top-most button, in the bar on the left.

    Criar seu contêiner

  10. A última etapa deste capítulo é clicar e abrir o arquivo. env, de dentro da guia explorar e adicionar o nome de usuário e a senha do registro de contêiner .The last step for this Chapter, is to click and open the .env file, from within the Explore Tab, and add your Container Registry username and password. Esse arquivo é ignorado pelo git, mas na criação do contêiner, o definirá as credenciais para acessar o serviço de registro de contêiner.This file is ignored by git, but on building the container, will set the credentials to access the Container Registry Service.

    Criar seu contêiner

Capítulo 8-editando sua solução de contêinerChapter 8 - Editing your container solution

Agora você vai concluir a solução de contêiner, atualizando os seguintes arquivos:You will now complete the container solution, by updating the following files:

  • script de Python Main . py .main.py python script.
  • requirements.txt.requirements.txt.
  • deployment.template.jsem.deployment.template.json.
  • Dockerfile. AMD64Dockerfile.amd64

Em seguida, você criará a pasta imagens , usada pelo script Python para verificar se há imagens para corresponder ao seu modelo de visão personalizada.You will then create the images folder, used by the python script to check for images to match against your Custom Vision model. Por fim, você adicionará o arquivo labels.txt , para ajudar a ler seu modelo e o arquivo Model. PB , que é o seu modelo.Lastly, you will add the labels.txt file, to help read your model, and the model.pb file, which is your model.

  1. Com VS Code aberto, navegue até a pasta do módulo e procure o script chamado Main . py.With VS Code open, navigate to your module folder, and look for the script called main.py. Clique duas vezes para abri-lo.Double-click to open it.

  2. Exclua o conteúdo do arquivo e insira o seguinte código:Delete the content of the file and insert the following code:

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license. See LICENSE file in the project root for
    # full license information.
    
    import random
    import sched, time
    import sys
    import iothub_client
    from iothub_client import IoTHubModuleClient, IoTHubClientError, IoTHubTransportProvider
    from iothub_client import IoTHubMessage, IoTHubMessageDispositionResult, IoTHubError
    import json
    import os
    import tensorflow as tf
    import os
    from PIL import Image
    import numpy as np
    import cv2
    
    # messageTimeout - the maximum time in milliseconds until a message times out.
    # The timeout period starts at IoTHubModuleClient.send_event_async.
    # By default, messages do not expire.
    MESSAGE_TIMEOUT = 10000
    
    # global counters
    RECEIVE_CALLBACKS = 0
    SEND_CALLBACKS = 0
    
    TEMPERATURE_THRESHOLD = 25
    TWIN_CALLBACKS = 0
    
    # Choose HTTP, AMQP or MQTT as transport protocol.  Currently only MQTT is supported.
    PROTOCOL = IoTHubTransportProvider.MQTT
    
    
    # Callback received when the message that we're forwarding is processed.
    def send_confirmation_callback(message, result, user_context):
        global SEND_CALLBACKS
        print ( "Confirmation[%d] received for message with result = %s" % (user_context, result) )
        map_properties = message.properties()
        key_value_pair = map_properties.get_internals()
        print ( "    Properties: %s" % key_value_pair )
        SEND_CALLBACKS += 1
        print ( "    Total calls confirmed: %d" % SEND_CALLBACKS )
    
    
    def convert_to_opencv(image):
        # RGB -> BGR conversion is performed as well.
        r,g,b = np.array(image).T
        opencv_image = np.array([b,g,r]).transpose()
        return opencv_image
    
    def crop_center(img,cropx,cropy):
        h, w = img.shape[:2]
        startx = w//2-(cropx//2)
        starty = h//2-(cropy//2)
        return img[starty:starty+cropy, startx:startx+cropx]
    
    def resize_down_to_1600_max_dim(image):
        h, w = image.shape[:2]
        if (h < 1600 and w < 1600):
            return image
    
        new_size = (1600 * w // h, 1600) if (h > w) else (1600, 1600 * h // w)
        return cv2.resize(image, new_size, interpolation = cv2.INTER_LINEAR)
    
    def resize_to_256_square(image):
        h, w = image.shape[:2]
        return cv2.resize(image, (256, 256), interpolation = cv2.INTER_LINEAR)
    
    def update_orientation(image):
        exif_orientation_tag = 0x0112
        if hasattr(image, '_getexif'):
            exif = image._getexif()
            if (exif != None and exif_orientation_tag in exif):
                orientation = exif.get(exif_orientation_tag, 1)
                # orientation is 1 based, shift to zero based and flip/transpose based on 0-based values
                orientation -= 1
                if orientation >= 4:
                    image = image.transpose(Image.TRANSPOSE)
                if orientation == 2 or orientation == 3 or orientation == 6 or orientation == 7:
                    image = image.transpose(Image.FLIP_TOP_BOTTOM)
                if orientation == 1 or orientation == 2 or orientation == 5 or orientation == 6:
                    image = image.transpose(Image.FLIP_LEFT_RIGHT)
        return image
    
    
    def analyse(hubManager):
    
        messages_sent = 0;
    
        while True:
            #def send_message():
            print ("Load the model into the project")
            # These names are part of the model and cannot be changed.
            output_layer = 'loss:0'
            input_node = 'Placeholder:0'
    
            graph_def = tf.GraphDef()
            labels = []
    
            labels_filename = "labels.txt"
            filename = "model.pb"
    
            # Import the TF graph
            with tf.gfile.FastGFile(filename, 'rb') as f:
                graph_def.ParseFromString(f.read())
                tf.import_graph_def(graph_def, name='')
    
            # Create a list of labels
            with open(labels_filename, 'rt') as lf:
                for l in lf:
                    labels.append(l.strip())
            print ("Model loaded into the project")
    
            results_dic = dict()
    
            # create the JSON to be sent as a message
            json_message = ''
    
            # Iterate through images 
            print ("List of images to analyse:")
            for file in os.listdir('images'):
                print(file)
    
                image = Image.open("images/" + file)
    
                # Update orientation based on EXIF tags, if the file has orientation info.
                image = update_orientation(image)
    
                # Convert to OpenCV format
                image = convert_to_opencv(image)
    
                # If the image has either w or h greater than 1600 we resize it down respecting
                # aspect ratio such that the largest dimension is 1600
                image = resize_down_to_1600_max_dim(image)
    
                # We next get the largest center square
                h, w = image.shape[:2]
                min_dim = min(w,h)
                max_square_image = crop_center(image, min_dim, min_dim)
    
                # Resize that square down to 256x256
                augmented_image = resize_to_256_square(max_square_image)
    
                # The compact models have a network size of 227x227, the model requires this size.
                network_input_size = 227
    
                # Crop the center for the specified network_input_Size
                augmented_image = crop_center(augmented_image, network_input_size, network_input_size)
    
                try:
                    with tf.Session() as sess:     
                        prob_tensor = sess.graph.get_tensor_by_name(output_layer)
                        predictions, = sess.run(prob_tensor, {input_node: [augmented_image] })
                except Exception as identifier:
                    print ("Identifier error: ", identifier)
    
                print ("Print the highest probability label")
                highest_probability_index = np.argmax(predictions)
                print('FINAL RESULT! Classified as: ' + labels[highest_probability_index])
    
                l = labels[highest_probability_index]
    
                results_dic[file] = l
    
                # Or you can print out all of the results mapping labels to probabilities.
                label_index = 0
                for p in predictions:
                    truncated_probablity = np.float64(round(p,8))
                    print (labels[label_index], truncated_probablity)
                    label_index += 1
    
            print("Results dictionary")
            print(results_dic)
    
            json_message = json.dumps(results_dic)
            print("Json result")
            print(json_message)
    
            # Initialize a new message
            message = IoTHubMessage(bytearray(json_message, 'utf8'))
    
            hubManager.send_event_to_output("output1", message, 0)
    
            messages_sent += 1
            print("Message sent! - Total: " + str(messages_sent))      
            print('----------------------------')
    
            # This is the wait time before repeating the analysis
            # Currently set to 10 seconds
            time.sleep(10)
    
    
    class HubManager(object):
    
        def __init__(
                self,
                protocol=IoTHubTransportProvider.MQTT):
            self.client_protocol = protocol
            self.client = IoTHubModuleClient()
            self.client.create_from_environment(protocol)
    
            # set the time until a message times out
            self.client.set_option("messageTimeout", MESSAGE_TIMEOUT)
    
        # Forwards the message received onto the next stage in the process.
        def forward_event_to_output(self, outputQueueName, event, send_context):
            self.client.send_event_async(
                outputQueueName, event, send_confirmation_callback, send_context)
    
        def send_event_to_output(self, outputQueueName, event, send_context):
            self.client.send_event_async(outputQueueName, event, send_confirmation_callback, send_context)
    
    def main(protocol):
        try:
            hub_manager = HubManager(protocol)
            analyse(hub_manager)
            while True:
                time.sleep(1)
    
        except IoTHubError as iothub_error:
            print ( "Unexpected error %s from IoTHub" % iothub_error )
            return
        except KeyboardInterrupt:
            print ( "IoTHubModuleClient sample stopped" )
    
    if __name__ == '__main__':
        main(PROTOCOL)
    
  3. Abra o arquivo chamado requirements.txt e substitua o conteúdo pelo seguinte:Open the file called requirements.txt, and substitute its content with the following:

    azure-iothub-device-client==1.4.0.0b3
    opencv-python==3.3.1.11
    tensorflow==1.8.0
    pillow==5.1.0
    
  4. Abra o arquivo chamado deployment.template.jsem e substitua seu conteúdo seguindo a diretriz abaixo:Open the file called deployment.template.json, and substitute its content following the below guideline:

    1. Como você terá sua própria estrutura JSON exclusiva, será necessário editá-la manualmente (em vez de copiar um exemplo).Because you will have your own, unique, JSON structure, you will need to edit it by hand (rather than copying an example). Para facilitar, use a imagem abaixo como guia.To make this easy, use the below image as a guide.

    2. Áreas que terão aparência diferente da sua, mas que não devem ser alteradas, serão realçadas como amarelos.Areas which will look different to yours, but which you should NOT change are highlighted yellow.

    3. As seções que você precisa excluir são um vermelho realçado.Sections which you need to delete, are a highlighted red.

    4. Tenha cuidado para excluir os colchetes corretos e também remova as vírgulas.Be careful to delete the correct brackets, and also remove the commas.

      Criar seu contêiner

    5. O JSON concluído deve se parecer com a imagem a seguir (no entanto, com suas diferenças exclusivas: nome de usuário/senha/módulo referências de módulo):The completed JSON should look like the following image (though, with your unique differences: username/password/module name/module references):

      Criar seu contêiner

  5. Abra o arquivo chamado Dockerfile. AMD64 e substitua seu conteúdo pelo seguinte:Open the file called Dockerfile.amd64, and substitute its content with the following:

    FROM ubuntu:xenial
    
    WORKDIR /app
    
    RUN apt-get update && \
        apt-get install -y --no-install-recommends libcurl4-openssl-dev python-pip libboost-python-dev && \
        rm -rf /var/lib/apt/lists/* 
    RUN pip install --upgrade pip
    RUN pip install setuptools
    
    COPY requirements.txt ./
    RUN pip install -r requirements.txt
    
    RUN pip install pillow
    RUN pip install numpy
    
    RUN apt-get update && apt-get install -y \ 
        pkg-config \
        python-dev \ 
        python-opencv \ 
        libopencv-dev \ 
        libav-tools  \ 
        libjpeg-dev \ 
        libpng-dev \ 
        libtiff-dev \ 
        libjasper-dev \ 
        python-numpy \ 
        python-pycurl \ 
        python-opencv
    
    
    RUN pip install opencv-python
    RUN pip install tensorflow
    RUN pip install --upgrade tensorflow
    
    COPY . .
    
    RUN useradd -ms /bin/bash moduleuser
    USER moduleuser
    
    CMD [ "python", "-u", "./main.py" ]
    
    
  6. Clique com o botão direito do mouse na pasta abaixo de módulos (ele terá o nome fornecido anteriormente; no exemplo mais abaixo, ele é chamado de pythonmodule) e clique em nova pasta.Right-click on the folder beneath modules (it will have the name you provided previously; in the example further down, it is called pythonmodule), and click on New Folder. Nomeie as imagens da pasta.Name the folder images.

  7. Dentro da pasta, adicione algumas imagens que contêm o mouse ou o teclado.Inside the folder, add some images containing mouse or keyboard. Essas serão as imagens que serão analisadas pelo modelo Tensorflow.Those will be the images that will be analyzed by the Tensorflow model.

    Aviso

    Se você estiver usando seu próprio modelo, será necessário alterar isso para refletir seus próprios dados de modelos.If you are using your own model, you will need to change this to reflect your own models data.

  8. Agora, você precisará recuperar os arquivos labels.txt e Model. PB da pasta modelo, que você baixou anteriormente (ou criado a partir de seu próprio serviço de visão personalizada), no capítulo 1.You will now need to retrieve the labels.txt and model.pb files from the model folder, which you previous downloaded (or created from your own Custom Vision Service), in Chapter 1. Quando você tiver os arquivos, coloque-os dentro de sua solução, juntamente com os outros arquivos.Once you have the files, place them within your solution, alongside the other files. O resultado final deve ser semelhante à imagem abaixo:The final result should look like the image below:

    Criar seu contêiner

Capítulo 9-empacotar a solução como um contêinerChapter 9 - Package the solution as a container

  1. Agora você está pronto para "empacotar" seus arquivos como um contêiner e enviá-los por push para o registro de contêiner do Azure.You are now ready to "package" your files as a container and push it to your Azure Container Registry. Em vs Code, abra o terminal integrado (Exibir > terminal integrado ou Ctrl + ` ) e use a linha a seguir para fazer logon no Docker (substitua os valores do comando pelas credenciais do seu registro de contêiner do Azure (ACR)):Within VS Code, open the Integrated Terminal (View > Integrated Terminal or Ctrl+`), and use the following line to login to Docker (substitute the values of the command with the credentials of your Azure Container Registry (ACR)):

        docker login -u <ACR username> -p <ACR password> <ACR login server>
    
  2. Clique com o botão direito do mouse no arquivo deployment.template.jsem e clique em Compilar IOT Edge solução.Right-click on the file deployment.template.json, and click Build IoT Edge Solution. Esse processo de compilação leva algum tempo (dependendo do seu dispositivo), portanto, esteja preparado para aguardar.This build process takes quite some time (depending on your device), so be prepared to wait. Após a conclusão do processo de compilação, um deployment.jsno arquivo será criado dentro de uma nova pasta chamada config.After the build process finishes, a deployment.json file will have been created inside a new folder called config.

    criar implantação

  3. Abra a paleta de comandos novamente e pesquise Azure: entrar.Open the Command Palette again, and search for Azure: Sign In. Siga os prompts usando suas credenciais de conta do Azure; VS Code fornecerá uma opção para copiar e abrir, que copiará o código do dispositivo que você precisará em breve e abrirá o navegador da Web padrão.Follow the prompts using your Azure Account credentials; VS Code will provide you with an option to Copy and Open, which will copy the device code you will soon need, and open your default web browser. Quando solicitado, Cole o código do dispositivo para autenticar seu computador.When asked, paste the device code, to authenticate your machine.

    copiar e abrir

  4. Depois de conectado, você observará, no lado inferior do painel explorar , uma nova seção chamada dispositivos do Hub IOT do Azure.Once signed in you will notice, on the bottom side of the Explore panel, a new section called Azure IoT Hub Devices. Clique nesta seção para expandi-la.Click this section to expand it.

    dispositivo do Edge

  5. Se o dispositivo não estiver aqui, será necessário clicar com o botão direito do mouse em dispositivos do Hub IOT do Azure e clicar em Definir cadeia de conexão do Hub IOT.If your device is not here, you will need to right-click Azure IoT Hub Devices, and then click Set IoT Hub Connection String. Em seguida, você verá que a paleta de comandos (na parte superior de vs Code) solicitará que você insira sua cadeia de conexão.You will then see that the Command Palette (at the top of VS Code), will prompt you to input your Connection String. Essa é a cadeia de conexão que você anotou no final do capítulo 3.This is the Connection String you noted down at the end of Chapter 3. Pressione a tecla Enter , depois de ter copiado a cadeia de caracteres no.Press the Enter key, once you have copied the string in.

  6. Seu dispositivo deve ser carregado e exibido.Your device should load, and appear. Clique com o botão direito do mouse no nome do dispositivo e clique em criar implantação para um único dispositivo.Right-click on the device name, and then click, Create Deployment for Single Device.

    criar implantação

  7. Você obterá um prompt do Explorador de arquivos , no qual poderá navegar para a pasta config e, em seguida, selecionar o deployment.jsno arquivo.You will get a File Explorer prompt, where you can navigate to the config folder, and then select the deployment.json file. Com esse arquivo selecionado, clique no botão selecionar manifesto de implantação de borda .With that file selected, click the Select Edge Deployment Manifest button.

    criar implantação

  8. Neste ponto, você forneceu ao seu serviço de Hub IOT o manifesto para implantar seu contêiner, como um módulo, do registro de contêiner do Azure, implantando-o efetivamente em seu dispositivo.At this point you have provided your IoT Hub Service with the manifest for it to deploy your container, as a module, from your Azure Container Registry, effectively deploying it to your device.

  9. Para exibir as mensagens enviadas do seu dispositivo para o Hub IoT, clique com o botão direito do mouse novamente no nome do dispositivo na seção dispositivos do Hub IOT do Azure , no painel Gerenciador e clique em Iniciar Monitoramento de mensagem D2C.To view the messages sent from your device to the IoT Hub, right-click again on your device name in the Azure IoT Hub Devices section, in the Explorer panel, and click on Start Monitoring D2C Message. As mensagens enviadas do seu dispositivo devem aparecer no terminal do VS.The messages sent from your device should appear in the VS Terminal. Seja paciente, pois isso pode levar algum tempo.Be patient, as this may take some time. Consulte o próximo capítulo para depuração e verificando se a implantação foi bem-sucedida.See the next Chapter for debugging, and checking if deployment was successful.

Este módulo agora fará a iteração entre as imagens na pasta imagens e as analisará, com cada iteração.This module will now iterate between the images in the images folder and analyze them, with each iteration. Isso é, obviamente, apenas uma demonstração de como obter o modelo básico de aprendizado de máquina para trabalhar em um ambiente de dispositivo IoT Edge.This is obviously just a demonstration of how to get the basic machine learning model to work in an IoT Edge device environment.

Para expandir a funcionalidade deste exemplo, você pode proceder de várias maneiras.To expand the functionality of this example, you could proceed in several ways. Uma maneira pode ser incluir algum código no contêiner, que captura fotos de uma webcam conectada ao dispositivo e salva as imagens na pasta imagens.One way could be including some code in the container, that captures photos from a webcam that is connected to the device, and saves the images in the images folder.

Outra maneira seria copiar as imagens do dispositivo IoT para o contêiner.Another way could be copying the images from the IoT device into the container. Uma maneira prática de fazer isso é executar o seguinte comando no terminal do dispositivo IoT (talvez um aplicativo pequeno possa fazer o trabalho, se desejar automatizar o processo).A practical way to do that is to run the following command in the IoT device Terminal (perhaps a small app could do the job, if you wished to automate the process). Você pode testar esse comando executando-o manualmente do local da pasta onde os arquivos são armazenados:You can test this command by running it manually from the folder location where your files are stored:

    sudo docker cp <filename> <modulename>:/app/images/<a name of your choice>

Capítulo 10-Depurando o tempo de execução de IoT EdgeChapter 10 - Debugging the IoT Edge Runtime

Veja a seguir uma lista de linhas de comando e dicas para ajudá-lo a monitorar e depurar a atividade de mensagens do tempo de execução de IOT Edge, do seu dispositivo Ubuntu.The following are a list of command lines, and tips, to help you monitor and debug the messaging activity of the IoT Edge Runtime, from your Ubuntu device.

  • Verifique o status do tempo de execução do IOT Edge executando a seguinte linha de comando:Check the IoT Edge Runtime status by running the following command line:

        sudo systemctl status iotedge
    

    Observação

    Lembre-se de pressionar Ctrl + C para concluir a exibição do status.Remember to press Ctrl + C, to finish viewing the status.

  • Liste os contêineres que estão implantados no momento.List the containers that are currently deployed. Se o serviço Hub IOT implantou os contêineres com êxito, eles serão exibidos executando a seguinte linha de comando:If the IoT Hub Service has deployed the containers successfully, they will be displayed by running the following command line:

        sudo iotedge list
    

    OuOr

        sudo docker ps
    

    Observação

    O acima é uma boa maneira de verificar se o módulo foi implantado com êxito, como aparecerá na lista; caso contrário, você verá apenas o EdgeHub e o edgeAgent.The above is a good way to check whether your module has been deployed successfully, as it will appear in the list; you will otherwise only see the edgeHub and edgeAgent.

  • Para exibir os logs de código de um contêiner, execute a seguinte linha de comando:To display the code logs of a container, run the following command line:

        journalctl -u iotedge
    

Comandos úteis para gerenciar o tempo de execução de IoT Edge:Useful commands to manage the IoT Edge Runtime:

  • Para excluir todos os contêineres no host:To delete all containers in the host:

        sudo docker rm -f $(sudo docker ps -aq)
    
  • Para interromper o tempo de execução de IOT Edge:To stop the IoT Edge Runtime:

        sudo systemctl stop iotedge
    

Capítulo 11 – criar serviço de tabelaChapter 11 - Create Table Service

Navegue de volta para o portal do Azure, no qual você criará um serviço de tabelas do Azure, criando um recurso de armazenamento.Navigate back to your Azure Portal, where you will create an Azure Tables Service, by creating a Storage resource.

  1. Se ainda não estiver conectado, faça logon no portal do Azure.If not already signed in, log into the Azure Portal.

  2. Depois de conectado, clique em criar um recurso, no canto superior esquerdo, procure a conta de armazenamento e pressione a tecla Enter para iniciar a pesquisa.Once logged in, click on Create a resource, in the top left corner, and search for Storage account, and press the Enter key, to start the search.

  3. Depois de ter aparecido, clique em conta de armazenamento-BLOB, arquivo, tabela, fila na lista.Once it has appeared, click Storage account - blob, file, table, queue from the list.

    Pesquisar conta de armazenamento

  4. A nova página fornecerá uma descrição do serviço de conta de armazenamento .The new page will provide a description of the Storage account Service. Na parte inferior esquerda desse prompt, clique no botão criar para criar uma instância desse serviço.At the bottom left of this prompt, click the Create button, to create an instance of this Service.

    criar instância de armazenamento

  5. Depois de clicar em criar, um painel será exibido:Once you have clicked on Create, a panel will appear:

    1. Insira o nome desejado para esta instância de serviço (deve estar em letras minúsculas).Insert your desired Name for this Service instance (must be all lowercase).

    2. Para modelo de implantação, clique em Gerenciador de recursos.For Deployment model, click Resource manager.

    3. Para tipo de conta, usando o menu suspenso, clique em armazenamento (uso geral v1).For Account kind, using the dropdown menu, click Storage (general purpose v1).

    4. Clique em um local apropriado.Click an appropriate Location.

    5. Para o menu suspenso replicação , clique em armazenamento com redundância geográfica e acesso de leitura (ra-grs).For the Replication dropdown menu, click Read-access-geo-redundant storage (RA-GRS).

    6. Para desempenho, clique em padrão.For Performance, click Standard.

    7. Na seção transferência segura necessária , clique em desabilitado.Within the Secure transfer required section, click Disabled.

    8. No menu suspenso assinatura , clique em uma assinatura apropriada.From the Subscription dropdown menu, click an appropriate subscription.

    9. Escolha um grupo de recursos ou crie um novo.Choose a Resource Group or create a new one. Um grupo de recursos fornece uma maneira de monitorar, controlar o acesso, provisionar e gerenciar a cobrança de uma coleção de ativos do Azure.A resource group provides a way to monitor, control access, provision, and manage, billing for a collection of Azure assets. É recomendável manter todos os serviços do Azure associados a um único projeto (por exemplo, esses cursos) em um grupo de recursos comum).It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

      Se você quiser ler mais sobre grupos de recursos do Azure, siga este link sobre como gerenciar um grupo de recursos.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    10. Deixe as redes virtuais como desabilitadas, se essa for uma opção para você.Leave Virtual networks as Disabled, if this is an option for you.

    11. Clique em Criar.Click Create.

      preencher detalhes do armazenamento

  6. Depois de clicar em criar, você precisará aguardar até que o serviço seja criado, isso pode levar um minuto.Once you have clicked on Create, you will have to wait for the Service to be created, this might take a minute.

  7. Uma notificação será exibida no portal assim que a instância do serviço for criada.A notification will appear in the Portal once the Service instance is created. Clique nas notificações para explorar sua nova instância de serviço.Click on the notifications to explore your new Service instance.

    Nova notificação de armazenamento

  8. Clique no botão ir para recurso na notificação e você será levado para a página de visão geral da nova instância do serviço de armazenamento.Click the Go to resource button in the notification, and you will be taken to your new Storage Service instance overview page.

    ir para o recurso

  9. Na página Visão geral, no lado direito, clique em tabelas.From the overview page, to the right-hand side, click Tables.

    tabelas

  10. O painel à direita será alterado para mostrar as informações do serviço tabela , onde você precisa adicionar uma nova tabela.The panel on the right will change to show the Table Service information, wherein you need to add a new table. Para fazer isso, clique no botão + tabela no canto superior esquerdo.Do this by clicking the + Table button to the top-left corner.

    Abrir tabelas

  11. Uma nova página será mostrada, onde você precisa inserir um nome de tabela.A new page will be shown, wherein you need to enter a Table name. Esse é o nome que você usará para se referir aos dados em seu aplicativo em capítulos posteriores (criando Aplicativo de funções e Power BI).This is the name you will use to refer to the data in your application in later Chapters (creating Function App, and Power BI). Insira IoTMessages como o nome (você pode escolher o seu próprio, apenas lembre-se dele quando usado mais tarde neste documento) e clique em OK.Insert IoTMessages as the name (you can choose your own, just remember it when used later in this document) and click OK.

  12. Depois que a nova tabela tiver sido criada, você poderá vê-la na página de serviço tabela (na parte inferior).Once the new table has been created, you will be able to see it within the Table Service page (at the bottom).

    nova tabela criada

  13. Agora, clique em chaves de acesso e faça uma cópia do nome e da chave da conta de armazenamento (usando o bloco de notas). você usará esses valores posteriormente neste curso, ao criar o aplicativo de funções do Azure.Now click on Access keys and take a copy of the Storage account name and Key (using your Notepad), you will use these values later in this course, when creating the Azure Function App.

    nova tabela criada

  14. Usando o painel à esquerda novamente, role até a seção serviço tabela e clique em tabelas (ou procure tabelas, em portais mais recentes) e faça uma cópia da URL da tabela (usando o bloco de notas).Using the panel on the left again, scroll to the Table Service section, and click Tables (or Browse Tables, in newer Portals) and take a copy of the Table URL (using your Notepad). Você usará esse valor posteriormente neste curso, ao vincular sua tabela ao seu aplicativo Power bi .You will use this value later in this course, when linking your table to your Power BI application.

    nova tabela criada

Capítulo 12 – concluindo a tabela do AzureChapter 12 - Completing the Azure Table

Agora que a conta de armazenamento do serviço de tabela foi configurada, é hora de adicionar dados a ela, que será usada para armazenar e recuperar informações.Now that your Table Service storage account has been setup, it is time to add data to it, which will be used to store and retrieve information. A edição das tabelas pode ser feita por meio do Visual Studio.The editing of your Tables can be done through Visual Studio.

  1. Abra o Visual Studio (não Visual Studio Code).Open Visual Studio (not Visual Studio Code).

  2. No menu, clique em Exibir > Cloud Explorer.From the menu, click View > Cloud Explorer.

    abrir o Cloud Explorer

  3. O Cloud Explorer será aberto como um item encaixado (seja paciente, pois o carregamento pode levar tempo).The Cloud Explorer will open as a docked item (be patient, as loading may take time).

    Aviso

    Se a assinatura que você usou para criar suas contas de armazenamento não estiver visível, verifique se você tem:If the subscription you used to create your Storage Accounts is not visible, ensure that you have:

    • Conectado à mesma conta que você usou para o portal do Azure.Logged in to the same account as the one you used for the Azure Portal.

    • Selecione sua assinatura na página de gerenciamento de conta (talvez seja necessário aplicar um filtro de suas configurações de conta):Selected your subscription from the Account Management page (you may need to apply a filter from your account settings):

      Localizar assinatura

  4. Os serviços de nuvem do Azure serão mostrados.Your Azure cloud Services will be shown. Localize contas de armazenamento e clique na seta à esquerda dela para expandir suas contas.Find Storage Accounts and click the arrow to the left of that to expand your accounts.

    abrir contas de armazenamento

  5. Uma vez expandido, sua conta de armazenamento recém-criada deve estar disponível.Once expanded, your newly created Storage account should be available. Clique na seta à esquerda do armazenamento e, depois de expandida, localize as tabelas e clique na seta ao lado dela para revelar a tabela que você criou no último capítulo.Click the arrow to the left of your storage, and then once that is expanded, find Tables and click the arrow next to that, to reveal the Table you created in the last Chapter. Clique duas vezes em sua tabela.Double-click your Table.

  6. Sua tabela será aberta no centro da janela do Visual Studio.Your table will be opened in the center of your Visual Studio window. Clique no ícone de tabela com o + (mais) nele.Click the table icon with the + (plus) on it.

    Adicionar nova tabela

  7. Uma janela será exibida solicitando que você adicione a entidade.A window will appear prompting for you to Add Entity. Você criará apenas uma entidade, embora ela terá três propriedades.You will create only one entity, though it will have three properties. Você observará que PartitionKey e RowKey já foram fornecidos, pois eles são usados pela tabela para localizar seus dados.You will notice that PartitionKey and RowKey are already provided, as these are used by the table to find your data.

    partição e chave de linha

  8. Atualize os seguintes valores:Update the following values:

    • Nome: PartitionKey, valor: PK_IoTMessagesName: PartitionKey, Value: PK_IoTMessages

    • Nome: RowKey, valor: RK_1_IoTMessagesName: RowKey, Value: RK_1_IoTMessages

  9. Em seguida, clique em Adicionar Propriedade (na parte inferior esquerda da janela Adicionar entidade ) e adicione a seguinte propriedade:Then, click Add property (to the lower left of the Add Entity window) and add the following property:

    • MessageContent, como uma cadeia de caracteres, deixe o valor vazio.MessageContent, as a string, leave the Value empty.
  10. Sua tabela deve corresponder à que está na imagem abaixo:Your table should match the one in the image below:

    Adicionar valores corretos

    Observação

    O motivo pelo qual a entidade tem o número 1 na chave de linha, é porque você talvez queira adicionar mais mensagens, caso deseje fazer experiências com este curso.The reason why the entity has the number 1 in the row key, is because you might want to add more messages, should you desire to experiment further with this course.

  11. Clique em OK quando terminar.Click OK when you are finished. Sua tabela agora está pronta para ser usada.Your table is now ready to be used.

Capítulo 13-criar uma Aplicativo de funções do AzureChapter 13 - Create an Azure Function App

Agora é hora de criar uma aplicativo de funções do Azure, que será chamada pelo serviço de Hub IOT para armazenar as mensagens de dispositivo IOT Edge no serviço tabela , que você criou no capítulo anterior.It is now time to create an Azure Function App, which will be called by the IoT Hub Service to store the IoT Edge device messages in the Table Service, which you created in the previous Chapter.

Primeiro, você precisa criar um arquivo que permitirá que o Azure function carregue as bibliotecas necessárias.First, you need to create a file that will allow your Azure Function to load the libraries you need.

  1. Abra o bloco de notas (pressione a tecla Windows e digite notepad).Open Notepad (press the Windows Key, and type notepad).

    abrir bloco de notas

  2. Com o bloco de notas aberto, insira a estrutura JSON abaixo dele.With Notepad open, insert the JSON structure below into it. Depois de fazer isso, salve-o na área de trabalho como project.jsem.Once you have done that, save it on your desktop as project.json. Esse arquivo define as bibliotecas que sua função usará.This file defines the libraries your function will use. Se você usou o NuGet, ele parecerá familiar.If you have used NuGet, it will look familiar.

    Aviso

    É importante que a nomenclatura esteja correta; Verifique se ele não tem uma extensão de arquivo. txt .It is important that the naming is correct; ensure it does NOT have a .txt file extension. Consulte abaixo para obter referência:See below for reference:

    Salvar JSON

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "9.2.0"
        }
        }
    }
    }
    
  3. Faça logon no portal do Azure.Log in to the Azure Portal.

  4. Depois de fazer logon, clique em criar um recurso no canto superior esquerdo e procure aplicativo de funções e pressione a tecla Enter para pesquisar.Once you are logged in, click on Create a resource in the top left corner, and search for Function App, and press the Enter key, to search. Clique em aplicativo de funções nos resultados para abrir um novo painel.Click Function App from the results, to open a new panel.

    Pesquisar o aplicativo de funções

  5. O novo painel fornecerá uma descrição do serviço de aplicativo de funções .The new panel will provide a description of the Function App Service. Na parte inferior esquerda deste painel, clique no botão criar para criar uma associação com esse serviço.At the bottom left of this panel, click the Create button, to create an association with this Service.

    instância do aplicativo de funções

  6. Depois de clicar em criar, preencha o seguinte:Once you have clicked on Create, fill in the following:

    1. Para nome do aplicativo, insira o nome desejado para esta instância de serviço.For App name, insert your desired name for this Service instance.

    2. Selecione uma Assinatura.Select a Subscription.

    3. Selecione o tipo de preço apropriado para você, se esta for a primeira vez que criar um serviço de aplicativo de funções, uma camada gratuita deverá estar disponível para você.Select the pricing tier appropriate for you, if this is the first time creating a Function App Service, a free tier should be available to you.

    4. Escolha um grupo de recursos ou crie um novo.Choose a Resource Group or create a new one. Um grupo de recursos fornece uma maneira de monitorar, controlar o acesso, provisionar e gerenciar a cobrança de uma coleção de ativos do Azure.A resource group provides a way to monitor, control access, provision, and manage, billing for a collection of Azure assets. É recomendável manter todos os serviços do Azure associados a um único projeto (por exemplo, esses cursos) em um grupo de recursos comum).It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

      Se você quiser ler mais sobre grupos de recursos do Azure, siga este link sobre como gerenciar um grupo de recursos.If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. Para o sistema operacional, clique em Windows, pois essa é a plataforma pretendida.For OS, click Windows, as that is the intended platform.

    6. Selecione um plano de hospedagem (este tutorial está usando um plano de consumo.Select a Hosting Plan (this tutorial is using a Consumption Plan.

    7. Selecione um local (escolha o mesmo local do armazenamento que você criou na etapa anterior)Select a Location (choose the same location as the storage you have built in the previous step)

    8. Para a seção de armazenamento , você deve selecionar o serviço de armazenamento criado na etapa anterior.For the Storage section, you must select the Storage Service you created in the previous step.

    9. Você não precisará de Application insights neste aplicativo, portanto, fique à vontade para deixá-lo desativado.You will not need Application Insights in this app, so feel free to leave it Off.

    10. Clique em Criar.Click Create.

      criar nova instância

  7. Depois de clicar em criar, você precisará aguardar até que o serviço seja criado, isso pode levar um minuto.Once you have clicked on Create, you will have to wait for the Service to be created, this might take a minute.

  8. Uma notificação será exibida no portal assim que a instância do serviço for criada.A notification will appear in the Portal once the Service instance is created.

    Nova notificação

  9. Clique na notificação, depois que a implantação for bem-sucedida (concluída).Click on the notification, once deployment is successful (has finished).

  10. Clique no botão ir para recurso na notificação para explorar sua nova instância de serviço.Click the Go to resource button in the notification to explore your new Service instance.

    ir para o recurso

  11. No lado esquerdo do painel novo, clique no + ícone (mais) ao lado de funções, para criar uma nova função.In the left side of the new panel, click the + (plus) icon next to Functions, to create a new function.

    Adicionar nova função

  12. No painel central, a janela de criação da função será exibida.Within the central panel, the Function creation window will appear. Role para baixo e clique em função personalizada.Scroll down further, and click on Custom function.

    função personalizada

  13. Role para baixo na próxima página, até encontrar o Hub IOT (Hub de eventos) e clique nele.Scroll down the next page, until you find IoT Hub (Event Hub), then click on it.

    função personalizada

  14. Na folha Hub IOT (Hub de eventos) , defina o idioma como C# e clique em novo.In the IoT Hub (Event Hub) blade, set the Language to C# and then click on new.

    função personalizada

  15. Na janela que será exibida, verifique se Hub IOT está selecionado e se o nome do campo Hub IOT corresponde ao nome do serviço do Hub IOT que você criou anteriormente (na etapa 8, do capítulo 3).In the window that will appear, make sure that IoT Hub is selected and the name of the IoT Hub field corresponds with the name of your IoT Hub Service that you have created previously (in step 8, of Chapter 3). Em seguida, clique no botão selecionar .Then click the Select button.

    função personalizada

  16. De volta à folha Hub IOT (Hub de eventos) , clique em criar.Back on the IoT Hub (Event Hub) blade, click on Create.

    função personalizada

  17. Você será redirecionado para o editor de funções.You will be redirected to the function editor.

    função personalizada

  18. Exclua todo o código e substitua-o pelo seguinte:Delete all the code in it and replace it with the following:

    #r "Microsoft.WindowsAzure.Storage"
    #r "NewtonSoft.Json"
    
    using System;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Table;
    using Newtonsoft.Json;
    using System.Threading.Tasks;
    
    public static async Task Run(string myIoTHubMessage, TraceWriter log)
    {
        log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
    
        //RowKey of the table object to be changed
        string tableName = "IoTMessages";
        string tableURL = "https://iothubmrstorage.table.core.windows.net/IoTMessages";
    
        // If you did not name your Storage Service as suggested in the course, change the name here with the one you chose.
        string storageAccountName = "iotedgestor"; 
    
        string storageAccountKey = "<Insert your Storage Key here>";   
    
        string partitionKey = "PK_IoTMessages";
        string rowKey = "RK_1_IoTMessages";
    
        Microsoft.WindowsAzure.Storage.Auth.StorageCredentials storageCredentials =
            new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(storageAccountName, storageAccountKey);
    
        CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, true);
    
        // Create the table client.
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
    
        // Get a reference to a table named "IoTMessages"
        CloudTable messageTable = tableClient.GetTableReference(tableName);
    
        //Retrieve the table object by its RowKey
        TableOperation operation = TableOperation.Retrieve<MessageEntity>(partitionKey, rowKey);
        TableResult result = await messageTable.ExecuteAsync(operation);
    
        //Create a MessageEntity so to set its parameters
        MessageEntity messageEntity = (MessageEntity)result.Result;
    
        messageEntity.MessageContent = myIoTHubMessage;
        messageEntity.PartitionKey = partitionKey;
        messageEntity.RowKey = rowKey;
    
        //Replace the table appropriate table Entity with the value of the MessageEntity Ccass structure.
        operation = TableOperation.Replace(messageEntity);
    
        // Execute the insert operation.
        await messageTable.ExecuteAsync(operation);
    }
    
    // This MessageEntity structure which will represent a Table Entity
    public class MessageEntity : TableEntity
    {
        public string Type { get; set; }
        public string MessageContent { get; set; }   
    }
    
  19. Altere as seguintes variáveis, para que elas correspondam aos valores apropriados (tabela e valores de armazenamento , da etapa 11 e 13, respectivamente, do capítulo 11), que você encontrará em sua conta de armazenamento:Change the following variables, so that they correspond to the appropriate values (Table and Storage values, from step 11 and 13, respectively, of Chapter 11), that you will find in your Storage Account:

    • TableName, com o nome da sua tabela localizado em sua conta de armazenamento.tableName, with the name of your Table located in your Storage Account.
    • tableURL, com a URL da sua tabela localizada em sua conta de armazenamento.tableURL, with the URL of your Table located in your Storage Account.
    • storageAccountName, com o nome do valor correspondente ao nome do seu nome de conta de armazenamento .storageAccountName, with the name of the value corresponding with the name of your Storage Account name.
    • storageAccountKey, com a chave que você obteve no serviço de armazenamento que você criou anteriormente.storageAccountKey, with the Key you have obtained in the Storage Service you have created previously.

    função personalizada

  20. Com o código em vigor, clique em salvar.With the code in place, click Save.

  21. Em seguida, clique no < ícone (seta), no lado direito da página.Next, click the < (arrow) icon, on the right-hand side of the page.

    função personalizada

  22. Um painel será deslizado da direita.A panel will slide in from the right. Nesse painel, clique em carregar e um navegador de arquivos será exibido.In that panel, click Upload, and a File Browser will appear.

  23. Navegue até e clique em project.jsno arquivo, que você criou anteriormente no bloco de notas e, em seguida, clique no botão abrir .Navigate to, and click, the project.json file, which you created in Notepad previously, and then click the Open button. Esse arquivo define as bibliotecas que sua função usará.This file defines the libraries that your function will use.

    função personalizada

  24. Quando o arquivo for carregado, ele será exibido no painel à direita.When the file has uploaded, it will appear in the panel on the right. Clicar nele irá abri-lo no editor de funções .Clicking it will open it within the Function editor. Ele deve ser exatamente o mesmo que a próxima imagem.It must look exactly the same as the next image.

    função personalizada

  25. Neste ponto, seria bom testar a capacidade da sua função de armazenar a mensagem em sua tabela.At this point it would be good to test the capability of your Function to store the message on your Table. No canto superior direito da janela, clique em testar.On the top right side of the window, click on Test.

    função personalizada

  26. Insira uma mensagem no corpo da solicitação, conforme mostrado na imagem acima, e clique em executar.Insert a message on the Request body, as shown in the image above, and click on Run.

  27. A função será executada, exibindo o status do resultado (você notará o status verde 202 aceito, acima da janela de saída , o que significa que ele foi uma chamada bem-sucedida):The function will run, displaying the result status (you will notice the green Status 202 Accepted, above the Output window, which means it was a successful call):

    resultado da saída

Capítulo 14-exibir mensagens ativasChapter 14 - View active messages

Se agora você abrir o Visual Studio (não Visual Studio Code), poderá visualizar o resultado da mensagem de teste, pois ele será armazenado na área da cadeia de caracteres MessageContent .If you now open Visual Studio (not Visual Studio Code), you can visualize your test message result, as it will be stored in the MessageContent string area.

função personalizada

Com o serviço tabela e Aplicativo de funções em vigor, suas mensagens do dispositivo Ubuntu aparecerão na sua tabela IoTMessages .With the Table Service and Function App in place, your Ubuntu device messages will appear in your IoTMessages Table. Se ainda não estiver em execução, inicie o dispositivo novamente e você poderá ver as mensagens de resultado do seu dispositivo, e módulo, em sua tabela, usando o Visual Studio Cloud Explorer.If not already running, start your device again, and you will be able to see the result messages from your device, and module, within your Table, through using Visual Studio Cloud Explorer.

Visualizar dados

Capítulo 15-instalação do Power BIChapter 15 - Power BI Setup

Para visualizar os dados de seu dispositivo IOT, você irá configurar Power bi (versão da área de trabalho) para coletar os dados do serviço tabela que você acabou de criar.To visualize the data from your IOT device you will setup Power BI (desktop version), to collect the data from the Table Service, which you just created. A versão do HoloLens do Power bi usará esses dados para visualizar o resultado.The HoloLens version of Power BI will then use that data to visualize the result.

  1. Abra o Microsoft Store no Windows 10 e procure Power bi desktop.Open the Microsoft Store on Windows 10 and search for Power BI Desktop.

    Power BI

  2. Baixe o aplicativo.Download the application. Depois de concluir o download, abra-o.Once it has finished downloading, open it.

  3. Faça logon no Power bi com sua conta do Microsoft 365.Log into Power BI with your Microsoft 365 account. Você pode ser redirecionado para um navegador, para se inscrever.You may be redirected to a browser, to sign up. Depois de se inscrever, volte para o aplicativo Power BI e entre novamente.Once you are signed up, go back to the Power BI app, and sign in again.

  4. Clique em obter dados e, em seguida, clique em mais....Click on Get Data and then click on More....

    Power BI

  5. Clique em Azure, armazenamento de tabelas do Azure e, em seguida, clique em conectar.Click Azure, Azure Table Storage, then click on Connect.

    Power BI

  6. Você será solicitado a inserir a URL da tabela que você coletou anteriormente (na etapa 13 do capítulo 11), ao criar o serviço tabela.You will be prompted to insert the Table URL that you collected earlier (in step 13 of Chapter 11), while creating your Table Service. Depois de inserir a URL, exclua a parte do caminho referente à tabela "subpasta" (que foi IoTMessages, neste curso).After inserting the URL, delete the portion of the path referring to the Table "sub-folder" (which was IoTMessages, in this course). O resultado final deve ser exibido na imagem abaixo.The final result should be as displayed in the image below. Em seguida, clique em OK.Then click on OK.

    Power BI

  7. Você será solicitado a inserir a chave de armazenamento que anotou (na etapa 11 do capítulo 11) antes de criar o armazenamento de tabela.You will be prompted to insert the Storage Key that you noted (in step 11 of Chapter 11) earlier while creating your Table Storage. Em seguida, clique em conectar.Then click on Connect.

    Power BI

  8. Um painel de navegador será exibido, marque a caixa ao lado de sua tabela e clique em carregar.A Navigator Panel will be displayed, tick the box next to your Table and click on Load.

    Power BI

  9. Sua tabela agora foi carregada em Power BI, mas ela requer uma consulta para exibir os valores nela.Your table has now been loaded on Power BI, but it requires a query to display the values in it. Para fazer isso, clique com o botão direito do mouse no nome da tabela localizado no painel campos , no lado direito da tela.To do so, right-click on the table name located in the FIELDS panel at the right side of the screen. Em seguida, clique em Editar consulta.Then click on Edit Query.

    Power BI

  10. Um Editor de Power Query será aberto como uma nova janela, exibindo a tabela.A Power Query Editor will open up as a new window, displaying your table. Clique no registro do Word na coluna conteúdo da tabela para visualizar o conteúdo armazenado.Click on the word Record within the Content column of the table, to visualize your stored content.

    Power BI

  11. Clique em na tabela, na parte superior esquerda da janela.Click on Into Table, at the top-left of the window.

    Power BI

  12. Clique em fechar & aplicar.Click on Close & Apply.

    Power BI

  13. Depois de terminar de carregar a consulta, no painel campos, no lado direito da tela, marque as caixas correspondentes ao nome e ao valor dos parâmetros para visualizar o conteúdo da coluna MessageContent .Once it has finished loading the query, within the FIELDS panel, on the right side of the screen, tick the boxes corresponding to the parameters Name and Value, to visualize the MessageContent column content.

    Power BI

  14. Clique no ícone de disco azul na parte superior esquerda da janela para salvar seu trabalho em uma pasta de sua escolha.Click on the blue disk icon at the top left of the window to save your work in a folder of your choice.

    Power BI

  15. Agora você pode clicar no botão Publicar para carregar sua tabela em seu espaço de trabalho.You can now click on the Publish button to upload your table to your Workspace. Quando solicitado, clique em meu espaço de trabalho e clique em selecionar.When prompted, click My workspace and click Select. Aguarde até que ele exiba o resultado bem-sucedido do envio.Wait for it to display the successful result of the submission.

    Power BI

    Power BI

Aviso

O capítulo a seguir é específico do HoloLens.The following Chapter is HoloLens specific. O Power BI não está disponível atualmente como um aplicativo de imersão, no entanto, você pode executar a versão da área de trabalho no portal de realidade mista do Windows (também conhecido como Cliff House), por meio do aplicativo de desktop.Power BI is not currently available as an immersive application, however you can run the desktop version in the Windows Mixed Reality Portal (aka Cliff House), through the Desktop app.

Capítulo 16-exibir dados de Power BI no HoloLensChapter 16 - Display Power BI data on HoloLens

  1. No seu HoloLens, faça logon no Microsoft Store, tocando em seu ícone na lista de aplicativos.On your HoloLens, log in to the Microsoft Store, by tapping on its icon in the applications list.

    Power BI HL

  2. Pesquise e baixe o aplicativo Power bi .Search and then download the Power BI application.

    Power BI HL

  3. Inicie o Power bi na sua lista de aplicativos.Start Power BI from your applications list.

  4. Power bi pode solicitar que você faça logon na sua conta do Microsoft 365.Power BI might ask you to login to your Microsoft 365 account.

  5. Uma vez dentro do aplicativo, o espaço de trabalho deve ser exibido por padrão, conforme mostrado na imagem abaixo.Once inside the app, the workspace should display by default as shown in the image below. Se isso não acontecer, basta clicar no ícone do espaço de trabalho no lado esquerdo da janela.If that does not happen, simply click on the workspace icon on the left side of the window.

    Power BI HL

Seu aplicativo de Hub IoT foi concluídoYour finished your IoT Hub application

Parabéns, você criou com êxito um serviço de Hub IoT, com um dispositivo de borda de máquina virtual simulado.Congratulations, you have successfully created an IoT Hub Service, with a simulated Virtual Machine Edge device. Seu dispositivo pode comunicar os resultados de um modelo de aprendizado de máquina para um serviço tabela do Azure, facilitado por um Aplicativo de funções do Azure, que é lido no Power BI e visualizado em um Microsoft HoloLens.Your device can communicate the results of a machine learning model to an Azure Table Service, facilitated by an Azure Function App, which is read into Power BI, and visualized within a Microsoft HoloLens.

Power BI

Exercícios de bônusBonus exercises

Exercício 1Exercise 1

Expanda a estrutura de mensagens armazenada na tabela e exiba-a como um grafo.Expand the messaging structure stored in the table and display it as a graph. Talvez você queira coletar mais dados e armazená-los na mesma tabela, para serem exibidos posteriormente.You might want to collect more data and store it in the same table, to be later displayed.

Exercício 2Exercise 2

Crie um módulo adicional de "captura de câmera" para ser implantado na placa IoT, para que ele possa capturar imagens por meio da câmera a ser analisada.Create an additional "camera capture" module to be deployed on the IoT board, so that it can capture images through the camera to be analyzed.