Como usar o módulo DS3231 Real-Time Clock (RTC) com um ESP32

Como Usar O Modulo Ds3231 Real Time Clock Rtc Com Um Esp32



ESP32 é uma placa microcontroladora inteligente com recursos integrados de Wi-Fi e Bluetooth. O ESP32 vem com RTC interno, mas seu funcionamento depende de energia. Portanto, se você deseja projetar projetos ou circuitos que deseja executar mesmo quando não há energia, você deve usar qualquer módulo RTC externo como DS1307 ou DS3231.

Já fizemos um tutorial sobre DS1307 fazendo interface com o módulo ESP32 . Hoje discutiremos os fundamentos do sensor RTC DS3231 e verificaremos como interligá-lo com a placa ESP32.

Índice:







1. O que é o Módulo DS3231 RTC



2. Como fazer a interface do DS3231 com ESP32



3. Ferragens





4. Código

5. Saída



6. Como exibir o tempo RTC DS3231 em uma tela OLED usando ESP32

Conclusão

1. O que é o Módulo RTC DS3231

O módulo DS3231 fornece cronometragem altamente precisa. Inclui um oscilador de cristal com compensação de temperatura integrado (TCXO) para nos dar o tempo com grande precisão. O módulo opera no protocolo I2C usando a configuração Master-Slave. Ele pode manter a hora e a data com uma bateria reserva, mesmo quando não há energia de entrada principal. É comumente usado em dispositivos que dependem de hora e data.

O DS3231 controla segundos, minutos e horas. Também pode manter um registro de datas e dias da semana. Ao lidar com anos bissextos, ele ajusta automaticamente o tempo de acordo. Além disso, ele pode exibir a hora no formato de 12 ou 24 horas, completo com um indicador AM/PM.

1.1. DS3231 versus DS1307

Tanto o DS3231 quanto o DS1307 são módulos de cronometragem com suporte de bateria reserva. No entanto, o DS3231 é mais preciso que o DS1307. A principal razão é que o DS1307 depende de um cristal externo de 32kHz para cronometragem.

No entanto, o RTC DS3231 possui um oscilador de cristal compensado por temperatura interno (TCXO). Isso o torna menos afetado pela temperatura externa e, como resultado, tem uma vantagem de precisão de alguns minutos por ano em relação ao DS1307.

1.2. Pinagem DS3231

DS3231 funciona usando o protocolo I2C. No centro deste módulo RTC, temos o chip RTC preciso projetado pela Maxim. Este chip lida com todas as funções de tempo e se comunica usando o I2C com ESP32 ou placa Arduino.

Os pinos principais dos módulos RTC DS3231 são:

  • VCC: Conecte este pino ao terminal positivo da sua fonte de alimentação.
  • GND: Conexão à terra.
  • Normas de trânsito: Pino de dados seriais (usado para comunicação I2C).
  • SCL: Pino Serial Clock (também parte da interface I2C).
  • Perguntas frequentes: Pino de saída de onda quadrada (pode gerar um sinal periódico, por exemplo, para alarmes ou outros fins de temporização).
  • 32K: Saída do oscilador de 32KHz (útil para aplicações de temporização precisas).

A seguir estão os principais componentes integrados do módulo RTC DS3231:

  • Suporte da bateria: Permite que o módulo continue funcionando quando a alimentação externa estiver ausente.
  • Chip RTC: Este chip mantém a hora e a data.
  • EEPROM AT24C32: Ele fornece armazenamento não volátil para registro de dados e outras finalidades com 1.000.000 de ciclos de gravação.
  • TCXO: Oscilador com compensação de temperatura para fornecer o tempo correto para uma faixa variável de temperaturas.
  • Sensor de temperatura: Ele faz leituras de temperatura e as fornece como parte do recurso do módulo.

2. Como fazer interface entre DS3231 e ESP32

Para fazer a interface do DS3231 com o ESP32, você precisa instalar o Biblioteca RTClib primeiro. Depois de instalar esta biblioteca Adafruit RTC, você pode conectar sua placa ESP32 ao DS3231 usando o protocolo I2C. Para conectar o ESP32 I2C ao módulo RTC DS3231, você pode usar os pinos D21 e D22 do ESP32.

2.1. Diagrama de fiação do ESP32 com RTC DS3231

Primeiro, você deve conectar o ESP32 ao módulo I2C RTC DS3231. Siga a configuração de pinos fornecida abaixo para fiação:

