Apresentação do protocolo MQTT como alternativa para comunicação IoT

Objetivos

  • Expor as vantagens da utilização do protocolo MQTT para comunicação de dispositivos IoT.
  • Apresentar a topologia publish/subscribe.

Introdução

O MQTT é um protocolo de aplicação leve, baseado na topologia publish/subscribe para envio de mensagens. Muito aplicado em cenários de comunicação remota entre dispositivos onde a quantidade de dados comunicados é reduzida e a largura de banda para comunicação é limitada. Diversas linguagens de programação proporcionam suporte às bibliotecas MQTT, incluindo linguagens para dispositivos embarcados com ou sem sistema operacional (baremetal).

Devido sua versatilidade e compatibilidade, o protocolo MQTT tonra-se uma interessante escolha para comunicação de dispositivos IoT.

O principio de funcionamento do protocolo parte da utilização de um Servidor MQTT, também conhecido como Broker MQTT. Tal Servidor implementa estruturas de armazenamento de dados, referenciadas como tópicos. Cada tópico refere-se a uma estrutura de publicação (publisher) de dados, mas também possibilita a leitura (subscriber) dos dados.

Topologia Publish e Subscriber

Para exemplificar melhor a topologia Publish e Subscribe suponha o seguinte cenário: Dois clientes desejam publicar dados no broker MQTT, onde o cliente C1 publica dados de temperatura e C2 publica dados de Umidade. Para isso os clientes C1 e C2 necessitam efetuar publicações em tópicos MQTT, que devem ser previamente definidos. Em geral, cada tópico do mesmo contexto (mesmo usuário) permite a publicação de dados de um único tipo. Desta forma, cada cliente deverá criar um tópico distinto. Na topologia abaixo, foram criados os tópicos /temperatura e /umidade.

Com os dados publicados, um terceiro cliente deseja obter os dados de temperatura e umidade, para exibição em uma ferramenta gráfica. Para isso, o terceiro cliente necessita apenas efetuar a inscrição nos tópicos dos dois outros cliente, e então já estará recebendo as notificações de publicação.

topologia_pubsub

A partir do Broker MQTT, bibliotecas MQTT client podem ser utilizadas para obter os serviços de publicação e leitura dos dados do Broker. No geral a estrutura das bibliotecas contém os seguintes requisitos para conexão, publicação e inscrição:

  • Configuração de Servidor MQTT
  • Configuração de credenciais (Usuário, senha, e ID do dispositivo)
  • Funções de conexão
  • Implementação da função de callback
  • Funções de publicação e inscrição

No geral as funções efetuam as configurações e conexões básicas para a comunicação MQTT. No entanto, a função de callback merece maior atenção.

Ao efetuar a inscrição em um tópico MQTT, o sistema cria um ‘gerenciador de notificações’ que, em sistemas operacionais, é uma thread que gerencia um socket para recebimento das mensagens de atualização no tópico inscrito. Portanto, ao detectar o recebimento alguma atualização, o sistema em thread efetua a chamada da função callback (também em thread), possibilitando o tratamento das informações provenientes da mensagem.

Em geral a estrutura da função callback é padronizada, e tem o seguinte cabeçalho (Atenção: Podem haver variações de acordo com a biblioteca utilizada)

callback(byte * message, char * topic, int length)

Onde:

message – é o conteúdo da mensagem atualizada no broker MQTT.

topic – é o tópico referente a mensagem recebida.

length – é o tamanho da mensagem recebida.

É importante lembrar que todas as mensagens serão recebidas pela função callback, independente do número de tópicos inscritos. Para diferenciar os dados basta utilizar a variável que referencia o nome do tópico da mensagem. Portanto, com tais componentes é possível manipular os dados recebidos pelas inscrições.

Referências de bibliotecas client

Python – https://pypi.python.org/pypi/paho-mqtt

Arduino – http://pubsubclient.knolleary.net/

Java – https://eclipse.org/paho/clients/java/

C++ – https://eclipse.org/paho/clients/cpp/

http://mqtt.org/