Zegar czasu rzeczywistego
Zegar czasu rzeczywistego (Real Time Clock – RTC) – jest układem scalonym przechowującym aktualną datę oraz godzinę, zasilany osobną baterią. Układ przechowuje czas nie tylko gdy urządzenie jest wyłączone, ale także gdy jest całkowicie pozbawione zasilania.
RTC, a RaspberryPi
Jedną z wad RaspberryPi jest brak zegara czasu rzeczywistego, co znacznie utrudnia pracę na nim gdy urządzenie nie jest na stałe podłączone do sieci, aby mógł pobrać czas z jednego z serwerów NTP.
Istnieje jednak możliwość dokupienia zegara czasu rzeczywistego dodatkowo. Tak zakupiony zegar wpinamy w odpowiednie piny interfejsu GPIO. Osobiście zakupiłem układ DS3231.
Implementacja
Wykorzystujemy do tego piny I2C, w przypadku RaspbberryPi 2 B piny 1, 3, 5, 7, 9.
Przed podłączeniem należy wyłączyć nasze urządzenie najlepiej komendą:
sudo halt
Po wpięciu i uruchomieniu urządzenia możemy przystąpić do konfiguracji naszej malinki.
Na początku musimy zainstalować pakiet i2c-tools.
apt-get update
apt-get install i2c-tools
Po instalacji należy wydołać komendę:
sudo i2cdetect -y 1
W przypadku RaspberryPi 1 wykujemy komendę ze zmienionym parametrem.
sudo i2cdetect -y 0
Powinieneś zobaczyć ID #68, jest to adres układu DS3231. Układ jest tożsamy z układem DS1307.
Następnie ładujemy moduł RTC do jądra systemu
sudo modprobe rtc-ds1307
następnie wykonujemy kolejno komendy:
sudo bash
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
w przypadku RaspberryPi 1
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
Zegar czasu rzeczywistego został skonfigurowany teraz musimy wgrać w niego aktualną datę oraz godzinę.
Na początku musimy ustawić datę na urządzeniu możemy to zrobić komendą date
lub pobrać z jednego z serwerów NTP np. ntpdate ntp.task.gda.pl
.
Teraz możemy zapisać czas systemowy do układu. Robimy to komendą:
sudo hwclock -w
Aby sprawdzić jaki czas jest zapisany w układzie wystarczy wykonać komendę z parametrem -r.
sudo hwclock -r
Możliwe kompilacje w RaspberryPi 2
Zdarza się często, że podczas próby wykonania komendy i2cdetect -y 1
pojawia się następujący błąd
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory
.
Wtedy musimy wykonać następujące czynności.
Edytujemy plik /boot/config.txt
nano /boot/config.txt
zmieniając następującą linijkę poprzez usunięcie komentarza (usuń #).
#device_tree_param=i2c_arm=on
Kolejnym plikiem do edycji jest /boot/cmdline.txt
nano /boot/cmdline.txt
dodajemy na jego końcu:
bcm2708.vc_i2c_override=1
Na koniec zmieniamy plik raspberrypi.conf
.
nano /etc/modules-load.d/raspberrypi.conf
dodając:
i2c-bcm2708
i2c-dev
Po wszystkim restartujemy urządzenie sudo reboot
.