Depois de conectar o ESP32 ao RTC DS3231, seu diagrama de fiação deverá ficar assim. Você também pode alimentar o DS3231 a partir do pino VIN do ESP32. As tensões operacionais do DS3231 são de 3,3 a 5,5 VCC.

2.2. Instalando as bibliotecas necessárias

Quando o circuito estiver pronto, o próximo passo é configure sua placa ESP32 com Arduino IDE . Para fazer a interface do DS3231, você precisará instalar o Biblioteca RTClib . Você pode instalá-lo usando o gerenciador de biblioteca Arduino IDE.

3. Ferragens

Você precisará do seguinte hardware para projetar o relógio RTC baseado em DS3231 com ESP32:

  • Placa de desenvolvimento ESP32
  • Módulo RTC DS3231
  • Bateria CR2032
  • Fios de ligação em ponte
  • Tábua de ensaio

4. Código

Após instalar a biblioteca RTC, a próxima parte é escrever o código do DS3231 e carregá-lo na placa ESP32. Primeiro, você deve escrever o código para definir a hora atual. Depois de definir a hora no DS3231, ele lembrará a hora e continuará funcionando mesmo que a placa ESP32 seja desligada.

Agora abra o Arduino IDE, compile e grave o código na placa ESP32.

#include
#include

RTC_DS3231 rtc ; // Inicializa uma instância da classe RTC_DS3231

vazio configurar ( ) {
Serial. começar ( 115200 ) ;
Arame. começar ( ) ;

se ( ! RTC. começar ( ) ) {
Serial. imprimir ( 'RTC não detectado' ) ;
enquanto ( 1 ) ; // Pendura indefinidamente se o RTC não for encontrado
}

// Remova o comentário da linha abaixo para definir a data e hora inicial
//rtc.adjust(DateTime(__DATE__, __TIME__));
}

vazio laço ( ) {
//Lê a hora atual do sensor (DS3231)
DataHora agora = RTC. agora ( ) ;

// Imprime a data e a hora na mesma linha com dois dígitos para horas, minutos e segundos
Serial. imprimir ( 'Data atual: ' ) ;
Serial. imprimir ( agora. ano ( ) , DEZEMBRO ) ;
Serial. imprimir ( '/' ) ;
imprimir dois dígitos ( agora. mês ( ) ) ;
Serial. imprimir ( '/' ) ;
imprimir dois dígitos ( agora. dia ( ) ) ;
Serial. imprimir ( ' Hora atual: ' ) ;
imprimir dois dígitos ( agora. hora ( ) ) ;
Serial. imprimir ( ':' ) ;
imprimir dois dígitos ( agora. minuto ( ) ) ;
Serial. imprimir ( ':' ) ;
imprimir dois dígitos ( agora. segundo ( ) ) ;
Serial. imprimir ( ) ;

atraso ( 1000 ) ; //Atualiza a cada 1 segundo
}

vazio imprimir dois dígitos ( interno número ) {
se ( número < 10 ) {
Serial. imprimir ( '0' ) ; // Adiciona um zero à esquerda para números de um único dígito
}
Serial. imprimir ( número ) ;
}

4.1. Explicação do código

O código começa inicializando a comunicação serial I2C com a ajuda de uma biblioteca de fios. Em seguida, incluímos a biblioteca RTC da Adafruit para interface com o módulo DS3231. Esta biblioteca fornece uma função para interagir com o módulo RTC DS3231.

No configurar parte, o barramento I2C é iniciado e verificado quanto aos dispositivos I2C disponíveis. Se não for encontrado, o programa trava indefinidamente. A taxa de transmissão também é definida para que você possa verificar a saída no monitor serial do Arduino IDE.

Acertando o relógio pela primeira vez

Ao programar o DS3231, você deve descomente esta linha . Isso obterá a hora do sistema e a armazenará na memória RTC. Ao fazer isso, o relógio do módulo RTC é sincronizado com o relógio do sistema.

//rtc.adjust(DateTime(__DATE__, __TIME__));

Depois que o tempo for definido, você deverá reenviar o código acima, mas desta vez você deverá comente a linha da função rtc.adjust() . Caso contrário, isso substituirá o tempo definido anteriormente e quando o ESP32 for desligado, o RTC iniciará novamente a partir do momento em que você carregou o código.

Ao fazer isso, seu tempo permanecerá presente no fundo do módulo RTC enquanto o módulo RTC tiver energia em sua célula CR2032.

No laço parte, a data e a hora atuais são lidas no módulo DS3231 usando a função rtc.now(). Os componentes de data e hora são extraídos e a data formatada é impressa no monitor serial Arduino IDE a cada segundo.

5. Saída

