SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
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();
}

Weitere ähnliche Inhalte

Was ist angesagt?

Sistema operativo servidor
Sistema operativo servidorSistema operativo servidor
Sistema operativo servidorSandu Postolachi
 
Sistemas de Base de Dados
Sistemas de Base de DadosSistemas de Base de Dados
Sistemas de Base de DadosMariana Hiyori
 
Introducao redes
Introducao redesIntroducao redes
Introducao redesErikHR
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cactiIsraelCunha
 
SI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas DistribuidosSI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas DistribuidosFrederico Madeira
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01thomasdacosta
 
ACII - SL07 - Introducao aos sistemas distribuidos
ACII - SL07 - Introducao aos sistemas distribuidosACII - SL07 - Introducao aos sistemas distribuidos
ACII - SL07 - Introducao aos sistemas distribuidosUFPB
 
Gerenciamento e administração de Redes
Gerenciamento e administração de RedesGerenciamento e administração de Redes
Gerenciamento e administração de RedesHelder Lopes
 
Redes Avançadas - 3.Noções de Projeto de Redes
Redes Avançadas - 3.Noções de Projeto de RedesRedes Avançadas - 3.Noções de Projeto de Redes
Redes Avançadas - 3.Noções de Projeto de RedesMauro Tapajós
 
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
 

Was ist angesagt? (20)

Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]
Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]
Tecnologias Atuais de Redes - Aula 3 - VPN [Apostila]
 
Sistema operativo servidor
Sistema operativo servidorSistema operativo servidor
Sistema operativo servidor
 
Sistemas de Base de Dados
Sistemas de Base de DadosSistemas de Base de Dados
Sistemas de Base de Dados
 
49778140 projeto-de-rede
49778140 projeto-de-rede49778140 projeto-de-rede
49778140 projeto-de-rede
 
Protocolos de Rede para Internet das Coisas
Protocolos de Rede para Internet das CoisasProtocolos de Rede para Internet das Coisas
Protocolos de Rede para Internet das Coisas
 
Introducao redes
Introducao redesIntroducao redes
Introducao redes
 
Rede de computadores
Rede de computadoresRede de computadores
Rede de computadores
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cacti
 
Projeto de redes
Projeto de redesProjeto de redes
Projeto de redes
 
Analise de Requisitos Software
Analise de Requisitos SoftwareAnalise de Requisitos Software
Analise de Requisitos Software
 
SI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas DistribuidosSI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas Distribuidos
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
 
Roteamento
RoteamentoRoteamento
Roteamento
 
ACII - SL07 - Introducao aos sistemas distribuidos
ACII - SL07 - Introducao aos sistemas distribuidosACII - SL07 - Introducao aos sistemas distribuidos
ACII - SL07 - Introducao aos sistemas distribuidos
 
Firewall
FirewallFirewall
Firewall
 
Infraestrutura de Redes
Infraestrutura de RedesInfraestrutura de Redes
Infraestrutura de Redes
 
Gerenciamento e administração de Redes
Gerenciamento e administração de RedesGerenciamento e administração de Redes
Gerenciamento e administração de Redes
 
Redes Avançadas - 3.Noções de Projeto de Redes
Redes Avançadas - 3.Noções de Projeto de RedesRedes Avançadas - 3.Noções de Projeto de Redes
Redes Avançadas - 3.Noções de Projeto de Redes
 
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)
 
Conceito de processos
Conceito de processosConceito de processos
Conceito de processos
 

Ähnlich wie 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
 

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