NSLU2 + OpenWRT + TI TMP112

Megkeresett egy ismerősöm, hogy kellene neki egy távolról elérhető hőmérő ami percenként naplózza a hőmérsékletet.

Első ötletem az volt, hogy hekkelek egy SD kártyát a termosztátomhoz, meg teszek elé egy RS-485 ethernet konvertert.

Elkezdtem hát nézegetni, hogy a Michrochip Application Libraries-ből mi munka átkokeszolni az FAT fájlrendszer over SD kártya kezelő kódot a saját kódjaim közé.

Mivel a mérnök és a macska egy tőről fakad (lusta mindkettő mint a dög), ezért eszembe ötlött, hogy van nekem régről egy széthekkelt NSLU2-m, amin van egy marék szabad GPIO, Ethernet, USB, tengernyi (8MB) flash.

Körbenéztem itthon, hogy no akkor miből élünk itton digitális hőmérő fronton, és találtam egy marék TMP112 SMBUS-os hőmérőt. Linux support első google-ra nézésre nincsen, viszont a TMP102 szoftveresen ugyanaz, ahhoz van.

Napi OpenWRT svn snapshot letölt, lepörget:
http://users.atw.hu/balubati/blog/comments.php?y=09&m=07&entry=entry090…

Először sajnálattal kellett tudomásul vennem, hogy ehhez a modulhoz még nincs OpenWRT csomag (így vagy belefordítom a kernelbe, vagy kézzel másolom), de némi hekkelés árán ez megoldódott:
https://dev.openwrt.org/ticket/12524
Bekapcsolni ezután a menuconfig -> Kernel modules -> Hardware monitoring support -> kmod-hwmon-tmp102 -al lehet.
Ez mint utóbb kiderült majdhogynem felesleges, mert nem a modul betöltésekor kell paramétereket átpasszoni, hogy melyik i2c buszra tapadjon.

Az NSLU2-n van egy I2C-s RTC, ami a GPIO 6-7-re (SCL-SDA) van rádrótozva.
Az RTC használatához a kernel_menuconfig-ban a Device drivers -> Real Time Clock -> Xicor/Intersil X1205 modult kell beforgatni.

Az I2C over gpio használatához van OpenWRT csomag, ezt a menuconfig -> Kernel modules -> I2C support -> kmod-i2c-gpio úton kapcsolhatjuk be. A cucc okos, magátoól tudja, hogy melyik GPIO-n van az SDA, SCL.

Ha ez megvan és fent van a csigán akkor a hwclock segedelmével be lehet állítani az időt az RTC-ben/ből.
Ahhoz hogy ez reboot után érvénybe lépjen a következő initscriptet készítettem az /etc/init.d/hwclock fájlba:

 
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

START=50

start() {
       hwclock -s
}

Erre adjunk futtatási jogot (chmod +x /etc/init.d/hwclock).
Majd engedélyezzük:(/etc/init.d/hwclock enable).
Állítsuk be a rendszeridőt ()date -s"2012-11-24 19:29:00")
Majd írjuk ki az RTC-be (hwclock -w)

Loggolásunk egyik kérdését az időt ezzel letuduk, essünk neki a hőmérőnek.


root@OpenWrt:/etc/init.d# i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- UU 
70: -- -- -- -- -- -- -- --        

Meg is van a két eszközünk a TMP112 földre kötött ADDR lábbal a 00x48-as címen az X1205 meg a 0x6F címen.

A tmp102 kernelmodulnak a következő trükkel kell megmondani melyik i2c buszra telepedjen:


echo tmp102 0x48 > /sys/class/i2c-dev/i2c-0/device/new_device

Ezt követően a sensors paranccsal szépen vagy a sysfsből nyers módon lehet a hőmérsékletet kiköhögtetni:


root@OpenWrt:/etc/init.d# sensors
tmp102-i2c-0-48
Adapter: i2c-gpio0
temp1:        +24.9 C  (high = +160.0 C, hyst = +150.0 C)

root@OpenWrt:/etc/init.d# cat /sys/class/hwmon/hwmon0/device/temp1_input 
24937

Mára ennyi, holnap kokeszolok hozzá valami cronjobot ami logol sqliteba, meg valami egyszerű webes frontendet hozzá.

Hozzászólások

"A tmp102 kernelmodulnak a következő trükkel kell megmondani melyik i2c buszra telepedjen hanem a következő módon:"

A lektor csunyan dolgozik nalad :-)

Egyebkent erdekes iras. Az, hogy az svn.openwrt.org folyamatosan 404-ekkel bombaz bongeszobol, az teljesen normalisnak szamit?
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

>> A cucc okos, magától tudja, hogy melyik GPIO-n van az SDA, SCL.

:D