

Módulo Didático: MQTT
Prof. Jéfer Benedett Dörr
1. Introdução
Imagine conectar sensores, dispositivos e sistemas em tempo real, com eficiência e simplicidade, mesmo em ambientes com conexões instáveis ou limitadas. Essa é a proposta do MQTT (Message Queuing Telemetry Transport), um protocolo leve, robusto e amplamente utilizado em projetos de Internet das Coisas (IoT). Desenvolvido pela IBM nos anos 1990, o MQTT destaca-se pela sua capacidade de comunicação rápida e eficiente, utilizando o mínimo possível de recursos, sendo ideal para aplicações como automação residencial, agricultura de precisão e monitoramento industrial.
Neste módulo, você terá acesso a um guia completo, combinando teoria e prática, para dominar o uso do MQTT em sistemas distribuídos. Serão abordados os fundamentos do protocolo, a arquitetura publish/subscribe e o funcionamento de tópicos e brokers. Além disso, você colocará os conceitos aprendidos em prática utilizando ferramentas modernas e amplamente adotadas no mercado, como a biblioteca Paho-MQTT para programação em Python, o Node-RED para desenvolvimento visual de fluxos de comunicação, o Grafana para criação de dashboards interativos, e o HiveMQ como broker MQTT em nuvem.
Ao finalizar este módulo, você estará capacitado para projetar, implementar e gerenciar sistemas baseados em MQTT, apto a enfrentar desafios práticos reais e criar soluções inovadoras e escaláveis em diversos contextos da IoT e sistemas distribuídos.
2. O Protocolo MQTT
O MQTT (Message Queuing Telemetry Transport) é um protocolo de comunicação aberto, leve e eficiente, projetado para ambientes com recursos limitados, como redes com baixa largura de banda, alta latência ou conectividade intermitente. Baseado no modelo publish/subscribe, ele foi inicialmente desenvolvido pela IBM nos anos 1990 para monitoramento de oleodutos remotos e rapidamente se tornou um padrão amplamente adotado em aplicações de IoT e sistemas distribuídos.

2.1. Como o MQTT Funciona
O MQTT opera em uma arquitetura cliente-servidor centrada em um componente chamado broker. Clientes podem atuar como:
- Publisher: Envia mensagens ao broker.
- Subscriber: Recebe mensagens dos tópicos.
Tópicos são strings hierárquicas que organizam mensagens, funcionando como canais de comunicação. Por exemplo: sala/temperatura
.

2.2. Características Principais
- Leveza: Baixo consumo de recursos.
- Desacoplamento: Comunicação assíncrona via broker.
- Escalabilidade: Milhares de clientes simultâneos.
- Resiliência: Recursos como Last Will and Testament.
- Segurança: Autenticação, TLS/SSL, ACLs.
2.3. Níveis de Qualidade de Serviço (QoS)
O MQTT oferece três níveis de QoS:
- QoS 0 (At most once): Entrega rápida, sem garantia.
- QoS 1 (At least once): Garantia mínima de entrega, risco de duplicação.
- QoS 2 (Exactly once): Entrega garantida e única.

2.4. Exemplos de Aplicação
- Automação Residencial: Integração de dispositivos domésticos.
- Agricultura Inteligente: Sensores para gestão agrícola.
- Monitoramento Industrial: Métricas para manutenção preditiva.
- Logística: Rastreamento e otimização de rotas.
2.5. Comparação com Outros Protocolos
O MQTT, comparado a protocolos como HTTP e CoAP, oferece comunicação mais eficiente e assíncrona, especialmente útil em redes limitadas.
Critério | MQTT | HTTP | CoAP |
---|---|---|---|
Modelo de Comunicação | Publish/Subscribe (assíncrono, baseado em tópicos) | Cliente-Servidor (síncrono, baseado em requisição-resposta) | Cliente-Servidor (assíncrono, baseado em requisição-resposta) |
Protocolo de Transporte | TCP (com suporte a TLS para segurança) | TCP (HTTP/1.1, HTTP/2) ou TLS (HTTPS) | UDP (com DTLS opcional para segurança) |
Uso Principal | IoT, comunicação em tempo real, dispositivos com recursos limitados | Aplicações web, APIs, transferência de dados em larga escala | IoT, dispositivos com restrições severas (baixo consumo de energia) |
Eficiência de Banda | Alta (mensagens compactas, cabeçalhos mínimos) | Moderada a Baixa (cabeçalhos pesados, especialmente em HTTP/1.1) | Alta (projetado para mensagens pequenas e redes restritas) |
Consumo de Energia | Baixo (otimizado para dispositivos IoT com bateria) | Alto (conexões frequentes consomem mais energia) | Muito baixo (ideal para dispositivos com energia extremamente limitada) |
Qualidade de Serviço (QoS) | Suporta 3 níveis (QoS 0, 1, 2) para diferentes graus de confiabilidade | Não possui QoS formal (confiabilidade depende da aplicação) | Suporta confirmação opcional (CON) ou sem confirmação (NON) |
Tamanho do Payload | Otimizado para payloads pequenos (até 256 MB, mas usado para KB) | Suporta payloads grandes (ideal para arquivos, vídeos, etc.) | Otimizado para payloads muito pequenos (ideal para sensores) |
Segurança | TLS/SSL, autenticação por usuário/senha, ACLs | TLS/SSL (HTTPS), autenticação via cabeçalhos ou tokens | DTLS, opções de segurança limitadas por restrições de recursos |
Escalabilidade | Alta (um broker suporta milhares de clientes) | Moderada (servidores podem sofrer com muitas conexões simultâneas) | Alta (UDP reduz sobrecarga, mas depende da infraestrutura) |
Complexidade | Moderada (exige configuração de broker e tópicos) | Alta (gerenciamento de estado e sessões pode ser complexo) | Baixa (design simplificado para dispositivos restritos) |
Exemplo de Aplicação | Monitoramento de sensores (ex.: temperatura em agricultura inteligente) | APIs REST para aplicativos web (ex.: serviços em nuvem) | Sensores em redes mesh (ex.: iluminação pública inteligente) |
Vantagens |
- Leve e eficiente - Flexibilidade com tópicos - Resiliência em redes instáveis |
- Amplamente suportado - Ferramentas maduras - Ideal para web |
- Extremamente leve - Baixo consumo - Adequado para redes mesh |
Limitações |
- Dependência do broker - Menos eficiente para dados grandes |
- Alto consumo de recursos - Latência em IoT |
- Menor suporte a payloads grandes - Segurança mais complexa com DTLS |
2.6. Limitações do MQTT
- Dependência do Broker: Ponto único de falha.
- Payload Limitado: Não ideal para grandes volumes de dados.
- Complexidade QoS 2: Maior latência e processamento.
3. Arquitetura Publish/Subscribe
A arquitetura Publish/Subscribe (Pub/Sub) é o núcleo do protocolo MQTT e foi projetada para facilitar a comunicação assíncrona, eficiente e escalável entre dispositivos em sistemas distribuídos, especialmente em ambientes de Internet das Coisas (IoT). Diferentemente do modelo tradicional cliente-servidor, no Pub/Sub os dispositivos não se comunicam diretamente, mas sim por meio de um intermediário central: o broker.
3.1. Como Funciona o Modelo Publish/Subscribe
No modelo Pub/Sub, cada dispositivo conectado ao sistema pode assumir dois papéis:
- Publisher: Envia mensagens para tópicos específicos no broker.
- Subscriber: Inscreve-se em tópicos de interesse e recebe mensagens relacionadas.
O broker atua como ponto central, recebendo todas as mensagens dos publishers e distribuindo-as para os subscribers com base nos tópicos aos quais estão inscritos.

