7 listopada 2008

Skutecznie proste pomiary temperatury w lodówce z iButton

Odgrzebałem kilka starych gratów z mojej elektronicznej walizki, gdyż jak z tematu wynika podejrzewam, że moja lodówka nie działa poprawnie :-) Swoje odkrycia zacznę od wzmianki o układach iButton, o których tutaj będzie mowa. Istnieje wiele różnych układów od czujników temperatury po przełączniki, rejestratory temperatury, czujniki wilgotności, przetworniki analogowo-cyfrowe ADC i wiele innych praktycznych układów. Posiadają one unikalny - wypalany w fazie produkcji - identyfikator. Tą własność wykorzystuje każdy program obsługujący 1-wire oraz iButton. Są to poniekąd gotowce, więc ważniejsze tutaj są interfejsy do magistrali 1-wire łączącej iButton ze światem zewnętrznym oraz rzecz jasna oprogramowanie :-) Podstawowymi cechami dobrego oprogramowania są niewątpliwie możliwość wyszukiwania urządzeń oraz bindowania rejestrów urządzeń na odpowiednie obiekty ze zmapowanymi obszarami pamięci dostępnej do odczytu/zapisu. Z takiej abstrakcji wyrasta kilka powszechnie znanych i lubianych projektów obsługujących tą technologię t.j. digitemp. Poniżej zawarte są przykłady wywołań z linii poleceń i stosowne komentarze.

Oto zdjęcie zabawki pierwszej, którą jest zestaw startowy iButton kit. Jeden z adapterów dla technologii iButton tzw. pastylka
Using the 1-Wire® Public Domain Kit
protokół 1-wire wg wikipedii
, czyli w zasadniczym mniemaniu elektronicznym miernikiem/rejestratorem temperatury. Ten starter Kit zawiera są są to następujące układy:

  • DS2502/DS1982 1Kbit Add only memory - interfejs łączący port RS-232 z 1-wire dla iButton z dostępnym 1kB pamięci do wykorzystania

  • DS1921/H/Z Thermochron iButton - cyfrowy rejestrator temperatury z programowanymi alarmami w zakresie 0 do +45 stopni C (+/- 1 stopien C)





Przykład wywołania digitemp:

$ sudo digitemp_DS9097U -w -s /dev/ttyS0
DigiTemp v3.3.2 Copyright 1996-2004 by Brian C. Lane
GNU Public License v2.0 - http://www.brianlane.com
Turning off all DS2409 Couplers
..
Devices on the Main LAN
2103410000C034C4 : DS1921/H/Z Thermochron iButton
091AAD62010000BB : DS2502/DS1982 1Kbit Add only memory


Nieco skromniejszy - zrobiony w ok. 15 minut - czujnik temperatury oparty na kostce DS18S20 - umożliwiającej pomiar temperatury w zakresie od -55 do + 125 stopni C. Realizacja ogólnie znana




Przykład wywołania digitemp z banalnym "na kolanie" robionym interfejsem:

$ digitemp_DS9097 -w -s /dev/ttyS0
DigiTemp v3.3.2 Copyright 1996-2004 by Brian C. Lane
GNU Public License v2.0 - http://www.brianlane.com
Turning off all DS2409 Couplers
.
Devices on the Main LAN
28579B3C00000028 : DS18B20 Temperature Sensor


Linki do API oraz oprogramowanie do komunikacji z czujnikami 1-wire (iButton)
http://www.maxim-ic.com/products/ibutton/solutions/search.cfm?Action=DD&id=207
http://www.maxim-ic.com/products/ibutton/solutions/product.cfm?id=428
http://www.maxim-ic.com/products/ibutton/solutions/company.cfm?id=181
http://www.maxim-ic.com/products/ibutton/solutions/product.cfm?id=373
http://www.maxim-ic.com/products/ibutton/solutions/product.cfm?id=389

w tym powalające projekty OpenSource:

http://sourceforge.net/projects/owfs/
One Wire Temperature Finder (bohaterski kod od googla używany w opisie)

http://sourceforge.net/dbimage.php?id=71236
http://owfs.sourceforge.net/faq.html
http://owfs.sourceforge.net/owpython.html
http://www.pyzine.com/Issue007/Section_Articles/article_MobileDataCollection.html
http://owfs.sourceforge.net/install.html
http://www.jjoseph.org/misc_projects/1-wire_sensors.html
http://www.kaboodle.com/jon_p/1-wire-electricity-consumption-measuerment.html
http://stackoverflow.com/questions/113185/how-do-i-use-owfs-to-read-an-ibutton-temperature-logger
http://www.jjoseph.org/index.php?option=com_staticxt&staticfile=/machine24.html
http://www.ourcoolhouse.com/monitor/monitor.htm
http://stackoverflow.com/questions/113185/how-do-i-use-owfs-to-read-an-ibutton-temperature-logger
http://www.jjoseph.org/index.php?option=com_staticxt&staticfile=/machine24.html

Python bindings and wrappers for accessing iButton devices on a 1-wire net

Java client for DS1923 iButton with server written in PHP for storage and visualization of data

http://sourceforge.net/dbimage.php?id=60310
www.capgo.com/Resources/SoftwareDev/omap-owire.pdf
http://oww.sourceforge.net/hardware.html
http://www.codeproject.com/KB/cpp/ibuttoninterface.aspx
http://www.audon.co.uk/1wire_humidity.html
http://www.maxim-ic.com/products/1-wire/software/
http://www.mrsoft.fi/ohj01en.htm
http://www.digitemp.com/
http://www.digitemp.com/images/screenshots/walk1wire.png
http://www.digitemp.com/images/screenshots/init1wire.png
http://elektroniikka.org/thermometer/?page=adapter
http://www.maxim-ic.com/products/ibutton/software/1wire/images/screenshot.gif
http://www.maxim-ic.com/quick_view2.cfm?go=part_number_search&ss=DS1921
Stacja pogodowa
Objaśnienie działania OWFS

Jest tego na prawdę sporo jak na okres ok. 10-letniego istnienia technologii iButton.

OWFS - najpopularniejsze rozwiązanie obsługi magistrali 1-wire


Uruchomienie serwera w trybie DEBUG:

sudo /opt/owfs/bin/owserver -d /dev/ttyS0 --8bit -p 127.0.0.1:40141 --Celsius --foreground --error_print 2 --error_level 9


Uruchomienie serwera w trybie normalnym z logowaniem błędów:

sudo /opt/owfs/bin/owserver -d /dev/ttyS0 --8bit -p 127.0.0.1:40141 --Celsius --foreground --error_print 2



Uruchomienie prostego klienta w języku Python, który wyświetli temperaturę z czujnika w stopniach Celsjusza:

#! /usr/bin/env python

import sys
import ownet

if len(sys.argv) != 3:
print 'temperatures.py server port'
sys.exit(1)

r = ownet.Sensor('/', server=sys.argv[1], port=int(sys.argv[2]))
e = r.entryList()
s = r.sensorList()
print 'r:', r
print 'r.entryList():', e
print 'r.sensorList():', s

for x in r.sensors():
if hasattr(x, 'temperature'):
print x, x.temperature


$ python temperatures.py 127.0.0.1 40141

Dla tych, którzy wolą www istnieje możliwość postawienia serwera www komendą:

/opt/owfs/bin/owhttpd -d /dev/ttyS0 --8bit -p 127.0.0.1:40141 --Celsius --foreground --error_print 2

Wówczas w przeglądarce wpisujemy http://127.0.0.1:40141/ i widzimy:















Dla chcących rozszerzyć wiedzę polecam ten projekt thermd

Brak komentarzy: