RasPi – teploměr DS18B20 (1wire) přes i2c bus driver DS2482

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
  • uložit a restartovat RasPi
  • vyzkoušíme načíst základní stromovou strukturu z OW ( owgetowdirowreadowwrite )
    • 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

Permanent link to this article: https://www.elvisek.cz/2017/11/raspi-teplomer-ds18b20-pres-i2c-1wire/