Exemplo WebRTC com ESP32 - Tutorial da Interface de Relógio de Tempo Real
Visão Geral
O exemplo WebRTC oferece uma interface completa de relógio de tempo real para os seus projetos com ESP32. Feito para a plataforma educacional ESP32, com recursos de RTC integrados, gerenciamento de horário aprimorado e integração perfeita com o ecossistema educacional. Você pode exibir as informações do relógio de tempo real, sincronizar o horário do navegador com o Arduino e monitorar as diferenças de horário por meio de uma interface web intuitiva.

Recursos
- Exibição do Relógio de Tempo Real: mostra o horário atual do RTC do ESP32 com atualização automática
- Comparação com o Horário do Dispositivo: exibe o horário do navegador/dispositivo ao lado do horário do ESP32
- Sincronização de Horário com Um Clique: sincroniza o RTC do ESP32 com o horário do navegador na hora
- Indicador Visual de Diferença de Horário: mostra o desvio de horário entre os dispositivos em minutos
- Formato de Horário em Duas Linhas: formato de 12 horas AM/PM com a data completa
- Interface Moderna com Gradiente: layout em cartões com design responsivo
- Comunicação WebSocket: atualizações bidirecionais em tempo real, sem recarregar a página
- Sincronização com Fuso Horário: usa o horário local do dispositivo para uma sincronização precisa
- Monitoramento do Status da Conexão: indicadores visuais do estado da conexão WebSocket
- Solicitação Automática de Horário: pede o horário atual do ESP32 ao carregar a página
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
ESP32 - Módulo RTC DS3231
| Módulo RTC DS1307 | ESP32 |
|---|---|
| Vin | 3.3V |
| GND | GND |
| SDA | GPIO21 |
| SCL | GPIO22 |
Passos Rápidos
Siga estas instruções passo a passo:
- Se esta é a primeira vez que você usa o ESP32, consulte o tutorial sobre como configurar o ambiente do ESP32 na Arduino IDE.
- Conecte a placa ESP32 ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
- Vá até o ícone Libraries na barra esquerda da Arduino IDE.
- Pesquise "DIYables ESP32 WebApps" e encontre a biblioteca DIYables ESP32 WebApps da DIYables
- Clique no botão Install para instalar a biblioteca.

- Será pedido que você instale algumas outras dependências da biblioteca
- Clique no botão Install All para instalar todas as dependências.

- Pesquise “RTClib” e encontre a biblioteca RTC da Adafruit
- Clique no botão Install para instalar a biblioteca RTC.

- Pode ser que a Arduino IDE peça para instalar as dependências da biblioteca
- Instale todas as dependências da biblioteca clicando no botão Install All.

- Na Arduino IDE, vá em File Examples DIYables ESP32 WebApps WebRTC, ou copie o código acima e cole no editor da Arduino IDE
- Configure as credenciais do WiFi no código atualizando estas linhas:
- Clique no botão Upload da Arduino IDE para enviar o código ao Arduino.
- Abra o Serial Monitor na Arduino IDE
- Aguarde a conexão com o WiFi e a impressão das informações do WiFi no Serial Monitor.
- Confira o resultado no Serial Monitor. Ele fica parecido com o abaixo
- Se você não vir nada, reinicie a placa ESP32.
Usando a Interface Web
- Abra um navegador no seu computador ou celular conectado à mesma rede WiFi
- Digite no navegador o endereço IP mostrado no Serial Monitor
- Exemplo: http://192.168.1.100
- Você verá a página inicial como na imagem abaixo:

- Clique no link Web RTC e você verá a interface do app Web RTC como abaixo:

- Você também pode acessar a página diretamente pelo endereço IP seguido de /web-rtc. Por exemplo: http://192.168.1.100/web-rtc
- Você verá a interface Web RTC mostrando:
- Arduino Time: horário atual do RTC do Arduino
- Your Device Time: horário atual do seu navegador/dispositivo
- Time Difference: diferença entre os dois horários em minutos
- Sync ESP32 Time Button: clique para sincronizar o horário do ESP32 com o do seu dispositivo
Sincronização de Horário
- Clique no botão "Sync ESP32 Time" para sincronizar o RTC do Arduino com o horário local do seu dispositivo

