A Raspberry Pi gyárilag, elsősorban anyagi megfontolásokból nem rendelkezik a hagyományos asztali számítógépeknél, laptopoknál megszokott úgynevezett valós – idejű – óra áramkörrel (RTC, real-time-clock). Általánosságban elegendő, ha a Pi az internetről szinkronizálja saját óráját (NTP szerver).Abban az esetben ha az alkalmazásunk igényli a független, hardveres óra meglétét (naplózás, mérés, okosotthon alkalmazások, stb.) akkor a Raspberryt egy apró de nagyon hasznos kiegészítővel kell ellátnunk. A következő leírásban azokat a lépéseket tekintjük át, amikkel a fent említett hasznos kis kiegészítőt illeszthetjük a Pi-hez, mind hardveres, mind szoftveres értelemben. Az útmutató elsősorban az Adafruit DS1307, PCF8523 és DS3231 áramköreihez készült.

1. Bekötés

Az RTC panelek többféle kialakításúak lehetnek, vagy szerelt tüskesorral rendelkeznek, ilyenkor breadboard-ba csatlakoztatva, vagy jumperkábelekkel tudjuk a Pi-hez kapcsolni őket, vagy közvetlenül a megfelelő csatlakozóval a GPIO tüskesorra kapcsolódnak.

Bekötésük négy vezetéket igényel, amik a tápfeszültség és az i2c busz adat (SDA) illetve óra (SCL) lábait kapcsolják a GPIO porthoz.

DS3231 & PCF8523
DS1307

2. Az i2c busz engedélyezése

Az RTC modul telepítése előtt engedélyeztetnünk kell a Pi i2c buszát. Ezt vagy a grafikus felületen tehetjük meg (Tálca – Start menü – Beállítások – Raspberry Pi Configuration – Interfaces – Enable I2C) vagy a terminálon keresztül a
sudo raspi-config parancs kiadásával.

Ennek hatására a beállító menübe lépünk:

raspi-config

Ahol az 5. menüpont (Interfacing Options) segítségével bekapcsolhatjuk az i2c kommunikációt.

Interfacing options

A beállítás után indítsuk újra a Pi-t, vagy a grafikus felületről, vagy a terminálból a sudo reboot paranccsal.

3. Ellenőrzés

Az újraindulást követően töltsük le azt a programcsomagot, aminek segítségével i2c-s eszközeink működését ellenőrizhetjük, ezek a python-smbus és az i2c-tools:sudo apt-get install python-smbus i2c-tools.

A telepítést követően adjuk ki a sudo i2cdetect -y 1 parancsot.

Ha a csatlakoztatott RTC modul helyesen működik, a program az ID #68 címen megtalálja az eszközt:

I2C eszközünk a 68-as címen

4. Telepítés

Miután sikeresen csatlakoztattuk az RTC modult a Pi-hez, és ellenőriztük, hogy a számítógép a helyes címen látja is az eszközt, módosítsuk a /boot/config.txt fájlt, hogy a megfelelő kernel modul a boot-olás során betöltődjön.

Annak függvényében, hogy melyik RTC modult használjuk, egészítsük ki a config.txt fájlt az alábbi sorral:

DS1307:
dtoverlay=i2c-rtc,ds1307

PCF8523:
dtoverlay=i2c-rtc,pcf8523

DS3231:
dtoverlay=i2c-rtc,ds3231

Miután hozzáfűztük a fájl tartalmához a fenti sorok egyikét, mentsük a fájlt, lépjünk ki a szerkesztőből, és indítsuk újra a Pi-t.

A config.txt fájl szerkesztéséhez használjuk a nano editort: sudo nano /boot/config.txt

Az „reboot” után futtassuk le újra az eszköz ellenörző parancsot: sudo i2cdetect -y 1

Amennyiben az eszköz megfelelően működik, az eddigi 68-as címen az „UU”karakterek jelennek meg:

Sikeres driver betöltés!

Ez a kép azt jelzi, hogy az RTC áramkör drivere sikeresen betöltődött.

5. A „fake” clock eltávolítása

Most, hogy csatlakoztattuk az áramkört a Pi-hez, és ellenőriztük a működését is, a következő feladat az un. fakehwclock eltávolítása. Ez a csomag egy ún. hely-őrző program, addig működik, amíg nem csatlakoztatunk egy hardveres órát a Raspberryhez.

Az eltávolításhoz az alábbi két sort kell begépelni a terminál ablakban:
sudo apt-get -y remove fake-hwclock
sudo update-rc.d -f fake-hwclock remove

A két sor eltávolítja a fakehwclock csomagot, valamint az összes rá történő hivatkozást az un. startup script-ből.
Ezután még módosítanunk kell a raspbianrtcscriptj-ét, ehhez szintén a nano editort használjuk:
sudo nano /lib/udev/hwclock-set

Itt a következő módosítást kell megtennünk: keressük meg, és „kommenteljük ki” az alábbi sorokat a script-ből:

if [ -e /run/systemd/system ] ; then
exit 0
fi

azaz helyettesítsük az eredeti sorokat a következőkkel:

#if [ -e /run/systemd/system ] ; then
#exit 0
#fi

Mentsük a változásokat és lépjünk ki a szerkesztőből!

6. A hwclock beállítása

A mutatott érték nagy valószínűséggel eltér a valós időtől, de ez nem hiba, hiszen az rtc-t még nem szinkronizáltuk. A valós időt, amennyiben a Pi kapcsolódik az internethez, a következő paranccsal kérdezhetjük le:
date.

Amennyiben a mutatott érték helyes, tovább léphetünk, és szinkronizálhatjuk az rtc idejét az „internetes’ időhöz:
sudo hwclock -w.

A fenti parancsot ezek után a gombelem cseréjéig nem kell többet kiadnunk!

Ha most újra lekérdezzük a hardveres órát, a mutatott érték már a valós idő lesz!
sudo hwclock -r.

A fenti lépések végrehajtását követően az RTC áramkörrel kiegészített Raspberry Pi mindig a pontos idő és dátum értéket fogja szolgáltatni, akár a tápfeszültség ki majd bekapcsolása, akár az internet kapcsolat megszűnte után is!

A cikkben használt RTC modulok (DS1307, PCF8523, DS3231) megvásárolhatóak a MálnaPC Webshopjában!