3.2. Tópicos e Wildcards
Os tópicos funcionam como canais identificados por strings hierárquicas, como casa/sala/temperatura
. Essa estrutura organiza a comunicação e permite grande escalabilidade.
Para maior flexibilidade, o MQTT oferece dois wildcards:
- +: Corresponde a um único nível. Ex.:
casa/+/temperatura
. - #: Corresponde a vários níveis. Ex.:
casa/#
.

3.3. Vantagens do Modelo Pub/Sub
- Escalabilidade: Um único broker pode gerenciar milhares de dispositivos.
- Eficiência: Redução de tráfego desnecessário na rede.
- Flexibilidade: A estrutura de tópicos permite personalizações avançadas.
- Resiliência: Funciona mesmo com falhas temporárias de conectividade.
- Simplicidade: Design claro, com papéis bem definidos para cada cliente.
3.4. Limitações
- Dependência do broker: Pode se tornar um ponto único de falha.
- Gerenciamento de tópicos: Pode se tornar complexo em sistemas grandes.
- Latência em QoS elevado: Maior sobrecarga em ambientes com QoS 2.
3.5. Exemplo Prático
Imagine uma casa inteligente com um sensor de movimento que publica detectado
no tópico sala/movimento
. Um controlador inscrito nesse tópico envia um comando para sala/luz/estado
com o valor ligar
. A lâmpada, inscrita nesse último tópico, recebe o comando e acende.
3.6. Comparação com Outros Modelos
No modelo cliente-servidor (como no HTTP), a comunicação é síncrona e exige conexões diretas. No Pub/Sub, o modelo é assíncrono, ideal para IoT. Já o modelo ponto-a-ponto, apesar de simples, não escala bem.
3.7. Papel no MQTT
O modelo Pub/Sub implementado no MQTT explora ao máximo os recursos do protocolo, como leveza, tópicos hierárquicos, wildcards e QoS. Isso o torna ideal para aplicações que exigem comunicação eficiente, confiável e em tempo real entre múltiplos dispositivos.
4. Ferramentas Utilizadas
Este módulo faz uso de um conjunto integrado de ferramentas amplamente reconhecidas no mercado para proporcionar uma aprendizagem prática e aplicada do protocolo MQTT. Essas ferramentas cobrem todas as etapas do desenvolvimento de soluções IoT: da programação e simulação de dispositivos até a visualização e monitoramento de dados em tempo real.
4.1. Visão Geral das Ferramentas
- Paho-MQTT (Python): Biblioteca oficial da Eclipse Foundation para desenvolvimento de clientes MQTT em Python. Utilizada para simular sensores, atuadores e automatizar envios/recebimentos de mensagens.
- Node-RED: Plataforma de desenvolvimento visual baseada em fluxos, ideal para integrar e manipular dados MQTT sem necessidade de programação complexa.
- Grafana: Ferramenta de visualização para dashboards interativos, usada para exibir dados de sensores em tempo real.
- HiveMQ: Broker MQTT em nuvem usado como ponto central de comunicação entre dispositivos e sistemas distribuídos.
- MQTT Explorer: Cliente gráfico usado para debugar e visualizar a árvore de tópicos MQTT durante o desenvolvimento.

4.2. Integração das Ferramentas no Fluxo de Trabalho
As ferramentas se complementam em um fluxo de trabalho coeso, que será explorado nos projetos práticos:
- Desenvolvimento: Simulação de dispositivos e scripts MQTT com Python + Paho.
- Prototipagem: Criação de lógicas com Node-RED (ex.: automações, dashboards).
- Comunicação: Troca de mensagens centralizada via broker HiveMQ.
- Visualização: Dashboards interativos com Grafana.
- Depuração: Inspeção e testes com MQTT Explorer.

4.3. Benefícios Educacionais
- Didática prática: Foco em atividades reais com simulações e dashboards.
- Acessibilidade: Todas as ferramentas têm versões gratuitas ou open-source.
- Relevância profissional: Amplamente usadas em projetos de IoT e na indústria.
- Progressão natural: Suporte a tarefas simples e também a desafios mais avançados.
4.4. Alternativas Complementares
Outras ferramentas e bibliotecas poderão ser exploradas em fases avançadas ou projetos pessoais:
- Mosquitto: Broker leve para instalação local.
- InfluxDB + Telegraf: Armazenamento de séries temporais para uso com Grafana.
- MQTT.js: Cliente MQTT para aplicações em JavaScript.
- MQTT Lens: Alternativa ao MQTT Explorer com interface distinta.
4.5. Preparação para os Projetos
As ferramentas serão utilizadas em conjunto na seção de Projetos Práticos. Um exemplo será a criação de um sistema completo de monitoramento de temperatura com:
- Simulador de sensor em Python (Paho-MQTT);
- Processamento e lógica de controle no Node-RED;
- Envio e recebimento de mensagens via HiveMQ;
- Visualização em tempo real com Grafana;
- Depuração e testes com MQTT Explorer.
5. Uso do Paho-MQTT
A biblioteca Paho-MQTT, mantida pela Eclipse Foundation, é uma das ferramentas mais populares e versáteis para desenvolver clientes MQTT em Python. Com uma API intuitiva, suporte a autenticação, TLS/SSL e múltiplos níveis de QoS, ela permite a criação de sensores e atuadores virtuais, simulação de cenários IoT e integração com sistemas distribuídos em tempo real.
5.1. Instalação
Instale a biblioteca com:
pip3 install paho-mqtt==2.1.0
Recomenda-se o uso de ambientes virtuais para evitar conflitos:
python3 -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip3 install paho-mqtt==2.1.0
5.2. Estrutura Básica
- Criação do cliente (
mqtt.Client()
); - Definição dos callbacks (
on_connect
,on_message
); - Conexão ao broker (
connect()
); - Publicação/subscrição em tópicos;
- Manutenção do loop (
loop_forever()
ouloop_start()
).
5.3. Exemplo: Sensor Virtual
import paho.mqtt.client as mqtt
import time, random
broker = "broker.hivemq.com"
topico = "ufpr/iot/temperatura"
cliente = mqtt.Client(client_id=f"sensor-{random.randint(0, 999)}")
cliente.connect(broker)
while True:
temperatura = round(random.uniform(20, 30), 2)
cliente.publish(topico, f"{temperatura}")
print(f"Publicado: {temperatura} °C")
time.sleep(5)
5.4. Exemplo: Atuador com Lógica
import paho.mqtt.client as mqtt
def on_connect(c, u, f, rc):
if rc == 0:
print("Conectado!")
c.subscribe("ufpr/iot/temperatura")
def on_message(c, u, msg):
valor = float(msg.payload.decode())
print(f"Temperatura: {valor} °C")
print("Ventilador: LIGADO" if valor > 28 else "Ventilador: DESLIGADO")
cliente = mqtt.Client("atuador-ventilador")
cliente.on_connect = on_connect
cliente.on_message = on_message
cliente.connect("broker.hivemq.com")
cliente.loop_forever()
5.5. Cliente Seguro com TLS
import paho.mqtt.client as mqtt, ssl
cliente = mqtt.Client("cliente-seguro")
cliente.username_pw_set("usuario", "senha")
cliente.tls_set(tls_version=ssl.PROTOCOL_TLSv1_2)
cliente.connect("seu-broker.hivemq.cloud", 8883)
cliente.loop_start()
5.6. Sensor com Reconexão
def on_disconnect(client, userdata, rc):
print("Desconectado. Reconectando...")
client.reconnect()
5.7. Boas Práticas
- Use
client_id
único para evitar desconexões. - Implemente reconexão automática.
- Use JSON como payload para dados complexos.
- Adicione logs com
on_log
para debug. - Combine com ferramentas como MQTT Explorer para validação.
5.8. Aplicações no Curso
- Sensores e atuadores virtuais em projetos práticos;
- Comunicação com Node-RED e Grafana via HiveMQ;
- Exploração de tópicos, QoS e segurança em MQTT.

