Enviando dados para a nuvem com Azure IoT Hub

Azure IoT Hub
Este post faz parte da série Aplicação de IoT com Azure IoT Hub e Toradex Colibri VF61. Leia também os outros posts da série:

O conceito de Internet das Coisas está intrinsecamente relacionado ao envio de dados para a internet e seus chamados serviços de nuvem. Pessoas do campo da eletrônica estão, a cada dia, conectando dispositivos à nuvem com maior facilidade, à medida que a evolução da tecnologia permite o uso de dispositivos eletrônicos cada vez menores e com menor consumo de energia. Ainda assim, há uma questão não respondida para muitos destes desenvolvedores da eletrônica: como transformar todos esses dados em algo útil? Porque é sobre isso que é a Internet das Coisas.

 

Há alguns exemplos de aplicações do mundo real retirados do site da Microsoft que compartilham um pouco do que a IoT pode representar: há uma empresa de elevadores usando a internet das coisas para melhorar e dar manutenção preditiva; uma empresa de automação usando IoT para obter insights a partir da cadeia de fornecimento de gás e petróleo, aliada à manutenção preditiva; e uma empresa que usa IoT para prever o comportamento de motoristas e otimizar a utilização de carros. Ao final desta série de artigos, espera-se que o leitor tenha à disposição informações e ferramentas o suficiente para implementar aplicações que gerem insights e/ou otimizem um sistema em geral - não somente um monte de dados acumulados, mas informações úteis! Aproveito a introdução deste artigo para salientar a importância do tema, que possui até uma seção dedicada aqui no Embarcados.

 

Azure é a plataforma de serviços de nuvem da Microsoft e ela oferece uma quantidade de aplicações como bancos de dados, máquinas virtuais, serviços de app, aprendizado de máquina, análise de fluxo de dados, serviços de mídia e CDN, soluções de big data, dentre muitas outras, incluindo o Hub de IoT. Por si só, a vastidão de serviços oferecidos já é um bom motivo para usar os serviços do Azure, mas a Microsoft segue um passo à frente e compara seus serviços com o Amazon Web Services para reforçar que sua solução é melhor - uma afirmação forte que somente os usuários e o tempo poderão confirmar, ou o contrário. Dentre as razões para usar seus serviços estão a segurança, a facilidade de integração e a curva de aprendizado suave.

 

O principal objetivo deste artigo é desenvolver uma aplicação para um cenário IoT (Internet das Coisas), desde a leitura de sensores em campo até a apresentação de resultados e a obtenção de business intelligence. O hardware utilizado para a coleta de dados de sensores e envio destes para a nuvem foi: um SoM Toradex Colibri VF61 + a Placa Base Iris. Esta é, portanto, uma vantagem, tendo em vista que a Toradex é um parceiro certificado do Azure IoT. A aplicação deverá obter dados de alguns sensores e enviá-los para o serviço de IoT da solução de nuvem Microsoft Azure, chamada Hub IoT do Azure. Uma vez que os dados estejam sendo recebidos na nuvem, eles podem ser processados de diversas formas por outros serviços do Microsoft Azure, seja visualizando, apresentando os dados ou obtendo insights e business intelligence. Isso é o que será feito na parte 2 desta série de artigos. Mas por enquanto o foco será em como configurar o Hub IoT do Azure e mandar mensagens para ele.

 

O cenário IoT escolhido foi o monitoramento de um carro. Para propósitos de demonstração, um carrinho de controle remoto foi instrumentado e embarcado com o SBC customizado da Toradex, citado no parágrafo anterior. Na figura 1 é possível conferir a foto do demo e na figura 2 está uma representação esquemática da aplicação desejada.

 

Azure IoT Hub e Toradex Colibri VF61: Protótipo do IoT Car
Figura 1: Protótipo do IoT Car
Azure IoT Hub e Toradex Colibri VF61: Diagrama em blocos da aplicação
Figura 2: Diagrama em blocos da aplicação

 

A tecnologia escolhida para desenvolver a aplicação do sistema embarcado Toradex foi o Node.js: um interpretador de Javascript que roda no servidor, que neste caso é a própria placa da Toradex, construído a partir do engine V8 do Chrome. Sua escolha foi baseada na disponibilidade de bibliotecas para Node providas pelo Azure IoT Hub SDKs. Deve-se levar em consideração o fato de que as SDKs do IoT Hub estão sob forte desenvolvimento, com mudanças feitas a cada lançamento (ao menos para Node). A versão dos pacotes do Azure IoT para Node sendo usada neste artigo é a versão 1.0.1.

 

A configuração deste cenário completo desde a programação do sistema embarcado até a configuração do Azure para receber dados foi dividida em três passos, descritos neste artigo:

  • Configuração do ambiente Azure;
  • Adicionando dispositivos e enviando mensagens ao IoT Hub;
  • Programação da aplicação no sistema embarcado Toradex.

 

Configuração do ambiente Azure

 