Após fazer o upload do código para a placa ESP32, você verá que a hora começará a ser impressa no monitor serial do Arduino IDE.

6. Como exibir o tempo RTC DS3231 na tela OLED usando ESP32

Você também pode dar um passo adiante e exibir a hora na tela OLED depois de lê-la no DS3231. Para isso, você precisa instalar o Biblioteca Adafruit GFX SSD1306 no IDE do Arduino.

Depois de instalado, conecte o ESP32 ao módulo OLED e RTC na seguinte configuração.

Depois de conectar seu sensor, você verá o circuito semelhante ao diagrama esquemático abaixo.

Agora carregue o seguinte código DS3231 na placa ESP32.

#include
#incluir
#incluir
#include 'RTClib.h'

RTC_DS3231 rtc ;

Caracteres dias [ 7 ] [ 12 ] = { 'Domingo' , 'Segunda-feira' , 'Terça-feira' , 'Quarta-feira' , 'Quinta-feira' , 'Sexta-feira' , 'Sábado' } ;

Tela Adafruit_SSD1306 = Adafruit_SSD1306 ( 128 , 64 , & Arame , - 1 ) ;

vazio configurar ( ) {
Serial. começar ( 115200 ) ;

mostrar. começar ( SSD1306_SWITCHCAPVCC , 0x3C ) ;

se ( ! RTC. começar ( ) ) {
Serial. imprimir ( 'Não foi possível encontrar o RTC! Verifique o circuito.' ) ;
enquanto ( 1 ) ;
}
//descomente a linha abaixo ao definir o tempo pela primeira vez
//rtc.adjust(DateTime(__DATE__, __TIME__));
mostrar. limparDisplay ( ) ;
mostrar. definirTextColor ( BRANCO ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 0 , vinte ) ;
mostrar. imprimir ( 'RELÓGIO RTC' ) ;
mostrar. mostrar ( ) ;
atraso ( 5.000 ) ;
}

vazio laço ( ) {
DataHora agora = RTC. agora ( ) ;

mostrar. limparDisplay ( ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 75 , 0 ) ;
mostrar. imprimir ( agora. segundo ( ) , DEZEMBRO ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 25 , 0 ) ;
mostrar. imprimir ( ':' ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 65 , 0 ) ;
mostrar. imprimir ( ':' ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 40 , 0 ) ;
mostrar. imprimir ( agora. minuto ( ) , DEZEMBRO ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 0 , 0 ) ;
mostrar. imprimir ( agora. hora ( ) , DEZEMBRO ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 0 , 25 ) ;
mostrar. imprimir ( agora. dia ( ) , DEZEMBRO ) ;
mostrar. imprimir ( dias [ agora. dia da semana ( ) ] ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( vinte , 25 ) ;
mostrar. imprimir ( '-' ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 35 , 25 ) ;
mostrar. imprimir ( agora. mês ( ) , DEZEMBRO ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 60 , 25 ) ;
mostrar. imprimir ( '-' ) ;
mostrar. setTextSize ( 2 ) ;
mostrar. definirCursor ( 75 , 25 ) ;
mostrar. imprimir ( agora. ano ( ) , DEZEMBRO ) ;
mostrar. mostrar ( ) ;
}

Explicação do código

O código começou com algumas bibliotecas importantes necessárias para telas RTC e OLED. O display OLED é configurado usando a biblioteca Adafruit SSD1306.

Na parte do loop, a data e hora atuais são obtidas usando rtc.now(). Depois disso, a tela OLED é limpa e os componentes da hora são exibidos em formato de relógio digital. Você também pode modificar o código para ajustar o formato de data e hora.

Assim que o código for carregado em sua placa, você obterá a hora atual na tela OLED.

Observação: O código acima usa o 0x3C Endereço I2C para OLED. Este é o endereço I2C mais comum disponível em monitores OLED SSD1306. Se quiser encontrar o endereço I2C da sua tela OLED, você pode executar o Código do scanner I2C .

Conclusão

DS3231 é um sensor RTC que pode ser usado para cronometragem. Ele possui uma bateria reserva que pode manter o tempo preciso mesmo se a placa do microcontrolador estiver desligada. Para fazer a interface do ESP2 com o DS3231, você deve instalar a biblioteca RTClib em seu Arduino IDE. Depois disso, é necessário conectar o módulo RTC através do protocolo I2C usando o pino digital do ESP32. Uma vez conectado, basta fazer upload do código e ajustar a hora. Agora o sensor RTC marcará o tempo e você poderá lê-lo em seu monitor serial em projetos baseados em tempo.