6. Uso do Node-RED
O Node-RED é uma plataforma de desenvolvimento visual baseada em fluxogramas, criada pela IBM e mantida como projeto open-source. Amplamente utilizada em projetos de Internet das Coisas (IoT), automação, integração de APIs e prototipagem rápida, ela permite criar sistemas conectados arrastando e conectando blocos (nodes) em uma interface intuitiva. Com pouco ou nenhum código, os alunos podem construir fluxos complexos que integram dispositivos MQTT, processam dados e exibem resultados em tempo real, reduzindo a curva de aprendizado e incentivando a experimentação.
Por que usar Node-RED?
- Baixa curva de aprendizado: Interface visual intuitiva
- Rápida prototipagem: Crie soluções complexas em minutos
- Extensibilidade: Mais de 3.000 nodes disponíveis na biblioteca
- Integração nativa: Suporte a MQTT, HTTP, WebSockets e mais
- Multiplataforma: Executa em Windows, Linux, macOS e até Raspberry Pi
6.1. Instalação Detalhada
6.1.1. Linux (Ubuntu, Mint, Debian)
Para instalação em sistemas baseados em Debian:
- Atualize o sistema:
sudo apt update && sudo apt upgrade -y
- Instale Node.js e npm (recomendamos a versão LTS):
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs
- Verifique as versões:
node -v # Deve retornar v20.x.x npm -v # Deve retornar 10.x.x
- Instale o Node-RED globalmente:
sudo npm install -g --unsafe-perm node-red
- Inicie o Node-RED:
node-red
- (Opcional) Configure como serviço para inicialização automática:
sudo systemctl enable nodered.service sudo systemctl start nodered.service
- Acesse no navegador: http://localhost:1880
6.1.2. Windows
Para instalação no Windows:
- Baixe e instale o Node.js (LTS) em nodejs.org
- Verifique a instalação no Prompt de Comando:
node -v npm -v
- Instale o Node-RED:
npm install -g --unsafe-perm node-red
- Inicie:
node-red
- Acesse: http://localhost:1880
Explicação do código de instalação
O comando npm install -g
instala o Node-RED globalmente no sistema, permitindo que seja executado de qualquer diretório. A flag --unsafe-perm
é necessária para evitar problemas de permissão em alguns sistemas.
6.2. Conceitos Fundamentais
Nodes
Blocos básicos de funcionalidade no Node-RED. Cada node tem uma função específica e pode ser configurado.
// Exemplo de node function
if (msg.payload > 30) {
msg.alert = "ALERTA: Temperatura alta!";
}
return msg;
Fluxos
Sequência de nodes conectados que formam uma lógica de processamento.

Mensagens
Objetos que transitam entre os nodes, contendo dados no formato JSON.
{
"payload": 25.5,
"topic": "sensor/temperatura",
"timestamp": 1625097600
}
6.3. Exemplos Avançados
6.3.1. Integração com Banco de Dados
Armazenando dados MQTT em um banco de dados SQLite:
// Instale o node-red-node-sqlite
npm install node-red-node-sqlite
// Fluxo exemplo:
1. MQTT In (tópico: "sensor/umidade")
2. Function Node:
msg.query = "INSERT INTO sensor_data VALUES(datetime('now'), " +
msg.payload + ");";
return msg;
3. SQLite Node (configurado com arquivo 'dados.db')
4. Debug Node para verificação
6.3.2. API REST com Node-RED
Criando um endpoint para consulta de dados:
1. HTTP In Node (GET /api/temperatura)
2. Function Node:
// Consulta ao banco de dados
msg.query = "SELECT * FROM sensor_data ORDER BY timestamp DESC LIMIT 1";
return msg;
3. SQLite Node
4. Function Node para formatar resposta:
msg.payload = {
temperatura: msg.payload[0].value,
timestamp: msg.payload[0].timestamp
};
return msg;
5. HTTP Response Node
6.4. Boas Práticas
- Organização: Use tabs para separar fluxos lógicos diferentes
- Comentários: Adicione notes para explicar fluxos complexos
- Versionamento: Exporte regularmente seus fluxos para arquivos JSON
- Segurança: Proteja a interface de administração com autenticação
- Monitoramento: Use o node 'status' para verificar saúde dos nodes
6.5. Solução de Problemas Comuns
Problema | Solução |
---|---|
Node-RED não inicia | Verifique logs com node-red --verbose . Pode ser conflito de porta ou problema de permissão. |
Nodes não aparecem na paleta | Execute npm install no diretório ~/.node-red e reinicie. |
Erros de conexão MQTT | Verifique se o broker está acessível e as credenciais estão corretas. |
Alta utilização de CPU | Verifique loops infinitos em function nodes e limite de mensagens por segundo. |
6.6. Recursos Adicionais
Ideia de Projeto: Sistema de Monitoramento Ambiental
Combine Node-RED com MQTT para criar um sistema completo:
- Simule sensores de temperatura/umidade com Paho-MQTT
- Configure Node-RED para processar os dados
- Armazene em banco de dados SQLite
- Crie dashboard para visualização
- Implemente alertas por e-mail quando valores ultrapassarem limites
7. Dashboards com Grafana e HiveMQ
Em projetos de Internet das Coisas (IoT), a visualização de dados é crucial para monitorar dispositivos, identificar padrões e tomar decisões em tempo real. Combinando o HiveMQ, um broker MQTT escalável, com o Grafana, uma plataforma open-source líder em visualização, os alunos podem criar dashboards interativos que exibem métricas de sensores, estados de atuadores e eventos, transformando mensagens MQTT em insights acionáveis.
Grafana
- Visualização profissional
- Suporte a múltiplas fontes de dados
- Alertas avançados
- Histórico de dados
Node-RED Dashboard
- Prototipagem rápida
- Integração direta com MQTT
- Configuração simples
- Ideal para projetos pequenos
7.1. Arquitetura de Integração Avançada

Dispositivos IoT publicam dados via MQTT para o HiveMQ
Telegraf coleta os dados e envia para InfluxDB
Grafana visualiza os dados armazenados no InfluxDB
7.2. Configuração Detalhada das Ferramentas
Configuração do HiveMQ Cloud
- Acesse hivemq.com/mqtt-cloud
- Crie um cluster gratuito
- Configure autenticação:
# Exemplo de conexão Python com autenticação import paho.mqtt.client as mqtt client = mqtt.Client() client.username_pw_set("seu-usuario", "sua-senha") client.connect("seu-cluster.s1.eu.hivemq.cloud", 8883)
Instalação do InfluxDB 2.x
# Ubuntu/Debian
wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian stable main" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update
sudo apt install influxdb2
sudo systemctl start influxdb
Após instalação, acesse http://localhost:8086 para configurar:
- Crie um bucket chamado "iot_data"
- Gere um token de acesso
- Configure uma organização
Configuração Completa do Telegraf
Arquivo /etc/telegraf/telegraf.conf
:
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.hivemq.com:1883"]
topics = [
"ufpr/iot/temperatura",
"ufpr/iot/umidade",
"ufpr/iot/status"
]
data_format = "value"
data_type = "float" # Para dados numéricos
[[outputs.influxdb_v2]]
urls = ["http://localhost:8086"]
token = "$INFLUX_TOKEN"
organization = "ufpr"
bucket = "iot_data"
Configuração Avançada do Grafana
- Adicione fonte de dados InfluxDB
- Configure query para dashboard:
from(bucket: "iot_data") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "mqtt_consumer") |> filter(fn: (r) => r._field == "value") |> aggregateWindow(every: 1m, fn: mean)
- Configure alertas e notificações
7.3. Exemplos Práticos Aprimorados
Dashboard completo para monitorar temperatura, umidade e qualidade do ar:
Publicador Simulado (Python)
import paho.mqtt.client as mqtt
import random, time
client = mqtt.Client()
client.connect("broker.hivemq.com", 1883)
while True:
temp = round(random.uniform(20, 35), 1)
hum = random.randint(40, 90)
aqi = random.randint(0, 500)
client.publish("ambiente/sensor1/temperatura", temp)
client.publish("ambiente/sensor1/umidade", hum)
client.publish("ambiente/sensor1/aqi", aqi)
time.sleep(30)
Configuração Telegraf
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.hivemq.com:1883"]
topics = [
"ambiente/+/temperatura",
"ambiente/+/umidade",
"ambiente/+/aqi"
]
data_format = "value"
data_type = "float"
Painéis do Grafana
- Gauge para temperatura atual com zonas de alerta
- Graph com histórico de 24 horas
- Stat para AQI (Índice de Qualidade do Ar)
- Alertas configurados para valores críticos
Sistema para monitorar vibração de máquinas e disparar alertas:
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.hivemq.com:1883"]
topics = ["fabrica/linha1/vibracao"]
data_format = "value"
data_type = "float"
[[processors.starlark]]
source = '''
def apply(metric):
if metric.fields["value"] > 5.0:
metric.fields["status"] = "CRITICO"
elif metric.fields["value"] > 3.0:
metric.fields["status"] = "ALERTA"
else:
metric.fields["status"] = "NORMAL"
return metric
'''
Configuração do Grafana:
- Painel de status com cores condicionais
- Gráfico de tendência de vibração
- Notificações via webhook para equipe de manutenção
7.4. Node-RED Dashboard como Alternativa

