Raspberry Pi RTC DS1307 + nettemp

Podobno tej jednej funkcji brakuje w Raspberry Pi najbardziej, podtrzymania czasu rzeczywistego za pomocą bateryjki. Razpberry Pi nie zostało wyposażone w RTC pewnie z tego powodu że istnieje alternatywa w postacji NTP. Jednak czasem z różnych powodów RTC jest potrzebne i poniżej pokażę jak podłączyć i zainstalować taki moduł w Raspberry Pi.

Sprzęt

Na początek trzeba zakupić moduł RTC, ja zakupiłem go na banggood.com

techfreak_raspberry_pi_rtc_ds1307_2_1 techfreak_raspberry_pi_rtc_ds1307_1_1

Połączenie

Połączenie jest bardzo proste bo łączę moduł do szyny i2c na Raspberry Pi. VCC do 5V, GND – GND, SDA – SDA, SDC – SDC.

techfreak_raspberry_pi_rtc_ds1307_3_1

Uruchomienie

Na pewno trzeba mieć załadowane moduły I2C. I2C w Raspberry Pi można uruchomić w programie raspi-config wchodząc do Advanced Options a następnie do I2C. Po tych czynnościach można wykonać restart i sprawdzić i2cdetect -y 0 lub i2cdetect -y 1 czy moduł RTC został poprawnie wykryty. Jeśli nie masz i2cdetect zainstaluj i2c-tools. W zależności jaką wersję Raspberry Pi posiadasz taki masz numer szyny i2c-1, i2c-0

sudo apt-get install i2c-tools

Przechodząc dalej, trzeba uruchomić moduł odpowiedzialny za pracę z RTC i wskazać na jakim adresie jest dostępny

modprobe rtc-ds1307
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device

Dodaj do autostartu

sudo echo "rtc-ds1307" >> /etc/modules
sudo sed -i '/exit 0/i echo ds1307 0x68 > \/sys\/class\/i2c-adapter\/'$(ls /dev/i2c-* |awk -F/ '{print $3}')'\/new_device && hwclock -s' /etc/rc.local

Po wydaniu polecenia hwclock powinien pokazać datę z 2000 roku, to oznacza że działa.

2

Aby zsynchronizować czas systemowy z RTC trzeba wydać polecenie hwclock -w ale jeśli nie jest poprawny to trzeba wydać polecenie ntp -qg aby synchronizować czas systemowy z jakimś serwerem czasu a dopiero wtedy zapisać go w pamięci DS1307. Jesli nie masz ntp w systemie trzeba go zainstalować.

sudo apt-get install ntp
sudo service ntp restart
ntpd -qg
hwclock -w

Po takiej operacji zapisał się poprawny czas w module i podtrzymywany jest bateryjką 3.6V. Aby sprawdzić czy na pewno wydaj polecenie hwclock.

4

Teraz w systemie działa Ci NTP i RTC. Jeśli nie będzie połączenia do internetu po restarcie Raspberry Pi weźmie czas z modułu który podłączyłeś.

Nettemp

Jeśli masz zainstalowanego nettempa na Raspberry Pi wystarczy przejść do Settings > Time gdzie przygotowałem menu w którym można powyższe czynności wyklikać i nie trzeba martwić się o moduły czy wpisywanie czegoś do plików.

10

Koniec

Dajcie znać czy wam wszystko działa i jest ok w komentarzach.

Share Button

Przemek

Twórca portalu techfreak, elektronik, pasjonat wszystkiego co fajnie, co można przerobić. W wolnym czasie grzebie przy nettemp. A sport jaki uprawia to mini drony klasy 250.

  • Sławek A.

    Czy można tak bezpośrednio podpinać tego RTC do Rpi? Chodzi mi o poziomy napięć na szynie I2C, gdyż NIBY Rpi nie toleruje napięć 5V na pinach wejściowych, z drugiej strony pokazujecie, że to działa.. Może dla bezpieczeństwa choć rezysory na szynę I2C do RTC połozyć?

    • Rpi ma 3.3V a szynie więc nie masz jak zwiększyć do 5V. (na razie jestem sam w ekipie :p)

      2015-04-08 15:36 GMT+02:00 Disqus :

      • Sławek A.

        Hej ;)
        W stronę 3.3V -> 5V to nie problem, bo mieścimy się w poziom stanu wysokiego zawsze. Martwiło mnie to, że w RTC mamy podciągnięcie linii do 5V (2 resystory opisane R2 i R3), a Rpi może nie tolerować takich podciągnięć, bo na pinach wejściowych akceptuje max 3.6V o ile mi wiadomo. Można oczywiście uniwersalny bufor poziomów tam zastosować, ale jak widać gdy podpinałeś bezpośrednio, to Rpi się nie uszkodził, co jest dla mnie ciekawe :)

        Jeśli w przyszłości jednak u kogoś doszło by do uszkodzenia wejść Rpi przez podanie napięcia 5V na szynie I2C od zegara RTC, to mógłbym podsunąć kilka możliwości dopasowania napięciowego sygnałów, choć jeśli działa bez tego to nie ma co szarżować :)