Python auf Adafruits Raspberry Pi Lektion 11. DS18B20 Temperature Sensing auf Adafruits Lernseite, auf die ich mich immer beziehe Es gab eine Probe der Temperaturerfassung von DS18B20 unter Verwendung von. Die Bibliothek W1ThermSensor wird als einfache Methode eingeführt. Probieren Sie es also aus. Die Lizenz lautet GPLv2.
Überprüfen Sie die Kernel-Version.
$ uname -a
Linux raspberrypi 3.18.11+ #777 PREEMPT Sat Apr 11 17:24:23 BST 2015 armv6l GNU/Linux
Der Kernel ist wie in 1-Draht in Parasite Power-Konfiguration beschrieben (1-Draht mit 2 Drähten) funktioniert in 3.18.3 # 348 nicht. Wenn es "3.18.1 +" oder höher ist, wurde die Einstellung zum Aktivieren von 1-Wire geändert. Fügen Sie die folgende Zeile zu / boot / config.txt
hinzu und starten Sie neu.
/boot/config.txt
dtoverlay=w1-gpio-pullup,gpiopin=4
Versuchen Sie zunächst, die Datei "w1_slave" unter "/ sys / bus / w1 / device /" aus Ihrem Python-Code zu lesen.
~/python_apps/w1-test.py
# -*- coding: utf-8 -*-
import os
import glob
import time
import subprocess
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
def read_temp_raw():
catdata = subprocess.Popen(['cat',device_file], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = catdata.communicate()
out_decode = out.decode('utf-8')
lines = out_decode.split('\n')
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c, temp_f
while True:
s = "celsius: {0:.3f}, fahrenheit: {1:.3f}"
temp = read_temp()
print(s.format(*temp))
time.sleep(5)
Führen Sie das Programm aus. Ich habe Chung und Hana bekommen und sie mit 3 Nachkommastellen formatiert.
$ python w1-test.py
celsius: 27.312, fahrenheit: 81.162
celsius: 27.687, fahrenheit: 81.837
celsius: 27.500, fahrenheit: 81.500
Installieren Sie W1ThermSensor mit git clone
.
$ cd ~/python_apps
$ git clone https://github.com/timofurrer/w1thermsensor.git
$ cd w1thermsensor
$ sudo python setup.py install
Schreiben Sie ein einfaches Programm. Erfassungsdaten können mit einem Gleitkommazahl mit 3 Nachkommastellen erfasst werden.
~/python_apps/w1-test.py
# -*- coding: utf-8 -*-
from w1thermsensor import W1ThermSensor
sensor = W1ThermSensor()
celsius = sensor.get_temperature()
fahrenheit = sensor.get_temperature(W1ThermSensor.DEGREES_F)
all_units = sensor.get_temperatures([W1ThermSensor.DEGREES_C, W1ThermSensor.DEGREES_F, W1ThermSensor.KELVIN])
print("celsius: {0:.3f}".format(celsius))
print("fahrenheit: {0:.3f}".format(fahrenheit))
s = "celsius: {0:.3f}, fahrenheit: {1:.3f}, kelvin: {2:.3f}"
print(s.format(*all_units))
Führen Sie das Programm aus. Der Code wurde vereinfacht, da die Bibliothek das Lesen der Datei "w1_slave" aus dem Verzeichnis "/ sys / bus / w1 / Geräte" wie im ersten Beispiel übernimmt.
$ python w1-test.py
celsius: 26.625
fahrenheit: 79.925
celsius: 26.625, fahrenheit: 79.925, kelvin: 299.775
Recommended Posts