Implementação Rápida
- Instale o pacote:
npm install node-red-dashboard
- Crie um fluxo simples:
[MQTT In] -> [Function] -> [UI Gauge]
- Acesse em:
http://localhost:1880/ui
Recurso | Grafana | Node-RED Dashboard |
---|---|---|
Curva de aprendizado | Moderada | Baixa |
Visualizações | Profissionais e completas | Básicas |
Armazenamento | Banco de dados externo | Memória (volátil) |
Melhor para | Sistemas de produção | Protótipos rápidos |
7.5. Integração com Hardware Real
ESP32 com Sensor DHT22
#include
#include
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
dht.begin();
client.setServer("broker.hivemq.com", 1883);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (!isnan(h) && !isnan(t)) {
client.publish("ufpr/iot/temperatura", String(t).c_str());
client.publish("ufpr/iot/umidade", String(h).c_str());
}
delay(10000);
}
Raspberry Pi com MQTT e Grafana
Instale Grafana diretamente no Raspberry Pi:
# No Raspberry Pi OS
curl -s https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
7.6. Boas Práticas e Otimizações
Estrutura de Tópicos
Use hierarquia lógica para facilitar gerenciamento:
localizacao/dispositivo/tipo-dado
ex:
ufpr/lab1/temperatura
ufpr/lab1/umidade
casa/sala/iluminacao
Otimização de Dados
- Defina intervalos de publicação adequados
- Use QoS apropriado (0 para dados não críticos)
- Considere compactação para grandes volumes
Segurança
- Use TLS para conexões externas
- Implemente autenticação no broker
- Restrinja tópicos sensíveis
7.7. Dicas Avançadas
- Transformação de Dados: Use o Telegraf para processar dados antes do InfluxDB
- Alertas Inteligentes: Configure alertas no Grafana baseados em tendências
- Deploy em Nuvem: Execute o Grafana em serviços como AWS ou Azure
- Plugins Úteis:
- Grafana: Plugin para mapas geográficos
- Node-RED: Node para gráficos avançados
8. Instalação das Ferramentas
Esta seção fornece um guia completo para instalar as ferramentas utilizadas no módulo MQTT, cobrindo Python com Paho-MQTT, Node-RED, InfluxDB, Telegraf, Grafana, MQTT Explorer e brokers MQTT. As instruções são detalhadas para Linux (Ubuntu, Linux Mint, Debian), com adaptações para Windows e macOS, além de alternativas para ambientes restritos (ex.: laboratórios de universidade).

Python + Paho-MQTT
Para desenvolvimento de clientes MQTT

Node-RED
Plataforma de fluxos visuais para IoT

InfluxDB + Telegraf
Armazenamento e coleta de dados temporais

Grafana
Visualização de dados em dashboards
8.1. Instalação no Linux (Ubuntu/Debian)
- Instale o Python e pip:
sudo apt update sudo apt install -y python3 python3-pip python3-venv
- Crie e ative ambiente virtual:
python3 -m venv mqtt-venv source mqtt-venv/bin/activate
- Instale Paho-MQTT:
pip3 install paho-mqtt==2.1.0
- Verifique:
python3 -c "import paho.mqtt.client; print(paho.mqtt.client.__version__)"
- Instale Node.js:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs
- Instale Node-RED:
sudo npm install -g --unsafe-perm node-red
- Inicie como serviço:
sudo systemctl enable nodered.service sudo systemctl start nodered.service
- Instale Dashboard:
cd ~/.node-red npm install node-red-dashboard
- Adicione repositório:
wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - echo "deb https://repos.influxdata.com/debian stable main" | sudo tee /etc/apt/sources.list.d/influxdb.list
- Instale pacotes:
sudo apt update sudo apt install -y influxdb2 telegraf
- Configure Telegraf:
[[inputs.mqtt_consumer]] servers = ["tcp://broker.hivemq.com:1883"] topics = ["ufpr/iot/#"] data_format = "value" data_type = "float" [[outputs.influxdb_v2]] urls = ["http://localhost:8086"] token = "SEU-TOKEN" organization = "ufpr" bucket = "iot_dados"
- Adicione repositório:
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
- Instale e inicie:
sudo apt update sudo apt install -y grafana sudo systemctl enable grafana-server sudo systemctl start grafana-server
8.2. Instalação no Windows
Python e Paho-MQTT
- Baixe Python em python.org
- Marque "Add Python to PATH"
- Instale Paho-MQTT:
pip install paho-mqtt==2.1.0
Node-RED
- Instale Node.js LTS
- Execute:
npm install -g --unsafe-perm node-red node-red
InfluxDB + Telegraf
- Baixe instaladores em influxdata.com
- Configure
telegraf.conf
como no Linux
Grafana
- Baixe instalador em grafana.com
- Siga o assistente de instalação
8.3. Instalação no macOS
Via Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Python e Paho-MQTT
brew install python
python3 -m venv mqtt-venv
source mqtt-venv/bin/activate
pip3 install paho-mqtt==2.1.0
Node-RED
brew install node
sudo npm install -g --unsafe-perm node-red
node-red
InfluxDB + Telegraf + Grafana
brew install influxdb telegraf grafana
brew services start influxdb
brew services start telegraf
brew services start grafana
8.4. Verificação Pós-Instalação
Teste do Fluxo Completo
- Publique dados com Python:
import paho.mqtt.client as mqtt client = mqtt.Client() client.connect("broker.hivemq.com", 1883) client.publish("ufpr/iot/teste", "42.5")
- Verifique no InfluxDB Data Explorer
- Confira no Grafana
Portas e Serviços
Ferramenta | Porta | Comando Status |
---|---|---|
Node-RED | 1880 | systemctl status nodered |
InfluxDB | 8086 | systemctl status influxdb |
Grafana | 3000 | systemctl status grafana-server |
8.5. Solução de Problemas
Problemas com Python
- Erro de permissão: Use
--user
ou ambientes virtuais - Versão incorreta: Verifique com
python3 --version
Node-RED não inicia
- Verifique portas conflitantes
- Execute com
node-red --verbose
para logs detalhados
Telegraf sem dados
- Teste configuração com
telegraf --test
- Verifique conexão com o broker MQTT
Grafana sem conexão
- Confira token do InfluxDB
- Verifique se o InfluxDB está acessível
8.6. Configuração para Laboratórios
Instalação Offline
Para computadores sem internet:
- Baixe pacotes .deb/.exe/.pkg em outra máquina
- Transfira via USB
- Instale manualmente
Configuração Segura
- Altere senhas padrão (Grafana, Node-RED)
- Use brokers locais (Mosquitto) em vez de nuvem
- Restrinja acesso às portas
Script de Instalação
Para instalação automatizada em múltiplas máquinas:
#!/bin/bash
# Instala todas as dependências
sudo apt update
sudo apt install -y python3 python3-pip python3-venv
pip3 install paho-mqtt
# Instala Node-RED
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g --unsafe-perm node-red
# ... (adicionar outras ferramentas)
8.7. Métodos Alternativos
Instalação via Docker
Para sistemas com Docker instalado:
Node-RED
docker run -d -p 1880:1880 -v node_red_data:/data --name nodered nodered/node-red
InfluxDB + Grafana
docker run -d -p 8086:8086 -v influxdb_data:/var/lib/influxdb2 influxdb:latest
docker run -d -p 3000:3000 -v grafana_data:/var/lib/grafana grafana/grafana
Imagem de Máquina Virtual
Para quem prefere um ambiente pronto:
- Baixe nossa imagem VM pré-configurada
- Importe no VirtualBox ou VMware
- Todas as ferramentas já estarão instaladas
- Credenciais de acesso: usuário
aluno
, senhaiot2024
8.8. Integração com o Curso
Com essas ferramentas instaladas, os alunos poderão:
Desenvolver clientes MQTT com Python
Criar fluxos de automação no Node-RED
Armazenar dados no InfluxDB via Telegraf
Visualizar em dashboards com Grafana
9. Projetos Práticos com MQTT
Esta seção apresenta projetos práticos que consolidam os conhecimentos adquiridos no módulo MQTT, combinando ferramentas como Paho-MQTT, Node-RED, Grafana, HiveMQ e MQTT Explorer. Cada projeto foi projetado para ser executado em laboratório, com opções para simulação ou hardware real.
Objetivos de Aprendizado
- Implementar sistemas IoT completos com MQTT
- Integrar múltiplas ferramentas em fluxos de trabalho
- Desenvolver soluções para problemas reais
- Praticar prototipagem rápida e visualização de dados
9.1. Monitoramento Ambiental
InicianteSistema completo para monitorar temperatura e umidade com alertas e visualização em tempo real.
Componentes Principais
- Sensor DHT22 (simulado ou real)
- Dashboard interativo
- Histórico de dados
9.2. Detecção de Motosserra
IntermediárioSistema de alerta para detecção de sons de motosserra em áreas florestais.
Componentes Principais
- Análise de espectro de frequência
- Alertas em tempo real
- Notificações remotas
9.3. Reconhecimento de Animais
AvançadoSistema de monitoramento de fauna com detecção de animais e alertas visuais.
Componentes Principais
- Modelo de detecção de animais
- Mapa de ocorrências
- Registro histórico
9.1. Monitoramento de Temperatura e Umidade com Dashboard
Objetivo
Criar um sistema completo para monitoramento ambiental com:
- Coleta de dados de sensores
- Transmissão via MQTT
- Visualização em tempo real
- Alertas automáticos
Fluxo de Dados
- Sensor → MQTT → Node-RED
- Node-RED → InfluxDB
- InfluxDB → Grafana
- Grafana → Alertas

