Como usar o módulo RTC DS3231 na Raspberry Pi
Por padrão o Raspberry Pi não tem um relógio de tempo real (RTC) integrado, e ele usa a rede ou internet para atualizar suas informações de data e hora através do protocolo NTP (Network Time Protocol). Nesse post vamos mostrar uma alternativa com o módulo DS3231 na Raspberry Pi.
Pode ser utilizado um módulo RTC DS3231, como esse mostrado abaixo, conectado em uma Raspberry Pi 2:
O módulo tem o CI DS3231 (datasheet), de baixo custo e alta precisão, e uma bateria que mantém os dados do CI mesmo quando o módulo está sem alimentação.
Para utilizar o módulo com o Raspberry Pi, vamos habilitar a interface I2C da placa, e depois partir para a conexão do módulo e configuração do Raspbian para utilizar o novo hardware.
Habilitando a interface I2C no Raspberry Pi
Atualize o Raspbian com os comandos
sudo apt-get update sudo apt-get upgrade
Após a atualização (que pode demorar alguns minutos), entre no raspi-config utilizando o comando
sudo raspi-config
Na tela principal, selecione a opção 9 – Advanced Options:
Em seguida, entre na opção A7 I2c:
Na tela seguinte, confirme que você deseja habilitar a interface I2C:
Confirme também que a interface I2C deve ser carregada quando o Raspbian for iniciado:
Após confirmar as opções, reinicie o Raspbian para que as alterações tenham efeito.
Instale agora os módulos para que a interface I2C funcione com o Python e também ferramentas de diagnóstico:
sudo apt-get install python-smbus i2c-tools
Execute o comando abaixo para desligar o Raspbian:
sudo shutdown now
Aguarde alguns instantes para que o sistema operacional seja corretamente desligado e retire o conector de força do Raspberry.
Ligação do RTC DS3231 na Raspberry Pi
Com a placa desligada, vamos realizar a conexão do módulo na GPIO, O módulo RTC DS3231 utiliza a interface I2C para comunicação por meio dos pinos 1 (3.3V), 3 (SDA), 5 (SCL) e 9 (GND) da GPIO do Raspberry.
Ligue o Raspberry e execute o comando abaixo para se certificar de que a comunicação entre a placa e o módulo está ok:
sudo i2cdetect -y 1
O comando retorna uma tela como essa:
Ela mostra que um dispositivo I2C foi detectado no endereço 0x68. No caso, o nosso módulo RTC DS3231.
Configurando o Raspbian para usar o RTC
Agora vamos modificar alguns arquivos do sistema e configurar o Raspbian para que pegue as informações de data e hora via hardware. Edite o arquivo modules:
sudo nano /etc/modules
Dentro dele, insira as linhas i2c-bcm2835 e rtc-ds1307. O arquivo ficará mais ou menos assim:
Salve o arquivo e agora edite o arquivo rc.local:
sudo nano /etc/rc.local
Adicione as informações abaixo antes da linha exit 0, no final do arquivo:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock -s
O arquivo rc.local deve ficar assim:
Essa modificação no arquivo indica ao Raspbian que a sincronização de data e hora deve ser feita com o módulo RTC. Salve o arquivo e reinicie o Raspbian usando o comando sudo reboot.
Verifique a data e a hora do sistema utilizando o comando
date
Talvez seja necessário ajustar a timezone (fuso horário) do Raspbian. Isso pode ser feito também no raspi-config.
Para setar a data e a hora, utilize:
sudo date -s "13 APR 2016 13:06:00"
Isso atualiza o relógio do sistema operacional. Para gravar esses dados no módulo RTC, use:
sudo hwclock -w
E para verificar a data e hora que estão gravados no RTC DS3231, utilize o mesmo comando, mas com o -r no final:
sudo hwclock -r
Para testar se tudo está funcionando corretamente, desligue o Raspbian por alguns minutos, desconecte o cabo de força e o adaptador de rede, e verifique, com o comando date, se as informações do relógio continuam atualizadas.
Gostou? Confira outros posts usando Raspberry Pi aqui mesmo no Arduino e Cia!
ola bom dia de primeira vzs me retorno positivo *68,ou seja digitei "sudo i2cdetect -y 1" porem o retorno de primeira foi endereço *68 depois de reiniciar o retorno e em letras *UU testei dois componentes no rpi2+ raspbian !
Olá !
Vc conseguiu resolver o problema ?
Estou enfrentando a mesma dificuldade.
Gostaria de saber qual referência vc utilizou.
Mesma situação aqui "UU" e não retém o horário… Alguém conseguiu resolver?
Bom dia!
Pode ser o caso da bateria não segurar o horário. Só uma hipótese.
Abraço!
Adilson
Depois de configurar é normal ficar o "UU". Se não está retendo o horário o problema é outro, pode ser a bateria mesmo.
No meu caso, aparece dois números: 68 e 50. Alguém saberia porque?
Só tenho o rtc conectado
Oi Marina,
Tudo bem? conseguiu resolver? como eles aparecem no display?
Ah, e qual versão da placa vc está usando? Talvez seja uma mais nova do que a que eu usei no post. Se for isso, preciso atualizar. 🙂
Abraço!
Adilson
Esse post não deu certo comigo
Oi Edson,
Tudo bem? O que deu errado?
Abraço!
Adilson
Eu faço todo o passo a passo , a única diferença é que não achei onde eu configuro para o i2c iniciar na inicialização, pois estou usando a ultima versão do Raspberry Pi OS. Só que quando eu ligo novamente, a hora está errada. Consegue me ajudar?
Obrigado.
Oi Diego!
Para habilitar o I2C, entre no raspi-config usando o comando:
sudo raspi-config
Navegue até a opção “3 Interface Options” e lá dentro tem a opção de habilitar o I2C.
E obrigado pela pergunta, já vou atualizar o post. 🙂
Abraço!
Adilson
Eu já fiz isso também, porém ainda não funcionou…
Vou ficar no aguardo da atualização, para ver o que posso estar fazendo de errado. Muito obrigado.