Thermometer. CC-BY 2.0: http://www.flickr.com/photos/renaissancechambara/
Artikel
1 Kommentar

Mit Perl Skript 1-Wire Temperatursensor DS18B20 am Raspberry Pi abrufen

Ich habe vor ein paar Tagen mein GPIO-Test-Package für den Raspberry Pi bekommen. Heute bin ich beim Testen des Temperatursensors angekommen. Um den Sensor anzusteuern, müssen die Kernelmodule „w1-gpio“ und „w1-therm“ geladen sein. Verkabelung lässt sich bei Tante Google erfragen.

 

DS18B20 Temperatursensor an Breadboard

DS18B20 Temperatursensor an Breadboard

Zum Einlesen reicht einerseits die Shell, in dem man einfach das nötige File öffnet. Eleganter geht es natürlich über ein Skript, welches ich mir in ein paar Minuten zusammen geschustert habe:

#!/usr/bin/perl

use strict;
use warnings;

my $path   = '/sys/bus/w1/devices/';
my $sensor = 'sensor-id';
my $file   = $path . $sensor . "/w1_slave";

print "Open file: " . $file . "\n";
open(IN, $file) or die "Cannot open file $!\n";

while () {
	if($_ =~ /crc=.*YES/) {
		print "Temperature read, continue\n";
	}
	if($_ =~ /crc=.*NO/) {
		print "Temperature read error\n";
		exit(1);
	}	
	if($_ =~ /t=(\d*)/) {
		my $temp = sprintf("%.3f", $1/1000);
		print "Temperature: " . $temp . "° Celsius\n";
	}
}

Nachdem das Skript gespeichert und ausführbar gemacht wurde, kann man es aufrufen und erhält dann eine schön formatierte Grad-Zahl:

[user@pi bin]$ perl temp.pl
Open file: /sys/bus/w1/devices/sensor-id/w1_slave
Temperature read, continue
Temperature: 25.187° Celsius
[user@pi bin]$

Natürlich müsst Ihr die Sensor-ID an Eure Bedürfnisse anpassen!

Update: Mittlerweile habe ich einige Erfahrungen mit 1-Wire und den DS18B20 sammeln dürfen. Aktuellere Informationen finden sich hier und hier.

Beitragsbild: Thermometer. CC-BY 2.0: http://www.flickr.com/photos/renaissancechambara/

Artikel
1 Kommentar

Kernelmodule unter Archlinux auf dem Raspberry Pi automatisch laden

Unter Raspbian lassen sich Kernelmodule über die /etc/modules automatisch starten. Unter Archlinux lässt sich dies über die Datei /etc/modules-load.d/raspberrypi.conf realisieren. Einfach mit dem Editor der Wahl die Module je Zeile einfügen. Hier habe ich die Module w1_gpio und w1_therm eingetragen, sodass ich die 1-Wire Module nicht manuell laden muss. Die raspberrypi.conf sieht jetzt wie folgt aus:

[user@pi]$ cat /etc/modules-load.d/raspberrypi.conf
bcm2708-rng
snd-bcm2835
w1-gpio
w1-therm
[user@pi]$ 

Vielleicht hilft es ja Jemandem 🙂