O primeiro passo necessário para começar a desenvolver o sistema é criar uma conta do Azure: é possível criar uma conta gratuita a partir do site do Azure configurada como uma versão trial de 30 dias. A partir dela, uma quantidade fixa de créditos do Azure podem ser utilizados para implementar aplicações que usem seus serviços, sem custos; além disso, o Hub de IoT tem uma categoria grátis, mesmo depois do período de trial, destinada a desenvolvimento e com recursos limitados. Para informações mais detalhadas sobre preços e o Hub de IoT em si, a página do IoT Hub pode ser acessada.

 

Após criar uma conta do Azure, é preciso configurar um Hub de IoT. Para isso, o portal do Azure deve ser acessado usando a conta recém criada e as opções +Novo > Internet das Coisas > Azure IoT Hub selecionadas. A tela de configuração para o novo Hub de IoT é mostrada na figura 3. A opção "Gratuito" deve ser selecionada em Tipo e escala de preço; um novo grupo de recursos deve ser criado no campo Grupo de recursos e a Localização aqui selecionada deverá ser igual a de outros serviços a serem implementados futuramente. Qualquer Nome pode ser escolhido e os campos Unidades de IoT Hub e Partições de dispositivo para a nuvem não podem ser editados na versão gratuita. Após clicar em criar, o serviço será implementado – e isto pode demorar alguns segundos.

 

Azure IoT Hub e Toradex Colibri VF61: Criando um Hub IoT a partir do portal do Azure
Figura 3: Criando um Hub IoT a partir do portal do Azure

 

Agora o Hub IoT deverá aparecer no Painel, isto é, a página principal do portal do Azure. Após clicar nele, uma página como a da figura 4 deve abrir: nela aparecerão algumas informações de Fundamentos, como a região do Hub IoT; uma seção de Uso que dá ao administrador do sistema um feedback sobre quantas mensagens foram enviadas de dispositivos para o serviço e o número de dispositivos registrados; e uma seção de Monitoramento na qual é plotado um gráfico com o número de mensagens recebidas em função do tempo.

 

Azure IoT Hub e Toradex Colibri VF61: Painel principal do Hub IoT
Figura 4: Painel principal do Hub IoT

 

Ainda no painel da figura 4, para obter acesso ao serviço a partir de outras aplicações, a opção Políticas de acesso compartilhado sob a aba Configurações deve ser selecionada. Na nova aba Políticas de acesso compartilhado que abrirá, há uma política chamada "iothubowner", que detém todas as permissões para este Hub IoT e ela deve ser clicada. A aba iothubowner será aberta e sua Cadeia de conexão - chave primária deve ser copiada para uso posterior: ela é a chave que permitirá o gerenciamento e monitoramento dos dispositivos conectados a este Hub IoT nos próximos passos. As abas descritas neste parágrafo para obter a cadeia de conexão são ilustradas na figura 5.

 

Azure IoT Hub e Toradex Colibri VF61: Obtendo a cadeia de conexão do iothubowner
Figura 5: Obtendo a cadeia de conexão do iothubowner

 

Adicionando dispositivos e enviando mensagens ao IoT Hub

 

Agora que tudo está configurado na nuvem, a ferramenta iothub-explorer precisa ser instalada na máquina de desenvolvimento para que dispositivos possam ser adicionados ao Hub IoT. Há outra ferramenta chamada Device Explorer disponível somente para sistemas Windows, então se este é o SO que está sendo usado na máquina de desenvolvimento, esta pode ser uma boa opção ao iothub-explorer. Uma vez que o SO usado ao longo do desenvolvimento deste artigo é o Ubuntu 14.04, eu focarei no iothub-explorer. Deve-se notar que a versão do Node instalada deve ser superior ou igual a 0.12.x (a ferramenta diz que a versão 4.x ou superior é necessária para obter todas as funcionalidades), mas no momento em que este artigo foi redigido, a ferramenta apt-get estava instalando uma versão 0.10.x. Para resolver este problema, o Node Version Manager (NVM) e, subsequentemente, a versão do Node 0.12.9 foram instalados. A partir do terminal, o iothub-explorer pode ser instalado usando o NPM (Node Package Manager):

 

Então o iothub-explorer pode ser executado com a opção "help" que mostra suas possibilidades de uso:

 

Como pode ser observado no terminal a partir do comando previamente executado, dentre as opções do iothub-explorer estão create (criar) e monitor-events (monitorar eventos). Para usar esta ferramenta, a cadeia de conexão obtida na figura 4 deve ser usada. Em primeiro lugar, um dispositivo chamado "tdx_iot_car" será criado, como ilustrado no comando abaixo. Observe que a opção --connection-string é usada para mostrar a cadeia de conexão do dispositivo (e que não deve ser confundida com a cadeia de conexão do Hub IoT). Ela deve ser copiada, uma vez que esta é a chave usada para conectar este dispositivo recém criado ao Hub IoT, habilitando a aplicação na Colibri VF61 para o envio de mensagens para o Hub IoT.

 

