Versão 3.0

This commit is contained in:
2026-02-19 15:40:23 -03:00
parent 76851892ab
commit 33c1639176
11 changed files with 807 additions and 326 deletions

214
README.md
View File

@@ -1,50 +1,198 @@
# Atividade 2 - Amaro
# Atividade 3 - Streaming MQTT para ThingSpeak
Um projeto de um ESP32 conectado a três sensores para monitoramento inteligente de cozinha industrial:
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.
## Sensores
- **DHT22**: Temperatura e Umidade
- **MQ2**: Qualidade do ar / Detecção de gás
- **DS1307**: RTC para timestamp
## Visão Geral
## Atuadores
- **Alarme Sonoro** (GPIO 4): Alerta para detecção de gás/incêndio
- **Coifa/Exaustor** (GPIO 17): Remoção de gases e umidade
- **Ar-condicionado** (GPIO 16): Controle de temperatura
```
ESP32 (DHT22 + MQ2)
├─→ MQTT Broker (77.37.69.84:1883)
│ ├─→ Ubidots (Dashboard CEO)
│ └─→ NodeRed (Dashboard Local)
└─→ ThingSpeak Write API
└─→ Armazenamento em Cloud + Analytics
```
## Sistema de Integração MQTT
## Requisitos da Atividade
### Broker
- **Host**: 77.37.69.84:1883
- **Tópico Publicação**: `cozinha` (JSON com tmp, umi, gas, alarme)
- **Tópicos Subscrição**: `cozinha/max_tmp`, `cozinha/max_umi` (configuração remota)
- ✅ 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
### Dashboards
## Configuração Rápida
1. **Ubidots** (Cloud)
- Device: `cozinha`
- Histórico: 30+ dias
- URL: https://ubidots.com
### 1. Obter Credenciais ThingSpeak
2. **NodeRed** (Local)
- URL: http://77.37.69.84:1880/dashboard/page1
- Controle remoto de limiares via sliders
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
Relatório técnico completo disponível em `Relatorio/relatorio.pdf` com:
- Arquitetura de sistema
- Fluxo de dados MQTT
- Validação de testes
- Guia de operação dos dashboards
Para documentação formal completa, consulte:
- [Relatório Técnico](Relatorio/relatorio.qmd)
## Compilando
## Vídeo Demonstração
Utilizei o [PlatformIO](https://platformio.org). Para compilar:
Video postado no [youtube](https://youtu.be/8xOyGy04oZo)
```
pio run
```
---
**Status**: Operacional
**Versão**: 3.0
**Última atualização**: 2026-02-19
**Autor**: Amaro Lopes
## Simulação