Simulador de Sensor Python
import paho.mqtt.client as mqtt
import time, random
client = mqtt.Client("sensor-ambiental")
client.connect("broker.hivemq.com", 1883)
while True:
temp = round(random.uniform(20, 35), 2)
umid = round(random.uniform(40, 80), 2)
client.publish("ufpr/iot/temperatura", temp)
client.publish("ufpr/iot/umidade", umid)
print(f"Temp: {temp}°C, Umid: {umid}%")
time.sleep(5)
Configuração Telegraf
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.hivemq.com:1883"]
topics = ["ufpr/iot/temperatura", "ufpr/iot/umidade"]
data_format = "value"
data_type = "float"
[[outputs.influxdb_v2]]
urls = ["http://localhost:8086"]
token = "SEU_TOKEN"
organization = "ufpr"
bucket = "iot_dados"
Fluxo Node-RED

Passos para Configuração:
- Adicione nodes MQTT de entrada para cada tópico
- Conecte a nodes de dashboard (gauge, chart)
- Configure um node de função para alertas:
if (msg.payload > 30) { msg.alert = "ALERTA: Temperatura alta!"; } else { msg.alert = "Normal"; } return msg;
- Implante o fluxo
Dashboard Grafana

Configuração:
- Crie nova fonte de dados InfluxDB
- Adicione painel com query:
from(bucket: "iot_dados") |> range(start: v.timeRangeStart) |> filter(fn: (r) => r._measurement == "mqtt_consumer") |> filter(fn: (r) => r._field == "value") |> filter(fn: (r) => r.topic == "ufpr/iot/temperatura")
- Configure alertas para valores > 30°C
9.2. Detecção de Som de Motosserra na Floresta

Arquitetura do Sistema
Este projeto implementa uma solução completa para monitoramento acústico em áreas florestais:
Captura de Áudio
Microfone conectado a Raspberry Pi ou computador
Processamento
Análise de espectro de frequência em Python
Comunicação
Alertas transmitidos via MQTT
Visualização
Dashboard Node-RED com histórico no Grafana
Implementação do Detector
Detecção por Frequência
import sounddevice as sd
import numpy as np
import paho.mqtt.client as mqtt
# Configuração MQTT
client = mqtt.Client("detector-motosserra")
client.connect("broker.hivemq.com", 1883)
def audio_callback(indata, frames, time_info, status):
# Transformada de Fourier
freq = np.fft.fftfreq(len(indata), 1/44100)
fft = np.abs(np.fft.fft(indata[:, 0]))
# Verifica picos na faixa de motosserra (500-2000Hz)
if np.max(fft[(freq > 500) & (freq < 2000)]) > 1000:
client.publish("floresta/alerta", "Motosserra detectada!")
print("Alerta enviado!")
# Inicia captura
with sd.InputStream(callback=audio_callback,
samplerate=44100,
channels=1):
print("Monitorando ambiente...")
while True:
time.sleep(0.1)
Simulação para Testes
# Simulador para laboratório
import time, random
import paho.mqtt.client as mqtt
client = mqtt.Client("simulador-motosserra")
client.connect("broker.hivemq.com", 1883)
while True:
if random.random() > 0.7: # 30% chance de alerta
client.publish("floresta/alerta", "Motosserra detectada!")
print("Alerta simulado enviado")
time.sleep(10)
Fluxo Node-RED

Configuração básica para receber alertas e acionar notificações
Técnicas Avançadas
Machine Learning
Implementação de modelo TensorFlow para melhorar a precisão da detecção:
# Carrega modelo pré-treinado
model = tf.keras.models.load_model('motosserra_model.h5')
# Extrai features (ex.: MFCC)
mfccs = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=40)
prediction = model.predict(mfccs.T.mean(axis=0).reshape(1, -1))
Notificações Multiplataforma
Configuração no Node-RED para enviar alertas por:
- E-mail (node-red-contrib-email)
- Telegram (node-red-contrib-telegrambot)
- SMS (via Twilio)
9.3. Sistema de Identificação de Animais
Visão Geral
Sistema completo para monitoramento de fauna silvestre com:
- Captura de imagens por câmera trap
- Processamento em tempo real
- Alertas para espécies específicas
- Mapa de ocorrências