Programação da aplicação no sistema embarcado Toradex

 

Agora um conjunto Colibri VF61 CoM + Placa Base Iris deve ser preparado. Neste artigo foi usada uma imagem pré-compilada (Colibri_VF_LinuxConsoleImageV2.5) que pode ser baixada aqui. Instruções sobre como gravar a imagem para o módulo Colibri podem ser encontradas aqui. Também há um artigo previamente publicado aqui no Embarcados, com uma seção chamada configuração do ambiente na qual instruções mais detalhadas sobre o processo de gravação podem ser encontradas. Para instalar o Node.js, o gerenciador de pacotes NPM e o git, as instruções a seguir foram executadas no terminal da placa - esteja ciente de que este processo pode demorar alguns minutos, especialmente a instrução curl.

 

O repositório no qual estão o instalador dos pacotes e o código da aplicação em Node com relação a este artigo – send_data.js – pode ser clonado na placa. Para clonar e instalar os pacotes, os comandos a seguir devem ser executados:

 

Agora o código que envia dados para o Hub IoT pode ser executado, mas primeiramente vamos explicar alguns pontos sobre ele (salientando que mais detalhes com relação a este código serão abordados na parte 2 desta série de artigos): o protocolo HTTP está sendo usado para prover a comunicação, mas os protocolos AMQP e MQTT também são suportados; próximo à linha 10 do código, há uma variável chamada connectionString. Seu valor deve ser igual à string obtida alguns passos acima, enquanto era criado o dispositivo com o iothub-explorer:

 

Dentro do loop setInterval() diversos valores são criados aleatoriamente para envio para o Hub IoT como se fossem dados obtidos a partir de sensores, como temperatura, distância de um sensor ultrassônico, aceleração e giroscópio, algumas coordenadas GPS e a data/hora da placa. O modo como estes dados são obtidos será explicado no próximo artigo da série. A função JSON.Stringify() gera uma string dos dados codificados no formado JSON e essa string é encapsulada em um objeto Message para ser enviado. Abaixo é apresentado o exemplo de uma string encapsulada no formato JSON:

 

Caso tudo ocorra conforme o planejado, a função de callback do método sendEvent() não deverá imprimir nada para o console enquanto a aplicação é executada. O comando a seguir é executado na Colibri VF61 e mostra a mensagem de feedback que é continuamente impressa no console quando tudo está ok.

 

Como um feedback para garantir que os dados estão sendo recebidos, a seção do Hub IoT do portal do Azure deverá atualizar o número de mensagens recebidas ao longo do dia e o gráfico de monitoramento deve apresentar um spike conforme ilustrado na figura 6. Observe que pode demorar desde alguns segundos até mais de um minuto para que estas informações sejam atualizadas no portal.

 

Azure IoT Hub e Toradex Colibri VF61: Verificando no portal do Azure que os dados estão sendo recebidos
Figura 6: Verificando no portal do Azure que os dados estão sendo recebidos

 

A ferramenta iothub-explorer pode ser utilizada para ver o fluxo de dados que está entrando no Hub IoT. Para isto, a opção monitor-events deve ser utilizada em conjunto com o nome do dispositivo de interesse (device id). Observe que, para isto funcionar, a aplicação da Colibri VF61 deve estar rodando ao mesmo tempo que o iothub-explorer, enquanto para ver as estatísticas no portal do Azure não há esta necessidade. A figura 7 mostra o iothub-explorer recebendo os dados enquanto a placa os estava enviando. O comando para monitorar eventos é apresentado abaixo, antes da imagem:

Recebendo dados da placa pelo iothub-explorer
Figura 7: Recebendo dados da placa pelo iothub-explorer

 

O site do Microsoft Azure dispõe de uma gama de documentação sobre o Hub IoT à medida que mais informação é necessária para desenvolver aplicações mais complexas e/ou robustas. Há tarefas como criar um dispositivo, ou receber mensagens enviadas para o Hub IoT, que podem ser executadas programaticamente – buscar na documentação é uma boa maneira de obter mais informações sobre o assunto. Ainda, no próximo artigo o foco será no interfaceamento de alguns sensores à Colibri VF61 + Placa Base Iris e então, à medida que dados reais forem enviados para o Hub IoT, eles podem ser usados como entrada em outros serviços do Azure que geram inshights e/ou adicionam variáveis de controle à aplicação implementada.

 

Espero que este artigo introdutório sobre como unir uma solução SBC da Toradex com o serviço Hub IoT do Azure tenha ajudado e que as informações nele dispostas possam lhe ser úteis! Aproveito também para agradecer à equipe do Grupo Viceri pela exímia competência no que diz respeito ao Azure e business intelligence e, portanto, pela ajuda nestes quesitos, assim como pela parceria no desenvolvimento do projeto descrito nesta série de artigos. Até breve no próximo artigo!

Outros artigos da série

Interface com sensores e o IoT Car >>
Este post faz da série Aplicação de IoT com Azure IoT Hub e Toradex Colibri VF61. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.