33c1639176d9e069c571c96bbca6c21d38fef138
Atividade 3 - Streaming MQTT para ThingSpeak
Sistema IoT embarcado em ESP32 que monitora temperatura, umidade e gás com detecção avançada de incêndio, publicando dados simultaneamente em múltiplas plataformas cloud.
Visão Geral
ESP32 (DHT22 + MQ2)
↓
├─→ MQTT Broker (77.37.69.84:1883)
│ ├─→ Ubidots (Dashboard CEO)
│ └─→ NodeRed (Dashboard Local)
│
└─→ ThingSpeak Write API
└─→ Armazenamento em Cloud + Analytics
Requisitos da Atividade
- ✅ Canal ThingSpeak com 4 campos
- ✅ Publicação MQTT no broker
- ✅ Integração ThingSpeak via Write API
- ✅ Visualização de dados em gráficos
- ✅ Testes de latência/estabilidade
- ✅ Documentação técnica completa
- ✅ Vídeo de demonstração
Configuração Rápida
1. Obter Credenciais ThingSpeak
Pegue suas credenciais do canal do Thingspeak no menu API Keys
2. Atualizar Código
Edite src/esp32-ntp-clock.ino:
// Linha ~35
const unsigned long THINGSPEAK_CHANNEL_ID = SEU_CHANNEL_ID; // Substitua
const char* THINGSPEAK_API_KEY = "SEU_API_KEY"; // Substitua
3. Compilar e Enviar
# Compilar com PlatformIO
pio run
# Enviar para o ESP32
pio run -t upload
# Monitorar logs
pio device monitor --baud 115200
ThingSpeak Setup
Criar Canal
- Acesse https://thingspeak.com/channels
- New Channel com este formato:
| Field | Nome | Tipo | Unidade |
|---|---|---|---|
| 1 | temperatura |
Float | °C |
| 2 | umidade |
Float | % |
| 3 | gas_adc |
Integer | ADC (0-1023) |
| 4 | alarme_status |
Integer | Enum (0-4) |
Variáveis Publicadas
MQTT (Tópico: cozinha)
{
"tmp": 26.50, // °C
"umi": 65.30, // %
"gas": 912, // ADC
"alarme": 0 // 0=NOMINAL, 1=GAS, 2=TEMP_ALTA, 3=UMIDADE_ALTA, 4=INCENDIO
}
ThingSpeak Write API
POST /update
Parameters:
api_key: [SEU_WRITE_API_KEY]
field1: temperatura (°C)
field2: umidade (%)
field3: gas_adc (0-1023)
field4: alarme_status (0-4)
Verificação de Dados
Dashboard ThingSpeak
# Abra no navegador:
https://thingspeak.com/channels/SEU_CHANNEL_ID
Você deverá ver:
- 4 gráficos em tempo real
- Histórico de dados
- Últimas entradas
MQTT (Linha de Comando)
# Subscrever ao tópico
mosquitto_sub -h 77.37.69.84 -t cozinha
# Resultado esperado:
{"tmp": 26.50, "umi": 65.30, "gas": 912, "alarme": 0}
{"tmp": 26.51, "umi": 65.29, "gas": 913, "alarme": 0}
...
🧪 Testes Implementados
Teste 1: Validação de Credenciais
bash test_thingspeak.sh
Valida se Channel ID e API Key funcionam antes de enviar para o ESP32.
Teste 2: Latência MQTT
bash test_mqtt_latency.sh
Mede tempo de entrega de mensagens (esperado: ~100-200ms).
Teste 3: Logs do Device
pio device monitor --baud 115200 | grep ThingSpeak
Monitora sucesso/falha de cada publicação.
Resultados Esperados
Após compilação bem-sucedida:
[WiFi] Conectado!
[MQTT] Conectado!
[ThingSpeak] Inicializado
[MQTT] Publicando: {"tmp": 26.50, "umi": 65.30, "gas": 912, "alarme": 0}
[ThingSpeak] Dados enviados com sucesso
A cada 15 segundos:
- Nova leitura dos sensores
- Publicação MQTT no broker
- Envio para ThingSpeak via HTTP
Arquivos do Projeto
├── src/
│ └── esp32-ntp-clock.ino # Código principal
├── Relatorio/
│ └── atividade3.qmd # Documentação formal (PDF)
├── tst/
│ └── test_mqtt_latency.sh # Teste de latência MQTT
├── platformio.ini # Configuração PlatformIO
├── README.md # Este arquivo
└── test_thingspeak.sh # Script validação ThingSpeak
Links Úteis
- ThingSpeak: https://thingspeak.com/
- PlatformIO: https://platformio.org/
- MQTT Broker: mosquitto.amarojr.com
- NodeRed: http://nodered.amarojr.com/dashboard/page1
Documentação
Para documentação formal completa, consulte:
Vídeo Demonstração
Video postado no youtube
Status: Operacional
Versão: 3.0
Última atualização: 2026-02-19
Autor: Amaro Lopes
Simulação
Para simular o projeto, instale Wokwi for VS Code.
Languages
C++
89.4%
Python
10.6%