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.
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:
Ahol az 5. menüpont (Interfacing Options) segítségével bekapcsolhatjuk az i2c kommunikációt.
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:
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:
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!