- Gabriel Borsero Estrela Bernardo - 20181370004
- Patric Lacouth da Silva - 20191370047
Trata-se de um projeto que busca integrar dispositivos IoT (Internet Of Things) com clientes através de um servidor.
A arquitetura utilizará o protocolo de transporte TCP para viabilizar a comunicação entre microcontroladores e um servidor, e desse servidor com clientes locais. Os microcontroladores emitirão informações sobre diferentes sensores que serão repassados dinamicamentes aos clientes que terão acesso a esses dados através de uma página web.
O módulo dos microcontroladores será escrito em C/C++ enquanto que o módulo do servidor e do cliente será escrito em Python. O servidor e cliente poderam se comunicar através de uma interface CLI ou através de uma aplicação web Flask que utiliza o protocolo de aplicação HTTP.
Segue abaixo uma esquematização do projeto proposto:
Os dispositivos IoT para esse projeto foram prototipados utilizando a plataforma NodeMCU para captura e envio de dados diversos como luminosidade, temperatura, umidade e outros. Os protótipos foram idealizados para possuirem um diodo led que fosse possível ser manipulado pelos clientes conectados.
Para a comunicação entre os dispositivos IoT, o servidor e o clientes foi necessário desenvolver um protocolo de mensagens trocadas através de uma conexão socket tcp. A descrição das mensagens é descrita abaixo.
Quando um dispositivo IoT se conecta ao servidor ele precisa informa ao servidor qual a sua identificação e quantos sensores ele possui, esse passo foi denominado de handshake é foi implementado na ordem descrita abaixo:
MENSAGEM | DESCRIÇÃO |
---|---|
IAM [nome-identificador] | Enviado do IoT para servidor com o seu identificador. |
+OK | Resposta do servidor indicando a disponibilidade do identificador. |
SNS [valor-inteiro] | Enviado pelo IoT indicando quantos sensores ele possui. |
+OK | Resposta de confirmação do servidor. |
Após o handshake o dispositivo IoT passa a enviar os dados da sua medição utilizando a mensagem abaixo.
MENSAGEM | DESCRIÇÃO |
---|---|
MEAS [valor-medido] | Mensagem enviada para o servidor contendo o valor medido pelo dispositivo |
Pode-se visualizar o fluxo das mensagens trocadas entre o dispositivo IoT e o Servidor a partir do seguinte diagrama:
O cliente é capaz de acessar os dados que o servidor possui através das mensagens descritas abaixo:
MENSAGEM | DESCRIÇÃO |
---|---|
DEVLST | Requisita ao servidor a lista de dispositivos atualmente conectados. |
+ID [identificador-iot] | Resposta do servidor ao comando DEVLST. Caso mais de um disposito estejam conectados as respostas são concatenadas em uma única mensagem. |
GETMEAS [identificador-iot] | Requisita ao servidor o último valor medido pelo [identificador-iot]. |
+DATA [valor-medido] | Resposta à requisição feita pelo comando GETMEAS. |
A troca de dados entre cliente e servidor pode ser visualizada através do seguinte diagrama:
Nos protótipos desenvolvidos neste projeto, cada dispositivo IoT possui um led que pode ser manipulado pelo cliente de acordo com o fluxo de mensagens abaixo.
MENSAGEM | DESCRIÇÃO |
---|---|
TURN [identificador-iot][0-1] | Faz o pedido ao servidor para mudar o estado do led do dispositivo [0-OFF, 1-ON]. |
+OK | Resposta do servidor indicando a aceitação da requisição. |
+LED [0-1] | Mensagem enviada do servidor para o dispositivo IoT com o estado do led. |
Para os casos de mensagens inválidas ou algum tipo de falha de comunicação o servidor retorna sempre a mensagem +ERROR
O servidor foi desenvolvido de forma a permiter além do acesso CLI um acesso WEB das funcionalidades do servidor. A figura abaixo mostra uma tela do protótipo.