# 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](src/esp32-ntp-clock.ino): ```cpp // 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 ```bash # Compilar com PlatformIO pio run # Enviar para o ESP32 pio run -t upload # Monitorar logs pio device monitor --baud 115200 ``` ## ThingSpeak Setup ### Criar Canal 1. Acesse https://thingspeak.com/channels 2. **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`) ```json { "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 ```bash # 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) ```bash # 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 bash test_thingspeak.sh ``` Valida se Channel ID e API Key funcionam **antes** de enviar para o ESP32. ### Teste 2: Latência MQTT ```bash bash test_mqtt_latency.sh ``` Mede tempo de entrega de mensagens (esperado: ~100-200ms). ### Teste 3: Logs do Device ```bash 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: - [Relatório Técnico](Relatorio/relatorio.qmd) ## Vídeo Demonstração Video postado no [youtube](https://youtu.be/8xOyGy04oZo) --- **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](https://marketplace.visualstudio.com/items?itemName=wokwi.wokwi-vscode).