=======MQTT======= **MQTT**, sigla de //Message Queuing Telemetry Transport//, se trata de um **protocolo de envio de mensagens** através da internet, sendo considerado **leve** e muito adequado para o uso em plataformas pequenas de desenvolvimento que possuem conexão à internet ([[Internet of Things|IoT]]). O seu uso substitui toda a infraestrutura baseada em TCP/IP, sendo muito útil em **conexões não confiáveis** ou de **alta latência**. ---- =====Funcionamento===== O seu funcionamento baseia-se em dois papéis principais: //publisher// e //subscriber//. Dada que a conexão, no seu exemplo mais simples possível, é entre dois clientes, devemos necessariamente, durante o envio de uma mensagem qualquer, ter que um cliente seja pelo menos //publisher// e o outro cliente seja pelo menos //subscriber//. **Podemos ter clientes que sejam //publisher// e //subscriber// ao mesmo tempo**. Além disso, existe o papel de //broker//, reservado ao servidor que comportará a infraestrutura para que a comunicação através do protocolo seja efetuada. Temos também o conceito de **tópicos**, que são "espaços" para que mensagens sejam armazenadas e lidas. Serão nesses tópicos que o //publisher// e o //subscriber// irão efetuar suas ações. ====Broker==== O //broker// se trata de um software que possui uma infraestrutura que permite a conexão entre os dois clientes (//publisher// e //subscriber//) no envio de uma mensagem, sendo executado dentro de um servidor. É dentro do //broker// que estão os **tópicos**, com o objetivo de permitir a comunicação entre o //publisher// e o //subscriber//. Os tópicos não são criados explicitamente, mas são referenciados de acordo com um nome atribuído a cada um pelos clientes conectados ao //broker//. A princípio, é criado pelo próprio //broker// quando um cliente atua sobre o tópico em questão. ====Publisher==== O cliente com o papel de //publisher// poderá, no sentido literal da tradução, publicar mensagens em tópicos presentes no //broker//. Sua função, portanto, é ser o emissor da comunicação entre dois clientes, enviando através do //broker// as informações para o //subscriber//. O //publisher// pode publicar em qualquer tópico existente no //broker// em questão. ====Subscriber==== Por outro lado, o cliente com papel de //subscriber// irá se subscrever a um ou mais tópicos presentes no //broker//, sendo notificado a cada vez que uma mensagem for escrita em um tópico ao qual se foi subscrito, recebendo o conteúdo dela logo em seguida. Assim, o //subscriber// é o receptor da comunicação entre dois clientes, recebendo através do //broker// as informações que partiram do //publisher//. O //subscriber// pode se subscrever em qualquer tópico existente no //broker// em questão. ---- =====Linguagens suportadas===== O MQTT está presente nas linguagens e IDEs * Arduino * Bash script * C/C++ * Delphi * Erlang * Go * Haskell * Java * Javascript/Node.js * Lua * .NET * Objective-C * PHP * Python * Ruby * Swift e em diversas outras. Até o momento, a ADA utilizou o protocolo MQTT na [[IDE Arduino|IDE do Arduino]] e também nas linguagens Python e Java para Android. ---- =====Exemplos práticos===== O MQTT foi um aliado de peso para as aplicações feitas pela ADA. - Em nosso projeto sobre [[Galvanic Skin Response|GSR]], o utilizamos para realizar a comunicação entre um microcontrolador [[ESP|ESP32]] e um computador, um distante do outro, conectados através da internet. A ideia era enviar as informações da impedância da pele do paciente do [[ESP|ESP32]] para o computador, e assim plotar gráficos com os dados recebidos. - Na Feira de Mercado da Semana da Engenharia de Computação, na edição de 2018, criamos um aplicativo [[Android|Android]] que se comunicava com um microcontrolador [[ESP|ESP8266]] através do protocolo MQTT. O aplicativo consistia em escrever qualquer número em hexadecimal e, ao enviar a mensagem, o número seria escrito num display 7 segmentos conectado ao [[microcontrolador|microcontrolador]]. ---- =====Referências externas===== * [[https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment|HiveMQ - MQTT essentials part 3]] * [[https://github.com/mqtt/mqtt.github.io/wiki|Official MQTT Github Wiki]] * [[https://en.wikipedia.org/wiki/MQTT|Wikipedia - MQTT]] * [[http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html|Oasis - MQTT 3.1.1 specification]] * [[http://wiki.eclipse.org/Paho|Eclipse Wiki - Paho Client]]