Postagem em destaque

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Este post é o primeiro de uma série de seis que escrevi tratando de controle de potência e PID (controle proporcional, integral e derivativo...

terça-feira, 12 de agosto de 2014

MQTT - O protocolo da IoT (Internet das Coisas) I

Srs frequentadores deste,

Nos próximos posts vou fazer uma série sobre MQTT. A ideia é fazer como na série que fiz sobre PID, que até hoje são dos posts mais acessados desse blog. Seguiremos as mesmas premissas, a saber:

- Rigor na teoria, abordando com precisão os conceitos envolvidos.

- Apesar disso, uso de uma linguagem mais coloquial, facilitando o entendimento.

- Abuso de exemplos práticos, relacionando o MQTT com outros assuntos.

Boralá?

O que é MQTT

MQTT "stands for" (como dizem os conterrâneos do Obama)  Message Queue Telemetry Transport, ou Fila de Mensagem para Transporte de Telemetria.  É um protocolo (mais um!) do tipo publicar/subscrever, o que significa que "algo" publica mensagens em algum lugar e outro "algo" subscreve (assina, no sentido de assinatura de jornal/revista), recebendo as mensagens publicadas. Nesse tipo de protocolo não há comunicação direta entre o emissor e o receptor da mensagem, ou seja, não é "peer-to-peer", ponto a ponto. Tudo passa por um servidor, aplicativo que recebe as mensagens publicadas e as entrega aos subscritores correspondentes e é chamado broker (intermediário ou corretor, em português), por razões óbvias.

Obs: uma máquina pode ter instalado o servidor MQTT e também subscrever/publicar mensagens, mas nesse caso um aplicativo, mesmo rodando no servidor, terá que subscrever mensagens se quiser vê-las, "passando" assim pelo aplicativo broker.

Características do MQTT

- Simplicidade de codificação, o que faz com que o código fique pequeno, podendo rodar até num Arduino, embora nesse caso com alguma dificuldade, como veremos.

- Sem muito overhead, quer dizer, as mensagens não tem muita coisa além do que os dados propriamente ditos, o que favorece o uso de redes com pouca velocidade de transmissão de dados. Um exemplo de "protocolo" que gera muito overhead é o XML, que permite a estruturação da informação enviada mas exige muito texto formatando essas informações.

- O protocolo é de domínio público ou seja, pode ser implementado por quem quiser.

- Existem vários brokers que vc pode usar de graça, e também outros que vc pode instalar no seu servidor e fazer dele um broker. Vamos ver pelo menos um deles mais à frente, o Mosquitto.

Porque é interessante usar um protocolo como MQTT em IoT?

Quando vamos fazer com que equipamentos se comuniquem e atuem cooperativamente, um protocolo de comunicação tem que ser usado, para que um "entenda" o que o outro estiver "dizendo". Você pode criar o seu próprio protocolo, o que implica em escrever algum código (programas) que traduza as demandas do processo (o que deve ser feito em conjunto, a tarefa em si) em comandos padronizados. Depois vc deve decidir qual a camada pela qual esses dados deverão ser transportados e usá-la, definindo também parâmetros para sua configuração. Um exemplo:

Se vc for fazer comunicação serial, deve definir a velocidade em bauds (bits/s), se tem paridade ou não etc.

Já se vc usa algo como o MQTT não precisa se preocupar com os detalhes da comunicação em si, já que o protocolo já está definido.

Outra vantagem muito importante do uso do MQTT é a padronização do hardware, quer dizer, toda a comunicação é feita usando-se rede cabeada ou wifi. Cada vez mais as "coisas" possuem portas para esse tipo de de conexão, por exemplo, quase todos os modelos de TV hoje vêm com esse tipo de acesso.

Usando como base de comparação também a comunicação serial, até por ser ela talvez a mais usada para conectar equipamentos:

Existem alguns "padrões" de hardware para comunicação serial: RS-232, RS-485, TTL e outros. Acontece que esses padrões não são muito claros, o que gera confusão. O RS-232 pode usar tensões de +5/-5V a +24/-24V, enquanto que o TTL usa somente tensões positivas até 5V. Ou seja, sempre que você for conectar equipamentos com o protocolo serial, terá que ser considerado algum circuito para conectar os dois equipamentos. Esse circuito pode ser simples, por exemplo dois resistores para ajustar tensões diferentes entre dispositivos TTL (Arduino e Raspberry Pi entram nesse grupo) até circuito integrado e capacitores caso seja necessário acoplar RS-232 com TTL.


Acima, imagem de um circuito de acoplamento entre RS-232 (plug metálico à direita, chamado DB9) e TTL, no caso os fios verde e azul que fazem a conexão com o Raspberry Pi.

Se vc usa MQTT e os equipamentos tem acesso à internet (como os dois acima) nada disso é necessário.

O MQTT é também adequado para IoT pelo fato de ser simples, podendo ser implementado em equipamentos com pouco poder de processamento.

Outra vantagem é que ele é baseado em TPC/IP, que é o protocolo de rede da internet, ou seja, os equipamentos podem estar na mesma sala ou em países diferentes.

Por fim o MQTT possui camadas de segurança da informação que fazem com que, caso necessário, possa ser adotada uma comunicação com níveis de segurança da informação bastante adequada. Isso é muito importante já que é virtualmente impossível determinar por onde exatamente circula ou quem está tendo acesso a uma mensagem via web.

Quem usa

Existem muitos projetos baseados em MQTT. Aqui tem uma pequena lista, que curiosamente não inclui o Facebook Messenger que, segundo o próprio povo do Facebook, "roda" em MQTT. É legal identificar no texto que o povo do Facebook considera as mesmas vantagens a respeito do MQTT, que são as óbvias descritas acima, como responsáveis pela escolha do protocolo por eles.

Bom, aí foi um papo a respeito do MQTT. No próximo post, vamos praticar um pouco.