Artikel
1 Kommentar

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

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

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/

1 Kommentar

  1. Pingback: Raspberry Pi + node.js | Pearltrees

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.