Top

DS18B20

Ein Digitaltemperatursensor mit einem Temperaturbereich von -55°C bis 125°C.

DS18B20

Der Sensor besitzt drei Pins:

  • Ground
  • Data
  • Power

Den Sensor und Wiederstand steckt man auf die Platine und verkabelt es entsprechend, wobei Data an einem GPIO Pin angeschlossen wird und zwischen Data und Power wird ein 4.7KΩ Wiederstand gesteckt. Wenn der Temperatursensor verdreht angeschlossen wird, kann er sehr heiss werden!

DS18B20

Die 1-wire Kernel Module sind vorinstalliert werden aber nicht automatisch geladen.

$ sudo modprobe w1-gpio && sudo modprobe w1-therm

Um die Module beim starten zu laden einfach in die /etc/modules Datei eintragen.

$ ls /sys/bus/w1/devices/

Im devices Verzeichnis sollte sich nun ein Link mit dem Sensornamen befinden, der Name ist eindeutig und hat diese Form 28-0000055…., wobei die Punkte natürlich Zahlen oder Buchstaben sind.

$ ls /sys/bus/w1/devices/28-0000055....

Der Temperatursensor schreibt in die Datei w1_slave.

$ cat /sys/bus/w1/devices/28-0000055..../w1_slave

Der Inhalt der Datei hat diese Form.

15 01 4b 46 7f ff 0b 10 99 : crc=99 YES
15 01 4b 46 7f ff 0b 10 99 t=17312

Mit einem Python Skript kann man nun jede Sekunde die Temperatur lesen.

import os
import time

os.system('modprobe w1-gpio && modprobe w1-therm')

try:
    while 1:
        temp_file = open('/sys/bus/w1/devices/28-0000055..../w1_slave')
        temp_data = temp_file.read()
        temp_file.close()
        data = temp_data.split("\n")[1].split(" ")[9]
        temperature = float(data[2:])
        temperature = temperature / 1000
        print temperature
        time.sleep(1)
except KeyboardInterrupt:
    print 'Bye...'

Mehrere Sensoren kann man in Reihe schalten. Jeder Sensor hat einen eingebrannten eindeutigen Code zur Identifikation. Das Skript muss etwas erweitert werden, damit von mehreren Sensoren gelesen wird.

import os
import time

os.system('modprobe w1-gpio && modprobe w1-therm')

try:
    sensor_list = []
    for i in os.listdir('/sys/bus/w1/devices/'):
        if i != 'w1_bus_master1':
            sensor_list.append(i)
    while 1:
        for i in sensor_list:
            temp_file = open('/sys/bus/w1/devices/' + i + '/w1_slave')
            temp_data = temp_file.read()
            temp_file.close()
            data = temp_data.split("\n")[1].split(" ")[9]
            temperature = float(data[2:])
            temperature = temperature / 1000
            print temperature,
        print ''
        time.sleep(1)
except KeyboardInterrupt:
    print 'Bye...'

DS18B20