Implementação
Versão para Simulação em Laboratório
import paho.mqtt.client as mqtt
import time, random
client = mqtt.Client("camera-trap-sim")
client.connect("broker.hivemq.com", 1883)
animais = ["onca", "veado", "tamandua", "nada"]
while True:
animal = random.choice(animais)
if animal == "onca":
client.publish("floresta/animais",
"Onça detectada! -15.123,-45.321")
print("Alerta: Onça detectada!")
time.sleep(15)
Implementação com OpenCV
import cv2
import paho.mqtt.client as mqtt
# Carrega classificador Haar Cascade
animal_cascade = cv2.CascadeClassifier('haarcascade_animal.xml')
client = mqtt.Client("camera-trap")
client.connect("broker.hivemq.com", 1883)
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
animais = animal_cascade.detectMultiScale(gray, 1.3, 5)
if len(animais) > 0:
client.publish("floresta/animais",
f"Animal detectado - {len(animais)} objetos")
cv2.imshow('Camera Trap', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
Implementação com YOLO
from ultralytics import YOLO
import paho.mqtt.client as mqtt
model = YOLO('yolov8n.pt') # Modelo pré-treinado
client = mqtt.Client("camera-trap-yolo")
client.connect("broker.hivemq.com", 1883)
results = model.track(source=0, show=True, stream=True)
for r in results:
if 'animal' in r.names.values():
client.publish("floresta/animais",
f"{r.names[0]} detectado - {r.boxes.xyxy}")
Visualização no Node-RED

Elementos do Dashboard:
- Card de último animal detectado
- Mapa com localização
- Histórico de detecções
- Controle de sensibilidade
9.4. Outros Projetos do Módulo
Irrigação Automatizada
Sistema inteligente para agricultura com base em umidade do solo
AgriculturaRastreamento de Veículos
Monitoramento GPS em tempo real com histórico de rotas
GPSControle por Voz
Automação residencial com comandos de voz via MQTT
Reconhecimento de Voz9.5. Integração com o Curso

Simulação de dispositivos e sensores

Orquestração e automação de fluxos

Visualização profissional de dados

Comunicação centralizada via MQTT
Resultados de Aprendizado
- Domínio dos conceitos de publish/subscribe
- Integração de múltiplas tecnologias IoT
- Desenvolvimento de soluções para problemas reais
- Prototipagem rápida de sistemas distribuídos
9. Projetos Práticos com MQTT
Esta seção apresenta projetos práticos que consolidam os conhecimentos adquiridos no módulo MQTT, combinando ferramentas como Paho-MQTT, Node-RED, Grafana, HiveMQ e MQTT Explorer. Cada projeto foi projetado para ser executado em laboratório, com opções para simulação ou hardware real.
Objetivos de Aprendizado
- Implementar sistemas IoT completos com MQTT
- Integrar múltiplas ferramentas em fluxos de trabalho
- Desenvolver soluções para problemas reais
- Praticar prototipagem rápida e visualização de dados
9.1. Monitoramento Ambiental
InicianteSistema completo para monitorar temperatura e umidade com alertas e visualização em tempo real.
Componentes Principais
- Sensor DHT22 (simulado ou real)
- Dashboard interativo
- Histórico de dados
9.2. Detecção de Motosserra
IntermediárioSistema de alerta para detecção de sons de motosserra em áreas florestais.
Componentes Principais
- Análise de espectro de frequência
- Alertas em tempo real
- Notificações remotas
9.3. Reconhecimento de Animais
AvançadoSistema de monitoramento de fauna com detecção de animais e alertas visuais.
Componentes Principais
- Modelo de detecção de animais
- Mapa de ocorrências
- Registro histórico
9.1. Monitoramento de Temperatura e Umidade com Dashboard
Objetivo
Criar um sistema completo para monitoramento ambiental com:
- Coleta de dados de sensores
- Transmissão via MQTT
- Visualização em tempo real
- Alertas automáticos
Fluxo de Dados
- Sensor → MQTT → Node-RED
- Node-RED → InfluxDB
- InfluxDB → Grafana
- Grafana → Alertas

Simulador de Sensor Python
import paho.mqtt.client as mqtt
import time, random
client = mqtt.Client("sensor-ambiental")
client.connect("broker.hivemq.com", 1883)
while True:
temp = round(random.uniform(20, 35), 2)
umid = round(random.uniform(40, 80), 2)
client.publish("ufpr/iot/temperatura", temp)
client.publish("ufpr/iot/umidade", umid)
print(f"Temp: {temp}°C, Umid: {umid}%")
time.sleep(5)
Configuração Telegraf
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.hivemq.com:1883"]
topics = ["ufpr/iot/temperatura", "ufpr/iot/umidade"]
data_format = "value"
data_type = "float"
[[outputs.influxdb_v2]]
urls = ["http://localhost:8086"]
token = "SEU_TOKEN"
organization = "ufpr"
bucket = "iot_dados"
Fluxo Node-RED

Passos para Configuração:
- Adicione nodes MQTT de entrada para cada tópico
- Conecte a nodes de dashboard (gauge, chart)
- Configure um node de função para alertas:
if (msg.payload > 30) { msg.alert = "ALERTA: Temperatura alta!"; } else { msg.alert = "Normal"; } return msg;
- Implante o fluxo
Dashboard Grafana

Configuração:
- Crie nova fonte de dados InfluxDB
- Adicione painel com query:
from(bucket: "iot_dados") |> range(start: v.timeRangeStart) |> filter(fn: (r) => r._measurement == "mqtt_consumer") |> filter(fn: (r) => r._field == "value") |> filter(fn: (r) => r.topic == "ufpr/iot/temperatura")
- Configure alertas para valores > 30°C
9.2. Detecção de Som de Motosserra na Floresta

Arquitetura do Sistema
Este projeto implementa uma solução completa para monitoramento acústico em áreas florestais:
Captura de Áudio
Microfone conectado a Raspberry Pi ou computador
Processamento
Análise de espectro de frequência em Python
Comunicação
Alertas transmitidos via MQTT
Visualização
Dashboard Node-RED com histórico no Grafana
Implementação do Detector
Detecção por Frequência
import sounddevice as sd
import numpy as np
import paho.mqtt.client as mqtt
# Configuração MQTT
client = mqtt.Client("detector-motosserra")
client.connect("broker.hivemq.com", 1883)
def audio_callback(indata, frames, time_info, status):
# Transformada de Fourier
freq = np.fft.fftfreq(len(indata), 1/44100)
fft = np.abs(np.fft.fft(indata[:, 0]))
# Verifica picos na faixa de motosserra (500-2000Hz)
if np.max(fft[(freq > 500) & (freq < 2000)]) > 1000:
client.publish("floresta/alerta", "Motosserra detectada!")
print("Alerta enviado!")
# Inicia captura
with sd.InputStream(callback=audio_callback,
samplerate=44100,
channels=1):
print("Monitorando ambiente...")
while True:
time.sleep(0.1)
Simulação para Testes
# Simulador para laboratório
import time, random
import paho.mqtt.client as mqtt
client = mqtt.Client("simulador-motosserra")
client.connect("broker.hivemq.com", 1883)
while True:
if random.random() > 0.7: # 30% chance de alerta
client.publish("floresta/alerta", "Motosserra detectada!")
print("Alerta simulado enviado")
time.sleep(10)
Fluxo Node-RED

Configuração básica para receber alertas e acionar notificações
Técnicas Avançadas
Machine Learning
Implementação de modelo TensorFlow para melhorar a precisão da detecção:
# Carrega modelo pré-treinado
model = tf.keras.models.load_model('motosserra_model.h5')
# Extrai features (ex.: MFCC)
mfccs = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=40)
prediction = model.predict(mfccs.T.mean(axis=0).reshape(1, -1))
Notificações Multiplataforma
Configuração no Node-RED para enviar alertas por:
- E-mail (node-red-contrib-email)
- Telegram (node-red-contrib-telegrambot)
- SMS (via Twilio)
9.3. Sistema de Identificação de Animais
Visão Geral
Sistema completo para monitoramento de fauna silvestre com:
- Captura de imagens por câmera trap
- Processamento em tempo real
- Alertas para espécies específicas
- Mapa de ocorrências

