201 lines
4.4 KiB
Markdown
201 lines
4.4 KiB
Markdown
# 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).
|
|
|