Início / Blog / Telemetria ESP32
Engenharia Backend para IoT

Pipeline de telemetria com ESP32: MQTT, Cloudflare Workers, Supabase, SQL e dashboards

Projetos com ESP32 ficam realmente interessantes quando deixam de ser dispositivos isolados e viram sistemas observáveis. Um sensor de temperatura, vibração, relé, câmera ou nó com bateria é só a borda do sistema. A engenharia começa quando cada leitura vira dado confiável: validado, armazenado, exibido em gráficos, monitorado e reproduzível.

Por que ESP32 também é conversa de backend

ESP32 costuma aparecer como hardware maker, mas a arquitetura ao redor dele é problema de backend. Dispositivos perdem Wi-Fi, sensores geram ruído, relógios atrasam, mensagens duplicam, baterias acabam e dashboards mentem quando o pipeline não tem modelo de frescor. Um projeto profissional com ESP32 precisa de idempotência, retries, validação de schema, observabilidade e bom desenho de armazenamento.

Placas mais novas da Espressif deixam a borda ainda mais capaz. A Espressif descreve o ESP32-C6 com suporte a Wi-Fi 6, Bluetooth 5 LE e IEEE 802.15.4, abrindo espaço para Matter, Thread, redes no estilo Zigbee e IoT de baixo consumo. O chip é pequeno; o sistema em volta dele não é.

Pipeline de telemetria
Nó ESP32Lê sensores e adiciona metadados do dispositivo.
Broker MQTTRecebe eventos compactos e lida com conexão instável.
Worker APIValida payloads, assina ingestão e normaliza dados.
PostgresGuarda leituras brutas, estado do device e agregados.
Views SQLModelam janelas prontas para dashboard.
AlertasDetectam limites, silêncio de devices e anomalias.

O payload do dispositivo deve ser simples

Os melhores payloads de telemetria são previsíveis: ID do dispositivo, timestamp, versão de firmware, tipo de sensor, valor, unidade, bateria, força do sinal, número de sequência e ID único do evento. Isso já permite investigar duplicatas, atrasos, relógios ruins, rollouts de firmware e saúde dos dispositivos.

Um erro comum é tratar o ESP32 como única fonte de verdade. O backend também deve adicionar timestamp de servidor, ID de ingestão, resultado de validação e tópico de origem. O dispositivo relata o que viu. O backend registra quando e como o sistema recebeu aquilo.

24 devicesNós ativos vistos nos últimos 10 minutos.
2,1s p95Latência entre sensor e banco de dados.
98,7%Payloads válidos após validação de schema.
3 alertasDispositivos sem dados ou acima do limite.
Exemplo de gráfico: média horária do sensor

MQTT é ingestão, não banco de dados

MQTT é ótimo para dispositivos pequenos porque é leve, orientado a tópicos e tolera redes intermitentes. Mas o broker não deve ser a base analítica de longo prazo. O trabalho dele é mover mensagens. O trabalho do backend é preservar histórico, validar dados, calcular agregados e expor dashboards.

Um padrão limpo é: ESP32 publica no MQTT, um worker de ingestão recebe a mensagem, valida o payload, grava dados brutos em Postgres/Supabase e depois cria views para janelas de dashboard. Assim o sistema fica reproduzível: se um gráfico parece errado, você inspeciona os eventos brutos.

O que eu construiria

Eu começaria com uma versão pequena, mas com formato de produção: dispositivos ESP32 publicando JSON via MQTT, endpoint de ingestão em Cloudflare Worker, tabelas Supabase/Postgres para leituras brutas e registro de devices, views SQL para agregados horários e um dashboard simples com frescor, gráficos e alertas.

Para portfólio, o dashboard precisa ser visual desde o início: cards de métricas, status dos dispositivos, sparklines, histórico de alertas, distribuição de versões de firmware e log de eventos. Isso transforma o projeto de demo de sensor em plataforma operacional de telemetria.

TabelaPropósitoCampos importantes
iot_devicesRegistro dos nós ESP32 conhecidos.device_id, location, firmware_version, last_seen_at, status
sensor_readings_rawEventos brutos em modo append-only.event_id, device_id, sensor_type, value, unit, device_timestamp, received_at
sensor_readings_hourlyView agregada pronta para dashboard.device_id, sensor_type, hour_bucket, avg_value, min_value, max_value
iot_alertsAlertas de limite, frescor e anomalia.alert_id, device_id, severity, reason, opened_at, resolved_at

Falhas que valem aparecer no artigo

Bons posts de IoT mostram falhas visualmente. Os alertas úteis não são só "temperatura alta". Também são "device parou de reportar", "bateria caiu rápido demais", "firmware está antigo", "números de sequência pularam" e "schema do payload mudou". Esses sinais separam uma demo funcional de um sistema que dá para manter.

A mesma lógica vale para vibração industrial, estufas inteligentes, medidores de energia, caixas d'água, rastreamento de equipamentos e laboratórios de telemetria veicular. Quando sensor vira pipeline backend, ESP32 deixa de ser só hardware e vira um nó de borda em um sistema distribuído.