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!