Implementação
Versão para Simulação em Laboratório
import paho.mqtt.client as mqtt
import time, random
client = mqtt.Client("camera-trap-sim")
client.connect("broker.hivemq.com", 1883)
animais = ["onca", "veado", "tamandua", "nada"]
while True:
animal = random.choice(animais)
if animal == "onca":
client.publish("floresta/animais",
"Onça detectada! -15.123,-45.321")
print("Alerta: Onça detectada!")
time.sleep(15)
Implementação com OpenCV
import cv2
import paho.mqtt.client as mqtt
# Carrega classificador Haar Cascade
animal_cascade = cv2.CascadeClassifier('haarcascade_animal.xml')
client = mqtt.Client("camera-trap")
client.connect("broker.hivemq.com", 1883)
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
animais = animal_cascade.detectMultiScale(gray, 1.3, 5)
if len(animais) > 0:
client.publish("floresta/animais",
f"Animal detectado - {len(animais)} objetos")
cv2.imshow('Camera Trap', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
Implementação com YOLO
from ultralytics import YOLO
import paho.mqtt.client as mqtt
model = YOLO('yolov8n.pt') # Modelo pré-treinado
client = mqtt.Client("camera-trap-yolo")
client.connect("broker.hivemq.com", 1883)
results = model.track(source=0, show=True, stream=True)
for r in results:
if 'animal' in r.names.values():
client.publish("floresta/animais",
f"{r.names[0]} detectado - {r.boxes.xyxy}")
Visualização no Node-RED

Elementos do Dashboard:
- Card de último animal detectado
- Mapa com localização
- Histórico de detecções
- Controle de sensibilidade
9.4. Outros Projetos do Módulo
Irrigação Automatizada
Sistema inteligente para agricultura com base em umidade do solo
AgriculturaRastreamento de Veículos
Monitoramento GPS em tempo real com histórico de rotas
GPSControle por Voz
Automação residencial com comandos de voz via MQTT
Reconhecimento de Voz9.5. Integração com o Curso

Simulação de dispositivos e sensores

Orquestração e automação de fluxos

Visualização profissional de dados

Comunicação centralizada via MQTT
Resultados de Aprendizado
- Domínio dos conceitos de publish/subscribe
- Integração de múltiplas tecnologias IoT
- Desenvolvimento de soluções para problemas reais
- Prototipagem rápida de sistemas distribuídos
10. Desafios e Próximos Passos
Com os conceitos de MQTT dominados e os projetos práticos concluídos, é hora de explorar novos horizontes. Esta seção apresenta desafios que estimulam a criatividade, o pensamento crítico e a integração interdisciplinar (IoT, computação embarcada, IA, visualização de dados), além de próximos passos para aprofundar seu aprendizado. Prepare-se para transformar conhecimento em soluções inovadoras, trabalhando individualmente ou em equipe!

10.1. Desafios Propostos
Os desafios a seguir ampliam os projetos das seções 9.1 a 9.7, incentivando a aplicação de MQTT em cenários complexos. Cada um inclui objetivos, ferramentas sugeridas e dicas para começar.
Desafio 1 – Estufa Inteligente
Objetivo: Criar um sistema que regula irrigação e ventilação com base em temperatura e umidade, com alertas MQTT e dashboard.
Ferramentas: Paho-MQTT, Node-RED, Grafana, InfluxDB, HiveMQ, ESP32 (opcional).
- Baseie-se no Projeto 9.1 (Monitoramento de Temperatura e Umidade).
- Adicione lógica no Node-RED: irrigação (
umidade < 40%
) e ventilação (temperatura > 28°C
). - Publique comandos em
estufa/irrigacao
eestufa/ventilacao
. - Configure alertas no Grafana (ex.: e-mail para temperatura crítica).
Desafio 2 – Reconhecimento de Som em Floresta
Objetivo: Aprimore o Projeto 9.5 para detectar múltiplos sons (motosserra, animais, chuva) e gerar respostas específicas.
Ferramentas: Paho-MQTT, Node-RED, Python (sounddevice
, numpy
), Edge Impulse (opcional).
- Modifique o script do Projeto 9.5 para identificar diferentes faixas de frequência (ex.: chuva < 500 Hz, animais 200-1000 Hz).
- Publique em tópicos distintos:
floresta/motosserra
,floresta/animais
,floresta/chuva
. - No Node-RED, crie fluxos para cada tópico (ex.: alerta para motosserra, log para chuva).
Desafio 3 – Aplicativo Mobile com MQTT
Objetivo: Desenvolver um app mobile para publicar e receber mensagens MQTT (ex.: controle de luzes ou leitura de sensores).
Ferramentas: Flutter/React Native, HiveMQ, MQTT Explorer.
- Baseie-se no Projeto 9.2 (Controle de Iluminação).
- Instale Flutter (flutter.dev) e a biblioteca
mqtt_client
(flutter pub add mqtt_client
). - Crie um botão para publicar
luz=ligar
emcasa/sala/luz
e exiba mensagens decasa/sala/presenca
. - Teste com o HiveMQ público.
Exemplo básico (Flutter):
import 'package:mqtt_client/mqtt_client.dart';
void main() async {
final client = MqttClient('broker.hivemq.com', 'app-client');
await client.connect();
client.subscribe('casa/sala/presenca', MqttQos.atMostOnce);
client.updates.listen((msg) => print(msg[0].payload.message));
client.publishMessage('casa/sala/luz', MqttQos.atMostOnce, 'ligar'.codeUnits);
}
Desafio 4 – Estação Meteorológica Distribuída
Objetivo: Conectar sensores em diferentes locais (simulados ou reais) e centralizar dados em um dashboard com comparações.
Ferramentas: Paho-MQTT, Node-RED, Grafana, InfluxDB, HiveMQ.
- Simule 3 sensores com Python, publicando em
meteo/zona1/temperatura
,meteo/zona2/umidade
, etc. - Configure Telegraf para coletar todos os tópicos
meteo/#
(seção 7.2.3). - No Grafana, crie um painel com gráficos comparativos por zona.
Desafio 5 – Integração com IA
Objetivo: Classificar eventos (som, imagem, vibração) com IA e tomar decisões automatizadas via MQTT.
Ferramentas: Paho-MQTT, Node-RED, Edge Impulse/TensorFlow Lite, HiveMQ.
- Baseie-se nos Projetos 9.5 (som) e 9.6 (imagem).
- Use Edge Impulse (edgeimpulse.com) para treinar um modelo (ex.: classificar motosserra vs. pássaros).
- Exporte o modelo para Python e publique resultados em
ia/classificacao
. - No Node-RED, crie ações (ex.: alerta para motosserra, log para pássaros).
Desafio 6 – Segurança com MQTT
Objetivo: Implementar autenticação TLS, ACLs e simular ataques para entender segurança em MQTT.
Ferramentas: Mosquitto, Paho-MQTT, Node-RED, MQTT Explorer.
- Instale o Mosquitto localmente (seção 8.7).
- Configure TLS: gere certificados com OpenSSL (
openssl req -new -x509 -days 365 -out mosquitto.crt
). - Edite
mosquitto.conf
:listener 8883; certfile mosquitto.crt; keyfile mosquitto.key
. - Adicione autenticação (
password_file
) e ACLs (acl_file
) para restringir tópicos. - Simule ataque: tente publicar sem credenciais com Paho-MQTT.
10.2. Próximos Passos
Para continuar sua jornada em IoT e MQTT, experimente estas sugestões práticas e amplie suas habilidades:
- Explore Brokers Locais:
- Configure o Mosquitto em uma Raspberry Pi ou máquina virtual (seção 8.7).
- Teste recursos avançados como QoS 2, retenção de mensagens e bridge entre brokers.
- Recurso: Documentação oficial (mosquitto.org).
- Substitua Sensores Virtuais por Reais:
- Use ESP8266/ESP32 com sensores como DHT11/DHT22 (temperatura/umidade), LDR (luz), MQ-135 (CO₂), relés para atuadores.
- Adapte os scripts Paho-MQTT (seção 9) para MicroPython no ESP.
- Exemplo:
from umqtt.simple import MQTTClient; client.publish("topico", "valor")
.
- Integração com Serviços Externos:
- Consuma APIs públicas (ex.: OpenWeatherMap para clima, Google Maps para localização).
- Publique dados da API em tópicos MQTT e integre no Node-RED/Grafana.
- Exemplo: Use
node-red-contrib-http-request
para buscar clima e publicar emmeteo/clima
.
- Documente e Compartilhe:
- Crie relatórios com diagramas (ex.: Draw.io), capturas de tela (dashboards, fluxos), códigos e vídeos curtos.
- Publique em plataformas como GitHub ou Hackster.io para portfólio.
- Dica: Grave um vídeo de 1-2 minutos mostrando o funcionamento do seu projeto.
- Participe de Comunidades:
- Entre em fóruns (Stack Overflow, Reddit r/IoT), grupos de Telegram/WhatsApp de IoT, ou comunidades MQTT (HiveMQ Community).
- Participe de hackathons ou eventos makers locais.
- Recurso: community.hivemq.com.
- Monte uma Bancada IoT:
- Reúna ESP32, sensores (DHT22, LDR, PIR), atuadores (LEDs, relés), breadboard, protoboard, cabos jumper.
- Teste protótipos físicos integrados ao MQTT (ex.: ligar LED via comando do Node-RED).
- Investimento inicial: Kit básico (~R$100-200 em lojas como Mercado Livre).
- Aprofunde-se em Ferramentas Avançadas:
- Experimente Docker para rodar Mosquitto, InfluxDB e Grafana em containers.
- Explore plataformas como Home Assistant ou ThingsBoard para IoT completo.
- Recurso: Tutoriais Docker (docker.com).
10.3. Inspiração e Motivação
Esses desafios e passos são o ponto de partida para criar soluções reais: monitore florestas contra desmatamento, automatize casas e estufas, ou desenvolva ferramentas para cidades inteligentes. O MQTT é apenas o começo — combine-o com sua curiosidade e habilidades para impactar o mundo. Que tal começar hoje?

11. Referências
Esta seção reúne as principais fontes utilizadas no módulo, incluindo documentações oficiais, tutoriais e livros sobre MQTT, IoT, computação embarcada e ferramentas associadas. Esses recursos são fundamentais para aprofundar os temas abordados nas seções 5 a 10 (conceitos, instalação, projetos, desafios) e servem como ponto de partida para consultas adicionais.
11.1. Documentações e Recursos Online
-
Eclipse Foundation. (s.d.). Paho Project. Disponível em: https://www.eclipse.org/paho/
DOCUMENTAÇÃO
Relevância: Documentação oficial da biblioteca Paho-MQTT (Python e outras linguagens), usada nos projetos práticos (seção 9) para publicação e subscrição de mensagens MQTT.
-
HiveMQ. (s.d.). MQTT Essentials. Disponível em: https://www.hivemq.com/mqtt-essentials/
TUTORIAL
Relevância: Guia introdutório sobre o protocolo MQTT, cobrindo tópicos, QoS e casos de uso, essencial para os fundamentos do módulo (seção 5).
-
IBM. (s.d.). Node-RED – Flow-based Programming for the Internet of Things. Disponível em: https://nodered.org/
DOCUMENTAÇÃO
Relevância: Site oficial do Node-RED, com documentação e exemplos práticos para criação de fluxos IoT, amplamente usado nas seções 6 e 9.
-
Grafana Labs. (s.d.). Grafana Documentation. Disponível em: https://grafana.com/docs/
DOCUMENTAÇÃO
Relevância: Guia oficial do Grafana, detalhando configuração de dashboards e integração com InfluxDB, essencial para visualização de dados (seções 7 e 9).
-
MQTT.org. (s.d.). MQTT Standard. Disponível em: https://mqtt.org/
PADRÃO
Relevância: Portal oficial do protocolo MQTT, com especificações técnicas e histórico, útil para entender os padrões aplicados no curso.
-
InfluxData. (s.d.). InfluxDB Documentation. Disponível em: https://docs.influxdata.com/influxdb/
DOCUMENTAÇÃO
Relevância: Documentação do InfluxDB, usada para armazenar dados de séries temporais nos projetos (seções 7 e 9).
-
InfluxData. (s.d.). Telegraf Documentation. Disponível em: https://docs.influxdata.com/telegraf/
DOCUMENTAÇÃO
Relevância: Guia do Telegraf, ferramenta de coleta de dados integrada ao InfluxDB, aplicada na captura de mensagens MQTT (seção 7).
-
Edge Impulse. (s.d.). Documentation and Tutorials. Disponível em: https://docs.edgeimpulse.com/
TUTORIAL
Relevância: Tutoriais para treinamento de modelos de IA embarcada (som, imagem), usados nos desafios (seção 10) e Projetos 9.5 e 9.6.
-
Eclipse Foundation. (s.d.). Mosquitto – An Open Source MQTT Broker. Disponível em: https://mosquitto.org/
DOCUMENTAÇÃO
Relevância: Documentação do Mosquitto, broker MQTT recomendado para configurações locais (seções 8.7 e 10).
-
MQTT Explorer. (s.d.). MQTT Explorer Documentation. Disponível em: https://mqtt-explorer.com/
DOCUMENTAÇÃO
Relevância: Guia da ferramenta de depuração MQTT Explorer, usada para monitoramento de tópicos (seções 8.6 e 9).
11.2. Livros e Publicações
-
Richards, M., & Monk, S. (2018). Internet das Coisas com ESP8266. 1ª ed. São Paulo: Novatec.
LIVRO
Relevância: Livro prático sobre IoT com ESP8266, abordando sensores e MQTT, útil para transição de simulações para hardware (seções 9 e 10).
-
Almeida, A. D., et al. (2021). Redes de Sensores sem Fio e Internet das Coisas. 1ª ed. Rio de Janeiro: Ciência Moderna.
LIVRO
Relevância: Obra brasileira que explora redes de sensores e IoT, com exemplos aplicáveis aos projetos práticos e desafios (seções 9 e 10).
-
Hanes, D., et al. (2017). IoT Fundamentals: Networking Technologies, Protocols, and Use Cases for the Internet of Things. 1ª ed. Cisco Press.
LIVRO
Relevância: Livro abrangente sobre fundamentos de IoT, incluindo MQTT, ideal para contextualizar os conceitos do módulo (seção 5).
-
Schwartz, M. (2016). Internet of Things with ESP8266. 1ª ed. Packt Publishing.
LIVRO
Relevância: Guia prático para projetos IoT com ESP8266 e MQTT, complementar às seções de hardware (seções 8 e 9).
11.3. Recursos Adicionais
-
OpenWeatherMap. (s.d.). Weather API. Disponível em: https://openweathermap.org/api
API
Relevância: API gratuita para integração de dados climáticos nos projetos e desafios (seções 9.4 e 10).
-
Flutter. (s.d.). Flutter Documentation. Disponível em: https://flutter.dev/docs
DOCUMENTAÇÃO
Relevância: Documentação do Flutter, sugerida para o Desafio 3 (seção 10) sobre aplicativos móveis com MQTT.
-
Home Assistant. (s.d.). Home Assistant Documentation. Disponível em: https://www.home-assistant.io/docs/
PLATAFORMA
Relevância: Plataforma de automação IoT com suporte a MQTT, indicada como próximo passo (seção 10).
Essas referências oferecem uma base sólida para explorar MQTT, IoT e as ferramentas do curso. Consulte-as para resolver dúvidas, expandir projetos ou buscar inspiração para os desafios propostos!