O blog da AWS

Criando o seu próprio Rastreador Veicular – Parte 2

Por Gerson Itiro Hidaka, Arquiteto de Soluções AWS Brasil

 

Introdução

O dispositivo Edge é parte importante do sistema e não poderia ficar de fora deste Blog post. Ele é responsável pela captura dos dados do GPS e a transmissão dessas informações para a nuvem. Nesta parte 2 do post vamos utilizar as técnicas de FBP (Flow Based Programming) para desenvolver a nossa aplicação de captura de dados integrado aos serviços configurados na parte 1 do Blog post, Amazon Location Service, AWS IoT Core, e AWS Lambda.

 

Mão na Massa 3: Construindo o Edge Device

O foco desta seção será a criação do protótipo do Edge Device e da criação da aplicação que irá coletar os dados do GPS USB e transformar esse dado em uma informação no formato JSON. Utilizaremos o Node-Red para criar essa aplicação.

 

Figura 1 – Diagrama da Solução (Edge Device)

 

Se você tem dúvidas de como instalar os componentes iniciais sugiro que visite os links Raspberry Pi e do Node-Red para maiores informações.

Decidimos utilizar a versão “Zero W” do Raspberry Pi por ser mais compacto e por já possuir a Wi-Fi integrada, porém ele só possui conectores do tipo Micro USB. Caso você possua outras versões do Raspberry Pi, como por exemplo o Model B, poderá utilizá-lo neste projeto.

Após a formatação e instalação do sistema operacional no SD-Card, efetuei a cópia de 2 arquivos para o cartão antes de inseri-lo no Raspberry Pi. Os arquivos são:

  • ssh: Arquivo tipo texto, sem conteúdo, ou seja, um arquivo vazio para ativar o SSH Daemon (sshd) no Raspberry Pi e permitir o acesso a ele via terminal (headless access).
  • conf: Esse é o arquivo para a configuração inicial da WiFi do Raspberry pi. Inicialmente configuro o Raspberry Pi para que ele se conecte na rede WiFi residencial e para que eu possa configurá-lo e instalar as aplicações. Após tudo configurado eu copio um segundo wpa_supplicant.conf para que ele se conecte na rede HotSpot do meu celular e assim possa utilizá-lo dentro do meu veículo.

 

Figura 2 – Raspberry Pi versão Zero W

 

Após a cópia dos arquivos inserimos o SD-Card no Raspberry Pi e efetuamos as conexões externas.

Para conectar o GPS USB que possui um conector do tipo USB-A, adquiri um conversor/adaptador “USB-A para Micro USB”. Caso você utilize alguma versão mais tradicional do Raspberry Pi, como por exemplo o modelo “B”, poderá conectar o dispositivo diretamente em uma das entradas USB.

 

Figura 3 – Raspberry Pi, GPS USB, e o Adaptador Micro USB

 

Figura 4 – Conexão do GPS na porta Micro USB do Raspberry Pi

 

A segunda entrada Micro USB será utilizada para energizar o dispositivo. Utilizarei um outro cabo “microUSB / USB-A” para conectá-lo a uma porta USB de carregamento de celular que está presente no veículo.

 Com o Hardware devidamente conectado e configurado, criamos agora o aplicativo para capturar as coordenadas de geolocalização (Longitude, Latitude e Data/Hora) e enviar os dados para o AWS IoT Core na nuvem. Para isso será necessário a instalação do Node-Red no Raspberry Pi.

 O NodeRed é um Flow Based Programming, ou seja, podemos criar uma aplicação de maneira visual e com poucas linhas de programação (utilizando a sintaxe do JavaScript). Criamos esse fluxo simples, com 7 nodes, para capturar os dados do GPS (via porta USB – serial), filtrar, converter os dados (JSON) e, no final, enviá-los para o AWS IoT Core através do MQTT Out node.

 

Figura 5 -Flow Based Programming

 

Vou listar aqui um resumo das 7 etapas. O código foi compartilhado no Github da AWS e pode ser importado e customizado para o seu NodeRed.

  1. O Serial Node é responsável pela leitura dos dados da porta serial. O dispositivo GPS USB envia uma grande quantidade de informações com a periodicidade de 1 segundo. O protocolo utilizado aqui é o NMEA.

Posicionando o Debug Node na saída do Serial Node podemos ler os dados que estão sendo enviados pelo dispositivo GPS USB no formato NMEA (RAW), como mostro na figura abaixo:

 

