SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
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

Mais procurados

Protocolo MQTT: Message Queuing Telemetry Transport
Protocolo MQTT: Message Queuing Telemetry TransportProtocolo MQTT: Message Queuing Telemetry Transport
Protocolo MQTT: Message Queuing Telemetry TransportNorberto Enomoto
 
Aula 3 Introdução a Redes II
Aula 3   Introdução a Redes IIAula 3   Introdução a Redes II
Aula 3 Introdução a Redes IIwab030
 
Redes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoRedes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoLuís Felipe de Andrade
 
Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01Arthur Emanuel
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebArthur Emanuel
 
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)Luis Ferreira
 
Aula03 camada física - meios de transmissão
Aula03  camada física - meios de transmissãoAula03  camada física - meios de transmissão
Aula03 camada física - meios de transmissãoCarlos Veiga
 
Redes 6 equipamentos ativos da rede
Redes 6 equipamentos ativos da redeRedes 6 equipamentos ativos da rede
Redes 6 equipamentos ativos da redeMauro Pereira
 
Arquitetura de software : Cliente-Servidor
Arquitetura de software : Cliente-ServidorArquitetura de software : Cliente-Servidor
Arquitetura de software : Cliente-ServidorAlexsandro Oliveira
 
Protocolos OSI/TCP-IP
Protocolos OSI/TCP-IPProtocolos OSI/TCP-IP
Protocolos OSI/TCP-IPGuimaraess
 
Redes 1 introducao historico conceitos
Redes 1 introducao historico conceitosRedes 1 introducao historico conceitos
Redes 1 introducao historico conceitosMauro Pereira
 

Mais procurados (20)

Protocolo MQTT: Message Queuing Telemetry Transport
Protocolo MQTT: Message Queuing Telemetry TransportProtocolo MQTT: Message Queuing Telemetry Transport
Protocolo MQTT: Message Queuing Telemetry Transport
 
Aula 3 Introdução a Redes II
Aula 3   Introdução a Redes IIAula 3   Introdução a Redes II
Aula 3 Introdução a Redes II
 
Redes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de AplicaçãoRedes de Computadores - Camada de Aplicação
Redes de Computadores - Camada de Aplicação
 
Modelo TCP/IP
Modelo TCP/IPModelo TCP/IP
Modelo TCP/IP
 
Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01Sistemas Distribuídos - Aula 01
Sistemas Distribuídos - Aula 01
 
Sistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos WebSistemas Distribuídos - Aula 07 - Servicos Web
Sistemas Distribuídos - Aula 07 - Servicos Web
 
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
IMEI Módulo 8 (Curso profissional de Gestão de Equipamentos Informáticos)
 
Aula03 camada física - meios de transmissão
Aula03  camada física - meios de transmissãoAula03  camada física - meios de transmissão
Aula03 camada física - meios de transmissão
 
Orçamento (rede)
Orçamento (rede)Orçamento (rede)
Orçamento (rede)
 
Equipamentos de Rede
Equipamentos de RedeEquipamentos de Rede
Equipamentos de Rede
 
Redes 6 equipamentos ativos da rede
Redes 6 equipamentos ativos da redeRedes 6 equipamentos ativos da rede
Redes 6 equipamentos ativos da rede
 
Protocolo de capa 3
Protocolo de capa 3Protocolo de capa 3
Protocolo de capa 3
 
TCP/IP
TCP/IPTCP/IP
TCP/IP
 
Modelo osi
Modelo osiModelo osi
Modelo osi
 
Redes -aula_1o
Redes  -aula_1oRedes  -aula_1o
Redes -aula_1o
 
Arquitetura de software : Cliente-Servidor
Arquitetura de software : Cliente-ServidorArquitetura de software : Cliente-Servidor
Arquitetura de software : Cliente-Servidor
 
Protocolos OSI/TCP-IP
Protocolos OSI/TCP-IPProtocolos OSI/TCP-IP
Protocolos OSI/TCP-IP
 
ospf isis
ospf   isisospf   isis
ospf isis
 
Redes 1 introducao historico conceitos
Redes 1 introducao historico conceitosRedes 1 introducao historico conceitos
Redes 1 introducao historico conceitos
 
Protocolos de Redes
Protocolos de RedesProtocolos de Redes
Protocolos de Redes
 

