Início / Blog / Dashboard ESP32
Interfaces web e operação IoT

Dashboard ESP32 no navegador com WebSockets: atualidade, reconexão e controle

O navegador pode deixar a telemetria parecer imediata, mas um número mudando não é necessariamente uma medição atual e confiável. Um dashboard útil mostra conexão, idade da amostra, lacunas de sequência e identidade do dispositivo. Se também envia comandos, autorização e comportamento seguro do firmware importam mais que a animação do botão.

Separe responsabilidades do dispositivo, gateway e navegador

Cada etapa valida e informa um estado diferente
1 / ESP32Publica medições numeradas e saúde.
2 / GatewayAutentica, valida esquema e aplica acesso.
3 / WebSocketEnvia eventos a sessões autorizadas.
4 / NavegadorExibe idade, lacunas e reconexão.
5 / ComandoAutoriza, audita, confirma e expira ações.

Para um protótipo local, o servidor HTTP do ESP-IDF pode hospedar WebSockets; o ESP32 também pode atuar como cliente usando o componente da Espressif. Escolha a topologia de propósito. Uma página HTTPS normalmente exige endpoint WSS seguro; não misture página segura com socket inseguro. Gateway ou backend costuma facilitar identidade, escala e atualização em comparação a expor o dispositivo diretamente à internet.

Defina um contrato pequeno de eventos

Envie tipos como telemetry, status, ack e error, com versão de esquema, ID, sequência e horário. Inclua unidades e flags de qualidade. Rejeite eventos malformados, grandes demais ou inesperados antes de renderizar. O navegador não deve confiar em HTML do dispositivo: exiba valores como texto e valide limites permitidos.

Limite frequência e tamanho. Um painel raramente precisa de toda amostra em alta taxa; agregue na borda/gateway e mantenha histórico durável separado. WebSocket é transporte ao vivo, não banco de dados.

Mostre a atualidade dos dados

Separe estado do socket e estado da medição. A conexão pode continuar aberta depois que o sensor parou. Mostre idade da última amostra, sequência, intervalos ausentes e saúde declarada. Gráficos devem mostrar lacunas em vez de ligar pontos ausentes. Ao ocultar ou reabrir a página, decida se mantém o socket ou busca um snapshot ao voltar.

Reconecte sem provocar outra indisponibilidade

Use backoff exponencial com jitter e limite máximo. Só zere o atraso após conexão estável, não imediatamente após handshake breve. Evite timers duplicados e remova listeners ao fechar. Na reconexão, solicite snapshot atual e cursor; não finja que quadros ao vivo perdidos foram reproduzidos se o servidor não os guardou. Limite clientes e filas do servidor para uma aba lenta não consumir memória sem controle.

EstadoEvidência na telaComportamento
Conectado e recenteSocket aberto e amostra novaFluxo normal
Conectado, dado antigoSocket aberto, idade excedidaMarcar telemetria como degradada
DesconectadoReconexão explícitaBackoff e snapshot ao recuperar
Comando pendentePendente/aceito/rejeitado/expiradoCorrelacionar ID e prazo

Comandos exigem modelo de autoridade

URL do WebSocket ou cabeçalho Origin não são autenticação. Conferir Origin ajuda contra uso cross-site por navegadores, mas clientes não-browser podem falsificar o cabeçalho. Autentique usuário e sessão, autorize cada dispositivo e comando, valide payload no backend e no dispositivo e registre o responsável. Exija expiração e ID único para um comando atrasado ou repetido não parecer novo.

Para atuadores, mostre efeito previsto e estado atual, peça confirmação para ações relevantes e informe se o firmware aceitou e concluiu. Evento de envio no browser só diz que os bytes foram entregues à pilha do socket. Intertravamentos locais, estado seguro e parada manual continuam no dispositivo.

Observe o próprio dashboard

Meça sessões conectadas, taxa de mensagens, filas, falhas de parsing, dispositivos antigos, reconexões e latência de confirmação de comandos. Teste suspensão do navegador, troca de Wi-Fi, reinício do servidor, eventos duplicados, JSON inválido e dispositivo conectado com tarefa de sensor travada. Um painel liso no cenário ideal mas enganoso nesses casos não serve à operação.

Em resumo

WebSockets atendem painéis ESP32 responsivos quando há contratos de eventos, atualidade, reconexões limitadas e autorização de comandos. Use gateway quando isso melhorar identidade e gestão da frota, separe histórico durável e deixe dados antigos ou desconectados explícitos. “Ao vivo” é estado medido, não efeito de CSS.

Referências