Další možností (preferovanější), jak zobrazit teplotu ze senzoru DS18B20 je přes převodník I2C na 1-Wire sběrnici.
Zde používám DS2482-100, která obsahuje jednu 1-wire sběrnici. Existuje i druhá SD2484-800, která má 8 nezávislých sběrnic. Koupíme je třeba zde.
Samozřejmě můžeme na i2c sběrnici ty převodníky skládat pěkně za sebou a udělat si tak z DS2482-100 dvě a více oddělených 1-wire sběrnic.
Schéma zapojení převodníku:
Nastavení RasPi:
- přes sudo raspi-config povolíme používání 1-Wire a restartujeme RasPi.
- zkontrolujeme, že se na sběrnici I2C objevilo nové zařízení – i2cdetect -y 1
- na obrázku jsou vidět např. dva převodníky s adresou 18 a 19!
- nainstalujeme OWFS a modul pro python – sudo apt-get -y install owfs python-ow ow-shell
- po instalaci by měla běžet http služba OW na portu 2121 (http://127.0.0.1:2121)
- upravíme /etc/owfs.conf
- zakomentovat řádek
- # server: FAKE = DS18S20,DS2405
- zakomentovat řádek
- # ftp: port = 2120
- vložit v sekci USB device: DS9490
- server: device = /dev/i2c-1
- odstranit komentáře u řádků:
- mountpoint = /mnt/1wire
- allow_other
- pokud máme více 1-wire plus adaptérů (zapojených klasicky paralelně), musíme říct, aby fungoval na všech
- server: i2c = ALL:ALL
- zakomentovat řádek
- uložit a restartovat RasPi
- vyzkoušíme načíst základní stromovou strukturu z OW ( owget, owdir, owread, owwrite )
- owdir – vypíše strukturu
- owdir /28.FFA88BA01605 – vypíšeme si vlastnosti senzoru
- owread /28.FFA88BA01605/temperature – teplota na sezzoru
- owread /28.FFA88BA01605/type – typ připojeného senzoru
Připojení OW jako složky file systému – sudo owfs
- následně již pracujeme jako s file systémem
- ls -l /mnt/1wire/
- cat /mnt/1wire/bus.0/28.FFA88BA01605/temperature
- cat /mnt/1wire/bus.0/28.*/temperature
Nakonec jednoduchý python skript na hromadné načtení dat:
import ow ow.init('localhost:4304') sensorlist = ow.Sensor('/').sensorList() for sensor in sensorlist: print('Device Found') print('Address: ' + sensor.address) print('Family: ' + sensor.family) print('Alias: ' + sensor.alias) print('ID: ' + sensor.id) print('Type: ' + sensor.type) print('Temperature: ' + sensor.temperature) print(' ')
PS1: vypnutí zbytečných služeb:
- sudo /lib/systemd/systemd-sysv-install disable owftpd
- sudo /lib/systemd/systemd-sysv-install disable owhttpd
PS2: vytvoření aliasů (pojmenování) pro jednotlivé senzory
- do konfiguračního souboru /etc/owfs.conf vložíme řádek
- alias = /etc/owfs_alias
- vytvoříme soubor /etc/owfs_alias a naplníme jej
- 28.FF4A53811605FC = Obyvak
- 28.FFA88BA0160587 = Loznice
- restartujeme službu OW
- sudo /etc/init.d/owserver restart