Zegar czasu rzeczywistego dla Raspberry Pi
Oprócz wielu zalet, Raspberry Pi, co oczywiste, ma wady. Jedną z nich jest brak zegara czasu rzeczywistego. Co z tego wynika? Bez połączenia z internetem Raspberry Pi nie ustawi aktualnej daty po podłączeniu zasilania. Wada? Nie zawsze i nie dla każdego, ale jednak wada. Na szczęście, można ją dość łatwo usunąć i wyposażyć naszą Malinkę w zegar czasu rzeczywistego podłączony za pomocą magistrali I2C, na przykład DS1307.
Oto co będzie potrzebne:
- Raspberry Pi (no kto by się domyślił...) z włączoną obsługą magistrali I2C. Instrukcja włączenia I2C dostępna jest w moim wpisie sprzed roku,
- układ scalony DS1307,
- rezonator kwarcowy 32,768kHz,
- źródło zasilania, na przykład bateria CR2032,
- kilka przewodów,
- lutownica,
- spoiwo lutownicze zwane popularnie cyną,
Jak widać, lista elementów nie jest długa, a sam schemat elektryczny też nie powala na kolana stopniem skomplikowania:
A można to jeszcze uprościć kupując, na przykład na Allegro, układ RTC. Gotowy lub do samodzielnego montażu.
Uwaga, ważne: niektóre moduły mogą mieć rezystory pull-up na liniach I2C. My ich nie potrzebujemy. Raspberry Pi posiada już rezystory pull-up na liniach SDA i SCL. Dodatkowe są zbędne, więc albo ich nie montujemy, albo musimy wylutować.
Uwaga, ważne: tak, zasilanie jest brane z linii 5V, choć logika Raspberry Pi pracuje na 3.3V. Tym razem jest to bezpieczne, specyfikacja magistrali I2C na to pozwala ("otwarty kolektor" i wbudowane w Malinkę rezystory pull-up).
Wracając do tematu. Zlutować, włożyć baterię, podłączyć do Malinki i uruchomić.
Uwaga, ważne: nie podłączać układu do Raspberry Pi bez zainstalowanej baterii.
Jeśli nasza Malinka potrafi już pogadać z innymi urządzeniami po I2C, przechodzimy do następnego akapitu. Jeśli nie, postępujemy według tej instrukcji.
Czas najwyższy sprawdzić, czy nasz układ działa. Wydajemy polecenie
sudo i2cdetect -y 1
DS1307 powinien zgłosić się na adresie 0x68, a nasz ekran wyglądać tak:
Sprzęt działa, czas włączyć obsługę RTC DS1307: sudo nano /etc/modules i na końcu dodajemy linię rtc-ds1307
Czas na reset: sudo reboot
Dodajemy obsługę RTC na starcie:
sudo nano /etc/rc.local
i przed linią exit 0 dodajemy:
modprobe i2c-bcm2708
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
modprobe rtc-ds1307
hwclock -s
Sprawdzamy aktualną datę systemową date i datę zapisaną w układzie RTC sudo hwclock -r.
Nie pasują? Nic dziwnego. Czas zapisać datę do DS1307:
sudo hwclock -w
I już. To wszystko. Od tego momentu, przy każdym uruchomieniu Raspberry Pi będzie pobierać datę i czas z układu zegara czasu rzeczywistego. Internet nie jest już potrzebny.




