LK-Temp2: Unterschied zwischen den Versionen
Aus Linkerkit.de
(Die Seite wurde neu angelegt: „==Bild== none ==Technische Daten / Kurzbeschreibung== Chipsatz: DS18B20 | Kommunikationsprotokoll: 1-Wire<br /><br />9- 12Bit…“) |
(→Codebeispiel Raspberry) |
||
Zeile 42: | Zeile 42: | ||
==Codebeispiel Raspberry== | ==Codebeispiel Raspberry== | ||
+ | |||
+ | <pre class="brush:py"> | ||
+ | # coding=utf-8 | ||
+ | # Benoetigte Module werden importiert und eingerichtet | ||
+ | import glob | ||
+ | import time | ||
+ | from time import sleep | ||
+ | import RPi.GPIO as GPIO | ||
+ | # An dieser Stelle kann die Pause zwischen den einzelnen Messungen eingestellt werden | ||
+ | sleeptime = 1 | ||
+ | # Der One-Wire EingangsPin wird deklariert und der integrierte PullUp-Widerstand aktiviert | ||
+ | GPIO.setmode(GPIO.BCM) | ||
+ | GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) | ||
+ | # Nach Aktivierung des Pull-UP Widerstandes wird gewartet, | ||
+ | # bis die Kommunikation mit dem DS18B20 Sensor aufgebaut ist | ||
+ | print 'Warte auf Initialisierung...' | ||
+ | base_dir = '/sys/bus/w1/devices/' | ||
+ | while True: | ||
+ | try: | ||
+ | device_folder = glob.glob(base_dir + '28*')[0] | ||
+ | break | ||
+ | except IndexError: | ||
+ | sleep(0.5) | ||
+ | continue | ||
+ | device_file = device_folder + '/w1_slave' | ||
+ | # Funktion wird definiert, mit dem der aktuelle Messwert am Sensor ausgelesen werden kann | ||
+ | def TemperaturMessung(): | ||
+ | f = open(device_file, 'r') | ||
+ | lines = f.readlines() | ||
+ | f.close() | ||
+ | return lines | ||
+ | # Zur Initialisierung, wird der Sensor einmal "blind" ausgelesen | ||
+ | TemperaturMessung() | ||
+ | # Die Temperaturauswertung: Beim Raspberry Pi werden erkennte one-Wire Slaves im Ordner | ||
+ | # /sys/bus/w1/devices/ einem eigenen Unterordner zugeordnet. In diesem Ordner befindet sich die Datei w1-slave | ||
+ | # in dem Die Daten, die über dem One-Wire Bus gesendet wurden gespeichert. | ||
+ | # In dieser Funktion werden diese Daten analysiert und die Temperatur herausgelesen und ausgegeben | ||
+ | def TemperaturAuswertung(): | ||
+ | lines = TemperaturMessung() | ||
+ | while lines[0].strip()[-3:] != 'YES': | ||
+ | time.sleep(0.2) | ||
+ | lines = TemperaturMessung() | ||
+ | equals_pos = lines[1].find('t=') | ||
+ | if equals_pos != -1: | ||
+ | temp_string = lines[1][equals_pos+2:] | ||
+ | temp_c = float(temp_string) / 1000.0 | ||
+ | return temp_c | ||
+ | # Hauptprogrammschleife | ||
+ | # Die gemessene Temperatur wird in die Konsole ausgegeben - zwischen den einzelnen Messungen | ||
+ | # ist eine Pause, deren Länge mit der Variable "sleeptime" eingestellt werden kann | ||
+ | try: | ||
+ | while True: | ||
+ | print '---------------------------------------' | ||
+ | print "Temperatur:", TemperaturAuswertung(), "°C" | ||
+ | time.sleep(sleeptime) | ||
+ | except KeyboardInterrupt: | ||
+ | PIO.cleanup() | ||
+ | </pre> |
Version vom 22. Februar 2017, 14:45 Uhr
Inhaltsverzeichnis
Bild
Technische Daten / Kurzbeschreibung
Chipsatz: DS18B20 | Kommunikationsprotokoll: 1-Wire
9- 12Bit genaue Temperaturmessung im Meßbereich von –55°C bis +125°C
Codebeispiel Arduino
# Include OneWire ds (10); / / on pin 10 void setup (void) { // Initialize inputs / outputs // Start serial port Serial.begin (9600); } void loop (void) { byte i; byte present = 0; byte data [12]; byte addr [8]; int Temp; if (! ds.search (addr)) { // Serial.print ("No more addresses."); ds.reset_search (); return; } Serial.print ("R ="); // R = 28 Not sure what this is for (i = 0; i <8; i ) { Serial.print (addr [i], HEX); Serial.print (""); } if (OneWire :: crc8 (addr, 7)! = addr [7]) { Serial.print ("CRC is not valid!"); return; } if (addr [0]! = 0x28) { Serial.print ("Device is not a DS18S20 family device."); return; } ds.reset (); }
Codebeispiel Raspberry
# coding=utf-8 # Benoetigte Module werden importiert und eingerichtet import glob import time from time import sleep import RPi.GPIO as GPIO # An dieser Stelle kann die Pause zwischen den einzelnen Messungen eingestellt werden sleeptime = 1 # Der One-Wire EingangsPin wird deklariert und der integrierte PullUp-Widerstand aktiviert GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Nach Aktivierung des Pull-UP Widerstandes wird gewartet, # bis die Kommunikation mit dem DS18B20 Sensor aufgebaut ist print 'Warte auf Initialisierung...' base_dir = '/sys/bus/w1/devices/' while True: try: device_folder = glob.glob(base_dir + '28*')[0] break except IndexError: sleep(0.5) continue device_file = device_folder + '/w1_slave' # Funktion wird definiert, mit dem der aktuelle Messwert am Sensor ausgelesen werden kann def TemperaturMessung(): f = open(device_file, 'r') lines = f.readlines() f.close() return lines # Zur Initialisierung, wird der Sensor einmal "blind" ausgelesen TemperaturMessung() # Die Temperaturauswertung: Beim Raspberry Pi werden erkennte one-Wire Slaves im Ordner # /sys/bus/w1/devices/ einem eigenen Unterordner zugeordnet. In diesem Ordner befindet sich die Datei w1-slave # in dem Die Daten, die über dem One-Wire Bus gesendet wurden gespeichert. # In dieser Funktion werden diese Daten analysiert und die Temperatur herausgelesen und ausgegeben def TemperaturAuswertung(): lines = TemperaturMessung() while lines[0].strip()[-3:] != 'YES': time.sleep(0.2) lines = TemperaturMessung() equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] temp_c = float(temp_string) / 1000.0 return temp_c # Hauptprogrammschleife # Die gemessene Temperatur wird in die Konsole ausgegeben - zwischen den einzelnen Messungen # ist eine Pause, deren Länge mit der Variable "sleeptime" eingestellt werden kann try: while True: print '---------------------------------------' print "Temperatur:", TemperaturAuswertung(), "°C" time.sleep(sleeptime) except KeyboardInterrupt: PIO.cleanup()