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

Diferenças entre IPV4 e IPV6
Diferenças entre IPV4 e IPV6Diferenças entre IPV4 e IPV6
Diferenças entre IPV4 e IPV6José Alyson
 
Redes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redesRedes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redesLeonardo Bruno
 
Aula 1 - Redes sem fios - Introdução
Aula 1 - Redes sem fios - IntroduçãoAula 1 - Redes sem fios - Introdução
Aula 1 - Redes sem fios - IntroduçãoAndre Peres
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Redes - Enderecamento IP
Redes - Enderecamento IPRedes - Enderecamento IP
Redes - Enderecamento IPLuiz Arthur
 
Aula08 tecnologia atm
Aula08   tecnologia atmAula08   tecnologia atm
Aula08 tecnologia atmCarlos Veiga
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01thomasdacosta
 
Redes de computadores 2 - Protocolos
Redes de computadores 2 - ProtocolosRedes de computadores 2 - Protocolos
Redes de computadores 2 - ProtocolosJosé Ronaldo Trajano
 
Endereçamento IP
Endereçamento IPEndereçamento IP
Endereçamento IPPjpilin
 
Componentes de uma Rede de computadores
Componentes de uma Rede de computadoresComponentes de uma Rede de computadores
Componentes de uma Rede de computadoresFelipe Silva
 
Módulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, ApostilaMódulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, ApostilaPaulo Guimarães
 

Mais procurados (20)

Diferenças entre IPV4 e IPV6
Diferenças entre IPV4 e IPV6Diferenças entre IPV4 e IPV6
Diferenças entre IPV4 e IPV6
 
Redes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redesRedes de-computadores-tipos-de-redes
Redes de-computadores-tipos-de-redes
 
Aula 1 - Redes sem fios - Introdução
Aula 1 - Redes sem fios - IntroduçãoAula 1 - Redes sem fios - Introdução
Aula 1 - Redes sem fios - Introdução
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Redes - Enderecamento IP
Redes - Enderecamento IPRedes - Enderecamento IP
Redes - Enderecamento IP
 
Introducao as rede de computadores
Introducao as rede de computadoresIntroducao as rede de computadores
Introducao as rede de computadores
 
Aula08 tecnologia atm
Aula08   tecnologia atmAula08   tecnologia atm
Aula08 tecnologia atm
 
49778140 projeto-de-rede
49778140 projeto-de-rede49778140 projeto-de-rede
49778140 projeto-de-rede
 
Redes -aula_1o
Redes  -aula_1oRedes  -aula_1o
Redes -aula_1o
 
Topologias de rede
Topologias de redeTopologias de rede
Topologias de rede
 
Modelo de Referência OSI
Modelo de Referência OSIModelo de Referência OSI
Modelo de Referência OSI
 
Calculo de endereço ip
Calculo de endereço ipCalculo de endereço ip
Calculo de endereço ip
 
Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
 
Redes de computadores 2 - Protocolos
Redes de computadores 2 - ProtocolosRedes de computadores 2 - Protocolos
Redes de computadores 2 - Protocolos
 
Endereçamento IP
Endereçamento IPEndereçamento IP
Endereçamento IP
 
Endereçamento IPV4
Endereçamento IPV4Endereçamento IPV4
Endereçamento IPV4
 
Componentes de uma Rede de computadores
Componentes de uma Rede de computadoresComponentes de uma Rede de computadores
Componentes de uma Rede de computadores
 
Módulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, ApostilaMódulo 5 - Redes de Computadores e Internet, Apostila
Módulo 5 - Redes de Computadores e Internet, Apostila
 
Equipamentos de Rede
Equipamentos de RedeEquipamentos de Rede
Equipamentos de Rede
 
Arquitetura de Redes de Computadores
 Arquitetura de Redes de Computadores Arquitetura de Redes de Computadores
Arquitetura de Redes de Computadores
 

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