Files
Atividade-3---FIAP/README.md
2026-02-19 15:40:23 -03:00

4.4 KiB

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

  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)

{
  "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

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.