- O processo de sincronização:
- Obtém o horário local atual do seu dispositivo (não o UTC)
- Ajusta o deslocamento de fuso horário para garantir uma sincronização correta do horário local
- Envia o timestamp ao Arduino por WebSocket
- O Arduino atualiza o seu RTC com o horário recebido
- A interface web é atualizada para mostrar o horário sincronizado
Explicação do Código
Componentes Principais
Função Setup
Funções de Callback
Callback de Sincronização de Horário:
Callback de Solicitação de Horário:
Loop Principal
Métodos da API
Métodos da Classe DIYablesWebRTCPage
onTimeSyncFromWeb(callback)
- Define a função de callback que trata a sincronização de horário vinda do navegador
- Parâmetro: void (*callback)(unsigned long unixTimestamp)
- Uso: chamada quando o usuário clica no botão "Sync ESP32 Time"
onTimeRequestToWeb(callback)
- Define a função de callback que trata as solicitações de horário vindas do navegador
- Parâmetro: void (*callback)()
- Uso: chamada quando a interface web solicita o horário atual do ESP32
sendTimeToWeb(year, month, day, hour, minute, second)
- Envia o horário atual do ESP32 para a interface web
- Parâmetros:
- year: ano atual (por exemplo, 2025)
- month: mês atual (1-12)
- day: dia atual do mês (1-31)
- hour: hora atual (0-23)
- minute: minuto atual (0-59)
- second: segundo atual (0-59)
Comunicação WebSocket
Mensagens da Web para o Arduino
- RTC:GET_TIME - solicita o horário atual do ESP32
- RTC:SYNC:[timestamp] - sincroniza o horário do ESP32 com um timestamp Unix
Mensagens do ESP32 para a Web
- DATETIME:YYYY,MM,DD,HH,MM,SS - envia os componentes do horário atual do ESP32
Solução de Problemas
Problemas Comuns
1. Diferença de Várias Horas no Horário
- Problema: o ESP32 mostra um horário com várias horas de diferença do horário do dispositivo
- Causa: normalmente um problema de fuso horário ou RTC não inicializado corretamente
- Solução:
- Clique no botão "Sync ESP32 Time" para sincronizar de novo
- Verifique se o RTC é inicializado corretamente no setup()
- Confirme que a conexão WiFi está estável
- Problema: o módulo RTC não é detectado durante a inicialização
- Causa: módulo DS3231 mal conectado ou com defeito
- Solução:
- Confira a ligação I2C (SDA no GPIO 21, SCL no GPIO 22)
- Verifique as conexões de alimentação (VCC em 3.3V/5V, GND no GND)
- Teste com um I2C scanner para detectar o endereço do módulo
- Tente outro módulo DS3231, se tiver
- Problema: erro ao clicar no botão de sincronizar
- Causa: falha na conexão WebSocket
- Solução:
- Verifique se o endereço IP do ESP32 está correto
- Atualize a página web
- Confirme que o ESP32 está conectado à mesma rede WiFi
- Verifique as configurações do firewall
- Problema: a exibição do horário congela ou não atualiza
- Causa: conexão WebSocket perdida ou RTC parou
- Solução:
- Atualize a página web
- Verifique o status da conexão WebSocket
- Reinicie o ESP32 se o RTC parar de responder
- Problema: a diferença de horário mostra milhares de minutos
- Causa: o RTC não foi acertado corretamente ou desviou muito
- Solução: clique no botão de sincronizar várias vezes e verifique as funções de callback
2. Erro "RTC module is NOT found"
3. Erro "Not connected to Arduino"
3. O Horário Para de Atualizar
4. Grandes Diferenças de Horário (Dias/Meses)
Dicas de Depuração
Ative a Depuração pela Serial:
Verifique a Inicialização do RTC:
Uso Avançado
Registro de Dados com Timestamps
Ações Agendadas
Integração com Vários Web Apps
Aplicações e Casos de Uso
Projetos Educacionais
- Aprendizado de Gerenciamento de Tempo: ensine os alunos sobre RTC, marcação de tempo e sincronização
- Conceitos de Tempo em IoT: demonstre a sincronização de horário em rede em sistemas IoT
- Projetos de Registro de Dados: adicione timestamps às leituras de sensores e aos experimentos
- Sistemas de Agendamento: crie sistemas de automação e controle baseados em horário
Aplicações no Mundo Real
- Automação Residencial: agende luzes, irrigação ou outros dispositivos
- Aquisição de Dados: marque as leituras de sensores com horário para análise
- Registro de Eventos: registre quando eventos específicos ocorrem, com horário preciso
- Monitoramento Remoto: verifique remotamente o status do dispositivo e os horários da última atualização
Benefícios para o Ensino de STEM
- Conceitos de Fuso Horário: entenda a diferença entre horário local e UTC e como tratar fusos horários
- Comunicação em Rede: aprenda a comunicação WebSocket e as atualizações em tempo real
- Integração de Hardware: combine interfaces web com a funcionalidade de RTC em hardware
- Resolução de Problemas: depure problemas de horário e de sincronização
Especificações Técnicas
Uso de Memória
- Memória Flash: ~8KB para a funcionalidade WebRTC
- SRAM: ~2KB durante a operação
- Buffer WebSocket: ~1KB para o tratamento de mensagens
Características de Desempenho
- Frequência de Atualização: atualizações em tempo real via WebSocket
- Precisão da Sincronização: normalmente dentro de 1-2 segundos
- Sobrecarga de Rede: ~50 bytes por mensagem de atualização de horário
- Tempo de Resposta: <100ms para as operações de sincronização de horário
Compatibilidade
- Placas ESP32: ESP32, ESP32 Web Apps
- Navegadores: todos os navegadores modernos com suporte a WebSocket
- Dispositivos: computadores, tablets e celulares
- Redes: redes WiFi com acesso à internet
Tutorial em Vídeo
O vídeo de demonstração abaixo usa o código abaixo:
Resumo
O exemplo WebRTC mostra como:
- Criar uma interface web de relógio de tempo real
- Sincronizar o RTC do ESP32 com o horário do navegador
- Exibir as informações de horário em um formato fácil de entender
- Monitorar as diferenças de horário e o status da conexão
- Integrar a função de horário com outros aplicativos web
- Criar projetos educacionais de IoT com recursos de gerenciamento de tempo
Este exemplo é ideal para projetos que exigem marcação de tempo precisa, registro de dados com timestamps, automação agendada e demonstrações educacionais de conceitos de sincronização de horário em sistemas IoT.