Semelhante a Protocolo MQTT - Redes de Computadores

Selecionando application procotocols para IoT
Selecionando application procotocols para IoTSelecionando application procotocols para IoT
Selecionando application procotocols para IoTcesar231084
 
Capítulo 23 comunicação entre processos
Capítulo 23   comunicação entre processosCapítulo 23   comunicação entre processos
Capítulo 23 comunicação entre processosFaculdade Mater Christi
 
Protocolos de Sistemas Embarcados
Protocolos de Sistemas EmbarcadosProtocolos de Sistemas Embarcados
Protocolos de Sistemas EmbarcadosRomulo Fagundes
 
Redes - Camada de Transporte
Redes - Camada de TransporteRedes - Camada de Transporte
Redes - Camada de TransporteLuiz Arthur
 
02 - Aplicação-Transporte.pdf
02 - Aplicação-Transporte.pdf02 - Aplicação-Transporte.pdf
02 - Aplicação-Transporte.pdfedsonjcg
 
IX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com PythonIX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com Pythonitalomaia
 
Protocolos TCP IP UDP
Protocolos TCP IP UDPProtocolos TCP IP UDP
Protocolos TCP IP UDPAndré Nobre
 
Camada de Transporte - TADS/REC 2014/2
Camada de Transporte - TADS/REC 2014/2Camada de Transporte - TADS/REC 2014/2
Camada de Transporte - TADS/REC 2014/2Caio Miranda
 
Cisco Packet Tracer
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracermaykon-26
 
Protocolos e redes industriais
Protocolos e redes industriaisProtocolos e redes industriais
Protocolos e redes industriaisEverton_michel
 

Semelhante a Protocolo MQTT - Redes de Computadores (20)

Intro_redes.pdf
Intro_redes.pdfIntro_redes.pdf
Intro_redes.pdf
 
Selecionando application procotocols para IoT
Selecionando application procotocols para IoTSelecionando application procotocols para IoT
Selecionando application procotocols para IoT
 
Capítulo 23 comunicação entre processos
Capítulo 23   comunicação entre processosCapítulo 23   comunicação entre processos
Capítulo 23 comunicação entre processos
 
Protocolos de Sistemas Embarcados
Protocolos de Sistemas EmbarcadosProtocolos de Sistemas Embarcados
Protocolos de Sistemas Embarcados
 
redes
redesredes
redes
 
Redes - Camada de Transporte
Redes - Camada de TransporteRedes - Camada de Transporte
Redes - Camada de Transporte
 
projecto de rede computadores
projecto de rede computadoresprojecto de rede computadores
projecto de rede computadores
 
Protocolo UDP
Protocolo UDPProtocolo UDP
Protocolo UDP
 
Thedude
ThedudeThedude
Thedude
 
02 - Aplicação-Transporte.pdf
02 - Aplicação-Transporte.pdf02 - Aplicação-Transporte.pdf
02 - Aplicação-Transporte.pdf
 
Minicurso Node-RED.pdf
Minicurso Node-RED.pdfMinicurso Node-RED.pdf
Minicurso Node-RED.pdf
 
IX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com PythonIX Pylestras - SmartGrid com Python
IX Pylestras - SmartGrid com Python
 
Protocolos TCP IP UDP
Protocolos TCP IP UDPProtocolos TCP IP UDP
Protocolos TCP IP UDP
 
Camada de Transporte - TADS/REC 2014/2
Camada de Transporte - TADS/REC 2014/2Camada de Transporte - TADS/REC 2014/2
Camada de Transporte - TADS/REC 2014/2
 
IoT: construindo ideias com nodeMCU e MQTT
IoT: construindo ideias com nodeMCU e MQTTIoT: construindo ideias com nodeMCU e MQTT
IoT: construindo ideias com nodeMCU e MQTT
 
ffffFicha 8 Nº.docx
ffffFicha 8 Nº.docxffffFicha 8 Nº.docx
ffffFicha 8 Nº.docx
 
Cisco Packet Tracer
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracer
 
Protocolos e redes industriais
Protocolos e redes industriaisProtocolos e redes industriais
Protocolos e redes industriais
 
Protocolos
ProtocolosProtocolos
Protocolos
 
Protocolos
ProtocolosProtocolos
Protocolos
 

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(); }