Trocando informações com uma Raspberry Pi e plataforma dojot

Raspberry Pi e plataforma dojot
Este post faz parte da série Dispositivos reais e segurança na comunicação. Leia também os outros posts da série:

A dojot é uma plataforma brasileira desenvolvida principalmente pelo CPqD e que surgiu com uma proposta open source, visando facilitar o desenvolvimento de soluções e subsidiar o ecossistema IoT com conteúdo local voltado às necessidades do País.

 

O código dos componentes que compõem a solução está disponível no repositório do Github. Descritivos detalhados da arquitetura, do funcionamento dos componentes e alguns casos de uso podem ser encontrados na documentação.

 

 

Introdução

 

Na série introdutória da dojot, foram exploradas as funcionalidades iniciais da plataforma, permitindo a criação de dispositivos virtuais, visualização de seus atributos e definição de fluxos de processamento a partir de sinais enviados por um dispositivo.

 

Neste artigo, utilizaremos o que foi abordado para estabelecer comunicação entre um dispositivo real e a plataforma, monitorando sensores de entrada e controlando uma saída a partir do resultado de um fluxo de processamento.

 

 

Mapeando o dispositivo na plataforma dojot

 

Inicialmente, seria utilizada uma Raspberry Pi em conjunto com o add-on SenseHat.

 

Visando a comodidade dos leitores - principalmente daqueles que não contam com acesso a este tipo de hardware - este artigo utilizará o emulador Sense HAT Emulator.

 

Ainda que o dispositivo “real” seja emulado, a biblioteca utilizada simula de forma transparente as APIs do SenseHat, de forma que a aplicação possa ser portada para o dispositivo físico sem grandes problemas.

 

De maneira similar à descrita nos artigos introdutórios, os passos a serem seguidos para estabelecer a comunicação são:

  • criação de um modelo que descreva os principais atributos do dispositivo
  • criação do dispositivo a partir do modelo que o representa
  • mapeamento do deviceId nas aplicações cliente

 

Criando o modelo

 

Neste caso, ao mapear o SenseHat, serão realizadas as seguintes ações:

  • leitura de temperatura
  • leitura de umidade
  • leitura de pressão
  • escrita no visor

 

Assim, o modelo que dará origem a este dispositivo pode ser visualizado a seguir

 

humidity:

pressure:

temperature:

display:

protocol:

entrada do tipo float (dynamic)

entrada do tipo float (dynamic)

entrada do tipo float (dynamic)

saída do tipo string (actuator)

configuração

 

 

Instanciando um dispositivo a partir do modelo

 

Após termos o modelo criado, o utilizamos para instanciar um dispositivo.

 

Obtendo o deviceId

 

Uma vez salvo, já é possível obter o valor do deviceId na tela de detalhes para este dispositivo.

No caso deste exemplo, o ID é 1d89f2. Note que este valor é gerado cada vez que um dispositivo é criado - e, portanto, deve ser atualizado de acordo.

 

 

Interagindo com a plataforma

 

Até então, apenas foi abordado o uso diretamente via linha de comando de um cliente MQTT para envio de mensagens, simulando o comportamento de um dispositivo.

 

Nesta seção, utilizaremos uma biblioteca que permite realizar o envio das mesmas mensagens diretamente do código Python sendo executado no dispositivo real.

 

 

Instalando as dependências

 

Os códigos apresentados abaixo fazem uso de Python 3 e suas dependências são gerenciadas a partir do pip3, então esses devem estar instalados.

 

As dependências estão listadas no arquivo requirements.txt e podem ser instaladas a partir do comando:

 

 

São elas:

 

Paho MQTT

utilizada na comunicação com o broker mqtt. O uso neste exemplo será básico. Mais detalhes podem ser encontrados na documentação oficial.

 

sense_emu

biblioteca que espelha as APIs existentes no sense_hat. A documentação oficial pode ser encontrada neste endereço.

 

 

Utilizando o emulador

 

Uma vez instalado, o emulador pode ser executado com o comando:

 

 

O código a seguir exemplifica o caso básico de uso.

 

 

A referência sense dá acesso às APIs do SenseHat de forma simples e direta.

 

Neste exemplo, os valores de temperatura, pressão e umidade são impressos na tela com intervalos de 4 segundos.

 

 

Publicando valores na dojot

 

Conforme visto anteriormente, os atributos de um dispositivo podem ser enviados à plataforma a partir da publicação no tópico de formato /<tenant_name>/<device_id>/attrs

 

Assim, para que o dispositivo identificado por 36fc0a publique os valores lidos - assumindo o tenant default admin - o tópico de destino deve ser /admin/36fc0a/attrs

 

