Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
mqtt [2018/10/26 22:49] forfs [Referências externas] |
mqtt [2021/06/04 13:48] (atual) bandeira |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
=======MQTT======= | =======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 ([[IoT|IoT]]). O seu uso substitui toda a infraestrutura baseada em [[TCP|TCP]]/[[IP|IP]], sendo muito útil em **conexões não confiáveis** ou de **alta latência**. | + | **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====== | + | =====Funcionamento===== |
- | O seu funcionamento baseia-se em dois papéis principais: //publisher// e //subscriber//. Dada que a conexão, no seu maior granulamento 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. | + | 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. | 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===== | + | ====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. | 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===== | + | ====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. | 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===== | + | ====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. | 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====== | + | =====Linguagens suportadas===== |
O MQTT está presente nas linguagens e IDEs | O MQTT está presente nas linguagens e IDEs | ||
Linha 43: | Linha 43: | ||
* Swift | * Swift | ||
- | e em diversas outras. Até o momento, a ADA utilizou o protocolo MQTT na IDE do Arduino e também nas linguagens Python e Java para Android. | + | 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====== | + | =====Exemplos práticos===== |
O MQTT foi um aliado de peso para as aplicações feitas pela ADA. | 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 [[ESP32|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 [[ESP32|ESP32]] para o computador, e assim plotar gráficos com os dados recebidos. | + | - 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 [[ESP8266|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|display 7 segmentos]] conectado ao [[microcontroladores|microcontrolador]]. | + | - 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====== | + | =====Referências externas===== |
* [[https://www.hivemq.com/blog/mqtt-essentials-part-3-client-broker-connection-establishment|HiveMQ - MQTT essentials part 3]] | * [[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://github.com/mqtt/mqtt.github.io/wiki|Official MQTT Github Wiki]] |