Figura 6 – Capturando dados da porta serial

 

  1. O Switch node será utilizado para filtrar a grande quantidade de dados enviado pelo GPS USB. As informações que preciso para o projeto estão contidas no bloco $GNGLL, portanto vamos filtrar utilizando essa string. Anexei o Debug Node na saída do Switch Node e agora todas as mensagens contém a string GNGLL.

 

Figura 7 – Utilizando o Switch Node

 

  1. O NMEA Node converte a mensagem GNGLL do formato NMEA para o formato JSON, e também, converte a Latitude e Longitude de graus para um valor decimal.

 

Figura 8 – Utilizando o NMEA node

 

  1. O segundo Switch Node também age como um filtro, mas desta vez para filtrar as mensagens válidas. Ele deixa passar apenas as mensagens que possuírem o status = “valid”. Isso é necessário pois na inicialização do GPS USB (warm up period) ele envia uma série de mensagens inválidas (sem informação) e não queremos enviar esse tipo de informação ao AWS IoT Core.

 

Figura 9 – Utilizando o Switch Node

 

  1. O Function Node adiciona o campo deviceid no objeto JSON, formata o timestamp, e remove os campos que não são necessários para o projeto. É utilizado com o propósito de otimização dos dados a serem enviados para a nuvem.

 

Figura 10 – Utilizando o Function Node

 

  1. Após a otimização dos dados, o MQTT Out Node envia o payload, de maneira segura, para o AWS IoT Core.
  2. Para iniciar a configuração o MQTT out node basta dar um clique duplo no node. Preencher os campos Topic com o valor mycartopic, QOS com o valor 0, e o Retain para False. Selecione o botão para editar o parâmetro Server conforme figura abaixo.

 

Figura 11 – Configurando o MQTT Out

 

  1. Preencher o campo Client ID com o valor car01, conforme definimos na política do AWS IoT Core. No campo Server, preencher com o valor do endpoint do AWS IoT Core obtido no post anterior. A porta deverá ser definida como 8883. Selecionar o botão para editar o parâmetro TLS Configuration conforme figura abaixo.

 

Figura 12 – Configurando o TLS

 

  1. Três arquivos deverão ser copiados para o NodeRed nesta tela. Selecionar o link Upload correspondente ao Certificado, Chave Privada, e Root CA para realizar o upload dos arquivos. Selecione o botão Update nas duas janelas e Done para finalizar.

 

Figura 13 – Upload do Certificado e das Chaves

 

  1. O último bloco, Debug, é utilizado para verificar quais mensagens estão passando pelo fluxo (flow) e sendo enviadas para o MQTT Broker.

Conclusão

Neste Blog post verificamos que é possível desenvolver dispositivos integrados a nuvem com poucas linhas de código. Utilizamos o Node-Red neste exemplo, mas há muitas outras formas para criar protótipos rápidos e testar a sua idéia. Vimos também que é possível integrar esse software de código aberto com as tecnologias da AWS de forma segura, através da configuração dos certificados e chaves de criptografia.

 

Na parte 3 desta série, vamos criar o Front End e alguns serviços de Back End com o AWS Amplify.

 

Convido você a nos enviar as dúvidas, comentários e feedbacks utilizando o formulário abaixo. Até o nosso próximo Blog Post!

 

 


Sobre o Autor

Gerson Itiro Hidaka atualmente trabalha como Arquiteto de Soluções da AWS e atua no atendimento a parceiros mundiais chamados de Global System Integrators and Influencers (GSIIs) na região da América Latina. Entusiasta de tecnologias como Internet das Coisas (IoT), Drones, Devops e especialista em tecnologias como virtualização, serverless, container e Kubernetes. Trabalha com soluções de TI a mais de 24 anos, tendo experiência em inúmeros projetos de otimização de infraestrutura, redes, migração, disaster recovery e DevOps em seu portifólio.

 

 

Revisores

Murilo Nascimento é um gerente de produtos na AWS. Especialista em tecnologias de bancos de dados, gosta muito de estudar sobre o tema e gosta mais ainda de compartilhar o que aprende com outras pessoas.

 

 

 

 

Giovanna Chiaratti é Arquiteta de Soluções para Parceiros na América Latina focada em países de língua espanhola. Admiradora e estudiosa de tecnologias como Machine Learning, Inteligência Artificial e Serverless. Trabalha para escalar parceiros de consultoria e tecnologia para que possam apoiar a AWS em criar soluções seguras, inovadoras e inteligentes.

 

 

 

Juliano Fernandes Baeta é Arquiteto de Soluções para Global Systems Integrators para a América Latina. É um entusiasta de Big Data, Analytics, Machine Learning e sua missão é ajudar parceiros a construir soluções seguras, eficazes e resilientes na AWS.