SlideShare uma empresa Scribd logo
3
Mais lidos
4
Mais lidos
9
Mais lidos
Protocolo MQTT
Maurício Moreira Neto
Orientador: José Neuman de Souza
2
Mas primeiro, vamos revisar o conteúdo da aula
anterior...
Sumário
● O que é o protocolo MQTT?
● Vantagens
● Componentes do Modelo
● Segurança e Qualidade de Serviço
● Implementações e Exemplos
3
O que é o protocolo MQTT?
● Message Queue Telemetry Transport (MQTT) é um protocolo leve para
dispositivos de IoT e otimizado para rede TCP/IP, criada pela IBM no final dos
anos 90
● Utiliza o paradigma publish-subscribe
● Criado inicialmente para sistemas de supervisão e coleta de dados (SCADA)
4
O que é o protocolo MQTT?
Mas por que o MQTT se tornou um protocolo tão
utilizado para internet das coisas?
5
O que é o protocolo MQTT?
● Desenvolvido para hardware de dispositivo altamente restringido em
poder computacional e em redes de largura da banda limitada e de alta
latência
● Sistema de comunicação assíncrona
○ Desacopla emissor de receptor
● Prove distribuição de mensagens um-para-muitos, muitos-para-muitos e
desacoplamento de aplicações
● Apresenta 3 níveis de QoS
6
Por que não usar outros protocolos??
7
O que é o protocolo MQTT?
● Por que não usar o HTTP?
○ Síncrono
■ Cliente espera que o servidor responda
■ Alta latência
○ Unidirecional
■ Cliente precisa iniciar conexão
○ Um pra um
○ Pesado e cheio de regras
■ Não adequada para redes restritas
8
Vantagens do MQTT
● O protocolo oferece algumas vantagens como:
○ Leveza (mínimo de overhead) - Header de 2 bytes
○ Open Source
○ "Confiabilidade"
○ Simplicidade
9
Componentes do Modelo
● O MQTT é um protocolo que utiliza o paradigma pub-sub
● Neste paradigma tem-se três componentes principais:
○ Publishers - Elementos que publicam a mensagem em um tópico
○ Subscribers - Elementos que se inscrevem no tópico e recebem as
mensagens
○ Broker - Responsável pelo intermédio das trocas de mensagens
10
Componentes do Modelo
11Figura retirada de: https://www.slideshare.net/PaulaPea10/building-an-iot-app-using-mqtt
Componentes do Modelo
12Figura retirada de: http://programmingwithreason.com/article-mqtt-in-depth.html
Componentes do Modelo
13Figura retirada de: https://www.slideshare.net/PaulaPea10/building-an-iot-app-using-mqtt
Segurança e Qualidade de Serviço
● A conexão entre o cliente e o Broker é feita via TCP (com opções
login) e o uso de criptografia (SSL/TLS)
● O protocolo MQTT fornece 3 níveis de qualidade de serviço (QoS)
indicando como deve ser a relação entre os elementos
comunicantes
○ QoS 0 - at most once
○ QoS 1 - at least once
○ QoS 2 - exactly once
14
Segurança e Qualidade de Serviço
● QoS 0
○ É conhecido como “best-effort” pois se assemelha ao protocolo UDP pois não se tem
confirmação de entrega de mensagem. Não tem obrigação de manter a mensagem
armazenada.
● QoS 1
○ Existem a confirmação de entrega da mensagem. Atende situações onde quem envia
acaba gerando várias mensagens iguais possivelmente por um atraso na chegada de
confirmação de recebimento.
● QoS 2
○ Garante que a mensagem seja entregue exatamente uma vez, com envio de confirmações
de recebimentos. É o mais próximo do protocolo TCP.
15
Segurança e Qualidade de Serviço
16Figura retirada de: https://www.slideshare.net/paolopat/io-t-protocols-landscape
Implementações e Exemplos
● Tem-se várias implementações para clientes e Brokers MQTT
○ Open Source ou não
○ Linguagens: Java, C, C#, Javascript e Python
● Broker Open Source Mosquitto
○ Windows, MAC, Linux, Raspberry Pi, …
● Porém, também existem Brokers privados
17
Implementações e Exemplos
● Exemplos de comandos do Mosquitto
○ mosquitto_sub → Subscrever em um tópico
○ mosquitto_pub → Publicar em um tópico
○ -m “message” → Mensagens enviadas pelos publicadores
○ -h localhost → Especifica o host o qual deve ser conectado (por default é o localhost)
○ -t topic → O tópico do MQTT sobre o qual publica a mensagem
○ -q 0/1/2 → Especifica a qualidade do serviço a ser usada para a mensagem, de 0, 1 e 2
○ -u username → Especifica o username a ser usado para autenticação com o Broker
○ -d → Habilita mensagens debug
○ -i → Especifica o id do cliente (de quem usa)
○ ...
18
Implementações e Exemplos
● Que tal praticarmos um pouco usando o
protocolo MQTT?!
○ Passo 1: instale o Broker Mosquitto em sua
máquina!
■ https://mosquitto.org/download/
○ Passo 2: Abra o terminal e digite o seguinte
comando:
■ mosquitto_sub -t topico/teste
○ Passo 3: Abra outro terminal em sua máquina
e digite o comando:
■ mosquitto_pub -t topico/teste -m “Hello Everybody”
19
Implementações e Exemplos
20
Rápido, simples e fácil!
Implementações e Exemplos
21
● Mas era só isso mesmo??
● Então que tal ver algo
mais complexo usando o
protocolo MQTT...
Implementações e Exemplos
22
● Neste exemplo iremos usar:
nodeMCU Broker Open Source Arduino (IDE)
Implementações e Exemplos
23
Pub (topic, data)
Sub (topic)
Pub (topic, data)
Implementações e Exemplos
24
// LIBRARIES
#include "DHT.h"
#include <Adafruit_Sensor.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// PINOS UTILIZADOS PARA OS LEDS E O SENSOR
#define DHTPIN D4
#define PinBlue D5
#define PinRed D6
#define DHTTYPE DHT11
// DEFININDO ALGUMAS CONSTANTES E VARIAVEIS
String topic = "nodeMCU";
int errorConectionMQTT = -2;
int status = WL_IDLE_STATUS;
IPAddress server(192, 168, 0, 105);
const char ssid[] = "........";
const char password[] = "................";
//const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
//SETUP
void setup() {
// comunicação
Serial.begin(9600);
Serial1.begin(9600);
// pinos
pinMode(PinBlue, OUTPUT);
pinMode(PinRed, OUTPUT);
// sensor e rede
dht.begin();
InitWiFi();
client.setServer(mqtt_server,1883);
}
void InitWiFi(){
if (WiFi.status() == WL_NO_SHIELD){
Serial.println("modulo WiFi não conectado");
while(true);
}
Serial.println("Conectando ao AP ...");
while ( status != WL_CONNECTED) {
Serial.print("Tentando conectar ao WPA SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, password);
delay(500);
}
Serial.println("Conectando ao AP");
}
Implementações e Exemplos
25
// CAPTURANDO O DADO DO SENSOR E GERANDO UM JSON PARA SER
ENVIADO
void getSensorData(){
//Serial.println("Inicializando o sensor!");
digitalWrite(PinRed, HIGH);
float umid = dht.readHumidity();
float temp = dht.readTemperature();
// Verifica se existe erro na leitura do sensor de temperatura!
if (isnan(umid) || isnan(temp)) {
Serial.println("Failed to read from DHT sensor!");
digitalWrite(PinRed, LOW);
digitalWrite(PinBlue, HIGH);
return;
}
// convertendo para string
String temperatura = String(temp);
String umidade = String(umid);
// debugando mensagens
Serial.print( "Enviando os dados de umidade e temperatura : [" );
Serial.print(umidade);
Serial.print(" ] [ ");
Serial.print(temperatura);
Serial.print( " ] -> " );
// JSON
String payload = " { ";
payload += ""topico":""; payload += topic;
payload += "" , ";
payload += ""Umidade":"; payload += umidade;
payload += " , ";
payload += ""Temperatura":"; payload += temperatura;
payload += " } ";
// Send payload
char attributes[1000];
payload.toCharArray( attributes,1000);
client.publish("nodeMCU", attributes);
Serial.println( attributes );
digitalWrite(PinRed, HIGH);
digitalWrite(PinBlue, LOW);
delay(4000);
}
Implementações e Exemplos
26
// CASO O CAIA A CONEXÃO COM O BROKER, TENTA-SE RECONECTAR.
void reconnect() {
while (!client.connected()) {
Serial.print("Tentando conectar com o Broker ...");
if (client.connect("esp8266Client")) {
Serial.println("Conectado!");
} else {
//
char attributes2[100];
String payload = " { ";
payload += ""error":"; payload += errorConectionMQTT;
payload += " } ";
payload.toCharArray( attributes2, 100 );
client.publish("nodeMCU", attributes2 );
//
Serial.print("Falha, rc=");
Serial.print(client.state());
Serial.println(" tentando em 5 segundos ");
delay(5000);
}
}
}
// CHAMA TODOS AS FUNÇÕES NO LOOP
void loop() {
status = WiFi.status();
if (status != WL_CONNECTED){
while(status != WL_CONNECTED){
Serial.print("Tentando conexão para WPA SSID: ");
Serial.println(ssid);
// conectando com a rede
status = WiFi.begin(ssid,password);
delay(500);
}
Serial.println("Conectado ao AP");
}
// tentando se reconectar
if (!client.connected()){
reconnect();
}
getSensorData();
delay(2000);
client.loop();
}

Mais conteúdo relacionado

PDF
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
PDF
Apresentação sobre Redes Industriais na UNIP Jundiaí/SP
PDF
IoT - Internet of Things
ODP
Aula 1: Conhecendo o Arduino
PPT
Apresentação bluetooth
PDF
Redes 2 padronização e arquitetura de redes
PDF
Introdução a Sistemas Embarcados com Arduino - mini-curso
PPTX
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Apresentação sobre Redes Industriais na UNIP Jundiaí/SP
IoT - Internet of Things
Aula 1: Conhecendo o Arduino
Apresentação bluetooth
Redes 2 padronização e arquitetura de redes
Introdução a Sistemas Embarcados com Arduino - mini-curso

Mais procurados (20)

PDF
Internet das Coisas - Conceitos, tecnologias e aplicações
PDF
Introdução ao Arduino
PPTX
Introdução aos Serviços de Rede
PDF
Aula 07 - Projeto de Topologia e Exercícios - Parte II
PPT
Git e GitHub - Conceitos Básicos
PDF
Introdução ao Python
PDF
Aula 1 - Introdução a POO
PDF
Redes de Computadores
PPTX
Arquitetura dos dispositivos móveis
PPTX
Banco de dados
PDF
Modelo osi
ODP
A Internet das Coisas
PDF
Python - Introdução
PPTX
Redes de computadores
PDF
Aula 4 - Teste de mesa
PPTX
Aula 06 - Sistema Binário
PPTX
Computação nas nuvens
PPTX
Aula - Metodologias Ágeis
PPT
Aula javascript
Internet das Coisas - Conceitos, tecnologias e aplicações
Introdução ao Arduino
Introdução aos Serviços de Rede
Aula 07 - Projeto de Topologia e Exercícios - Parte II
Git e GitHub - Conceitos Básicos
Introdução ao Python
Aula 1 - Introdução a POO
Redes de Computadores
Arquitetura dos dispositivos móveis
Banco de dados
Modelo osi
A Internet das Coisas
Python - Introdução
Redes de computadores
Aula 4 - Teste de mesa
Aula 06 - Sistema Binário
Computação nas nuvens
Aula - Metodologias Ágeis
Aula javascript
Anúncio

Semelhante a Protocolo MQTT - Redes de Computadores (20)

PDF
MQTT: Message Queuing Telemetry Transport (IoT)
DOCX
ffffFicha 8 Nº.docx
PDF
Protocolo MQTT: Message Queuing Telemetry Transport
PPTX
MQTT com café ou vice-versa
PPTX
2017 elipse mqtt
PPTX
Internet of Things: The MQTT protocol
PDF
Apicon2018.pptx
PDF
Ferment io t - Distributed and Scalable IoT Solution
PDF
Protocolos de Sistemas Embarcados
PDF
Mqtt protocolo iot
PPTX
IoT Usando Azure Como Backend
PDF
Internet das Coisas com Python e Arduino
PPTX
Ligando uma cafeteira com Micropython, Mqtt e Android
PDF
Internet das coisas + Guardião Cloud
PDF
Back-end de extrema performance
PPTX
Workshop de IoT e Inteligência na CPBR10 parte 1
PPTX
TDC2017 | São Paulo - Trilha Arquitetura Java How we figured out we had a SRE...
PDF
Eica 2015.2 - Introdução ao IOT
PPTX
Internet das coisas - Uma Abordagem Prática
MQTT: Message Queuing Telemetry Transport (IoT)
ffffFicha 8 Nº.docx
Protocolo MQTT: Message Queuing Telemetry Transport
MQTT com café ou vice-versa
2017 elipse mqtt
Internet of Things: The MQTT protocol
Apicon2018.pptx
Ferment io t - Distributed and Scalable IoT Solution
Protocolos de Sistemas Embarcados
Mqtt protocolo iot
IoT Usando Azure Como Backend
Internet das Coisas com Python e Arduino
Ligando uma cafeteira com Micropython, Mqtt e Android
Internet das coisas + Guardião Cloud
Back-end de extrema performance
Workshop de IoT e Inteligência na CPBR10 parte 1
TDC2017 | São Paulo - Trilha Arquitetura Java How we figured out we had a SRE...
Eica 2015.2 - Introdução ao IOT
Internet das coisas - Uma Abordagem Prática
Anúncio

Protocolo MQTT - Redes de Computadores

  • 1. Protocolo MQTT Maurício Moreira Neto Orientador: José Neuman de Souza
  • 2. 2 Mas primeiro, vamos revisar o conteúdo da aula anterior...
  • 3. Sumário ● O que é o protocolo MQTT? ● Vantagens ● Componentes do Modelo ● Segurança e Qualidade de Serviço ● Implementações e Exemplos 3
  • 4. O que é o protocolo MQTT? ● Message Queue Telemetry Transport (MQTT) é um protocolo leve para dispositivos de IoT e otimizado para rede TCP/IP, criada pela IBM no final dos anos 90 ● Utiliza o paradigma publish-subscribe ● Criado inicialmente para sistemas de supervisão e coleta de dados (SCADA) 4
  • 5. O que é o protocolo MQTT? Mas por que o MQTT se tornou um protocolo tão utilizado para internet das coisas? 5
  • 6. O que é o protocolo MQTT? ● Desenvolvido para hardware de dispositivo altamente restringido em poder computacional e em redes de largura da banda limitada e de alta latência ● Sistema de comunicação assíncrona ○ Desacopla emissor de receptor ● Prove distribuição de mensagens um-para-muitos, muitos-para-muitos e desacoplamento de aplicações ● Apresenta 3 níveis de QoS 6
  • 7. Por que não usar outros protocolos?? 7
  • 8. O que é o protocolo MQTT? ● Por que não usar o HTTP? ○ Síncrono ■ Cliente espera que o servidor responda ■ Alta latência ○ Unidirecional ■ Cliente precisa iniciar conexão ○ Um pra um ○ Pesado e cheio de regras ■ Não adequada para redes restritas 8
  • 9. Vantagens do MQTT ● O protocolo oferece algumas vantagens como: ○ Leveza (mínimo de overhead) - Header de 2 bytes ○ Open Source ○ "Confiabilidade" ○ Simplicidade 9
  • 10. Componentes do Modelo ● O MQTT é um protocolo que utiliza o paradigma pub-sub ● Neste paradigma tem-se três componentes principais: ○ Publishers - Elementos que publicam a mensagem em um tópico ○ Subscribers - Elementos que se inscrevem no tópico e recebem as mensagens ○ Broker - Responsável pelo intermédio das trocas de mensagens 10
  • 11. Componentes do Modelo 11Figura retirada de: https://www.slideshare.net/PaulaPea10/building-an-iot-app-using-mqtt
  • 12. Componentes do Modelo 12Figura retirada de: http://programmingwithreason.com/article-mqtt-in-depth.html
  • 13. Componentes do Modelo 13Figura retirada de: https://www.slideshare.net/PaulaPea10/building-an-iot-app-using-mqtt
  • 14. Segurança e Qualidade de Serviço ● A conexão entre o cliente e o Broker é feita via TCP (com opções login) e o uso de criptografia (SSL/TLS) ● O protocolo MQTT fornece 3 níveis de qualidade de serviço (QoS) indicando como deve ser a relação entre os elementos comunicantes ○ QoS 0 - at most once ○ QoS 1 - at least once ○ QoS 2 - exactly once 14
  • 15. Segurança e Qualidade de Serviço ● QoS 0 ○ É conhecido como “best-effort” pois se assemelha ao protocolo UDP pois não se tem confirmação de entrega de mensagem. Não tem obrigação de manter a mensagem armazenada. ● QoS 1 ○ Existem a confirmação de entrega da mensagem. Atende situações onde quem envia acaba gerando várias mensagens iguais possivelmente por um atraso na chegada de confirmação de recebimento. ● QoS 2 ○ Garante que a mensagem seja entregue exatamente uma vez, com envio de confirmações de recebimentos. É o mais próximo do protocolo TCP. 15
  • 16. Segurança e Qualidade de Serviço 16Figura retirada de: https://www.slideshare.net/paolopat/io-t-protocols-landscape
  • 17. Implementações e Exemplos ● Tem-se várias implementações para clientes e Brokers MQTT ○ Open Source ou não ○ Linguagens: Java, C, C#, Javascript e Python ● Broker Open Source Mosquitto ○ Windows, MAC, Linux, Raspberry Pi, … ● Porém, também existem Brokers privados 17
  • 18. Implementações e Exemplos ● Exemplos de comandos do Mosquitto ○ mosquitto_sub → Subscrever em um tópico ○ mosquitto_pub → Publicar em um tópico ○ -m “message” → Mensagens enviadas pelos publicadores ○ -h localhost → Especifica o host o qual deve ser conectado (por default é o localhost) ○ -t topic → O tópico do MQTT sobre o qual publica a mensagem ○ -q 0/1/2 → Especifica a qualidade do serviço a ser usada para a mensagem, de 0, 1 e 2 ○ -u username → Especifica o username a ser usado para autenticação com o Broker ○ -d → Habilita mensagens debug ○ -i → Especifica o id do cliente (de quem usa) ○ ... 18
  • 19. Implementações e Exemplos ● Que tal praticarmos um pouco usando o protocolo MQTT?! ○ Passo 1: instale o Broker Mosquitto em sua máquina! ■ https://mosquitto.org/download/ ○ Passo 2: Abra o terminal e digite o seguinte comando: ■ mosquitto_sub -t topico/teste ○ Passo 3: Abra outro terminal em sua máquina e digite o comando: ■ mosquitto_pub -t topico/teste -m “Hello Everybody” 19
  • 21. Implementações e Exemplos 21 ● Mas era só isso mesmo?? ● Então que tal ver algo mais complexo usando o protocolo MQTT...
  • 22. Implementações e Exemplos 22 ● Neste exemplo iremos usar: nodeMCU Broker Open Source Arduino (IDE)
  • 23. Implementações e Exemplos 23 Pub (topic, data) Sub (topic) Pub (topic, data)
  • 24. Implementações e Exemplos 24 // LIBRARIES #include "DHT.h" #include <Adafruit_Sensor.h> #include <ESP8266WiFi.h> #include <PubSubClient.h> // PINOS UTILIZADOS PARA OS LEDS E O SENSOR #define DHTPIN D4 #define PinBlue D5 #define PinRed D6 #define DHTTYPE DHT11 // DEFININDO ALGUMAS CONSTANTES E VARIAVEIS String topic = "nodeMCU"; int errorConectionMQTT = -2; int status = WL_IDLE_STATUS; IPAddress server(192, 168, 0, 105); const char ssid[] = "........"; const char password[] = "................"; //const char* mqtt_server = "broker.hivemq.com"; WiFiClient espClient; PubSubClient client(espClient); DHT dht(DHTPIN, DHTTYPE); //SETUP void setup() { // comunicação Serial.begin(9600); Serial1.begin(9600); // pinos pinMode(PinBlue, OUTPUT); pinMode(PinRed, OUTPUT); // sensor e rede dht.begin(); InitWiFi(); client.setServer(mqtt_server,1883); } void InitWiFi(){ if (WiFi.status() == WL_NO_SHIELD){ Serial.println("modulo WiFi não conectado"); while(true); } Serial.println("Conectando ao AP ..."); while ( status != WL_CONNECTED) { Serial.print("Tentando conectar ao WPA SSID: "); Serial.println(ssid); status = WiFi.begin(ssid, password); delay(500); } Serial.println("Conectando ao AP"); }
  • 25. Implementações e Exemplos 25 // CAPTURANDO O DADO DO SENSOR E GERANDO UM JSON PARA SER ENVIADO void getSensorData(){ //Serial.println("Inicializando o sensor!"); digitalWrite(PinRed, HIGH); float umid = dht.readHumidity(); float temp = dht.readTemperature(); // Verifica se existe erro na leitura do sensor de temperatura! if (isnan(umid) || isnan(temp)) { Serial.println("Failed to read from DHT sensor!"); digitalWrite(PinRed, LOW); digitalWrite(PinBlue, HIGH); return; } // convertendo para string String temperatura = String(temp); String umidade = String(umid); // debugando mensagens Serial.print( "Enviando os dados de umidade e temperatura : [" ); Serial.print(umidade); Serial.print(" ] [ "); Serial.print(temperatura); Serial.print( " ] -> " ); // JSON String payload = " { "; payload += ""topico":""; payload += topic; payload += "" , "; payload += ""Umidade":"; payload += umidade; payload += " , "; payload += ""Temperatura":"; payload += temperatura; payload += " } "; // Send payload char attributes[1000]; payload.toCharArray( attributes,1000); client.publish("nodeMCU", attributes); Serial.println( attributes ); digitalWrite(PinRed, HIGH); digitalWrite(PinBlue, LOW); delay(4000); }
  • 26. Implementações e Exemplos 26 // CASO O CAIA A CONEXÃO COM O BROKER, TENTA-SE RECONECTAR. void reconnect() { while (!client.connected()) { Serial.print("Tentando conectar com o Broker ..."); if (client.connect("esp8266Client")) { Serial.println("Conectado!"); } else { // char attributes2[100]; String payload = " { "; payload += ""error":"; payload += errorConectionMQTT; payload += " } "; payload.toCharArray( attributes2, 100 ); client.publish("nodeMCU", attributes2 ); // Serial.print("Falha, rc="); Serial.print(client.state()); Serial.println(" tentando em 5 segundos "); delay(5000); } } } // CHAMA TODOS AS FUNÇÕES NO LOOP void loop() { status = WiFi.status(); if (status != WL_CONNECTED){ while(status != WL_CONNECTED){ Serial.print("Tentando conexão para WPA SSID: "); Serial.println(ssid); // conectando com a rede status = WiFi.begin(ssid,password); delay(500); } Serial.println("Conectado ao AP"); } // tentando se reconectar if (!client.connected()){ reconnect(); } getSensorData(); delay(2000); client.loop(); }