No código abaixo, o cliente Paho é utilizado para comunicação MQTT e envio dos atributos definidos manualmente. Note que o ID do cliente mantém o padrão visto ao utilizar o mosquitto: <tenant_name>:<device_id>.

 

 

 

Monitorando o dispositivo

 

Combinando os dois scripts anteriores, podemos realizar o envio das medições à plataforma dojot com a frequência desejada.

 

O trecho abaixo ilustra este caso de uso:

 

 

Configurando um fluxo de processamento

 

Visando manter o exemplo o mais simples possível, iremos simular um cenário de uso onde a temperatura medida deve permanecer entre 20 e 30 ºC.

 

Assim, o fluxo deverá tomar nos casos extremos: valores abaixo de 20ºC ou acima de 30ºC.

 

Para tal, o seguinte fluxo deve ser criado:

 

RaspberryPi: define o dispositivo de entrada.

Envia os atributos a partir da variável payload

 

temperatureController: verifica os limiares de temperatura.

 

A mensagem recebida via payload é analisada neste bloco. Como o valor de interesse é a temperatura, a propriedade payload.temperature é configurada para verificação.

 

Os critérios configurados são:

  • Se temperatura maior que 30, acione saída 1
  • Se temperatura menor que 20, acione saída 2

 

highTemperatureWarning e lowTemperatureWarning: são ativados nos casos de alerta de temperatura alta e baixa, respectivamente.

 

Esse bloco é responsável por mapear a saída desejada ao modelo de saída do dispositivo.

 

Neste exemplo, configura-se uma variável output com o objeto { “display” : “high” }.

 

setDisplay: define o dispositivo de saída (actuator) para o fluxo e a variável que deve ser enviada ao mesmo.

 

No exemplo, a saída é o próprio Raspberry Pi e a variável é a output, definida no bloco anterior.

 

 

Obtendo a mensagem de retorno

 

Uma vez configurado, o fluxo emitirá um sinal nos casos de temperatura alta ou baixa.

 

Para que o dispositivo receba as mensagens destinadas a ele, o tópico /<tenant>/<device_id>/config deve ser subscrito.

 

O código abaixo destaca o trecho adicionado para que a subscrição ocorra, configurando também a função de callback a ser executada quando uma mensagem é recebida:

 

 

Assim que uma mensagem for publicada no tópico, essa função será invocada.

 

Como o fluxo foi definido para atuar nos casos onde a temperatura é menor que 20 ou maior que 30ºC, podemos validar seu funcionamento variando a temperatura no SensorHat.

 

 

Valores publicados e recebidos. Note que apenas são recebidos valores quando ultrapassados os limiares definidos no fluxo de processamento.

 

 

Uma vez recebida a mensagem, fica a critério do desenvolvedor decidir como utilizá-la.

 

 

Imprimindo a mensagem de retorno no display

 

Neste exemplo, será impresso no display do SensorHat a situação definida a partir da mensagem recebida, indicando os casos de temperatura baixa e alta.

 

Modificando o código do on_message, o trecho a seguir mostra a adição que nos permite escrever no visor do dispositivo:

 

 

É possível forçar os valores de temperatura no dispositivo e validar a atualização do visor:

 

 

 

 

O código final do script é exibido a seguir:

 

 

 

Conclusão

 

Até aqui, foram realizadas as configurações necessárias para estabelecer a conexão entre uma Raspberry Pi e a plataforma dojot. Tanto o envio quanto o recebimento de informações foram abordados, o que já permite realizar o controle de um atuador a partir dos sinais enviados ao fluxo de processamento.

 

No próximo artigo, serão adicionadas camadas de segurança nesta troca de dados a partir do uso de TLS com certificados digitais: com eles, é possível garantir a comunicação segura entre o dispositivo e a plataforma dojot.

 

Saiba mais

 

Introdução à plataforma dojot - Instalação e configuração

Simulação de dispositivos na plataforma dojot

Configurando fluxos de processamento de dados da plataforma dojot

 

 

Referências

 

https://sense-emu.readthedocs.io/en/v1.1/

https://github.com/rascaraficci/dojot-sense-hat

https://pypi.org/project/paho-mqtt/#usage-and-api

http://www.steves-internet-guide.com/into-mqtt-python-client/

http://www.steves-internet-guide.com/subscribing-topics-mqtt-client/

Outros artigos da série

Configurando conexão segura com o uso de TLS na plataforma dojot >>
Este post faz da série Dispositivos reais e segurança na comunicação. 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.

Rafael Zanetti
Graduado em Engenharia Mecatrônica, atua em desenvolvimento de software com foco em soluções potencializadas por big data e inteligência artificial. Atualmente, está envolvido com IoT e suas aplicações no cenário nacional.

Deixe um comentário

avatar
 
  Notificações  
Notificar