Python sur Adafruit's Raspberry Pi Lesson 11. DS18B20 Temperature Sensing sur le site d'Adafruit Lern auquel je me réfère toujours Il y avait un échantillon de détection de température du DS18B20 en utilisant. La bibliothèque W1ThermSensor est présentée comme une méthode simple, essayons-la. La licence est GPLv2.
Vérifiez la version du noyau.
$ uname -a
Linux raspberrypi 3.18.11+ #777 PREEMPT Sat Apr 11 17:24:23 BST 2015 armv6l GNU/Linux
Le noyau est tel que décrit dans 1-Wire in Parasite Power configuration (1-Wire utilisant 2 fils) ne fonctionne pas dans 3.18.3 # 348. S'il est «3.18.1 +» ou supérieur, le réglage pour activer 1-Wire a été modifié. Ajoutez la ligne suivante à / boot / config.txt
et redémarrez.
/boot/config.txt
dtoverlay=w1-gpio-pullup,gpiopin=4
Tout d'abord, essayez de lire le fichier w1_slave
sous / sys / bus / w1 / devices /
à partir de votre code Python.
~/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)
Exécutez le programme. J'ai eu Chung et Hana et je les ai formatés avec 3 chiffres après la virgule décimale.
$ python w1-test.py
celsius: 27.312, fahrenheit: 81.162
celsius: 27.687, fahrenheit: 81.837
celsius: 27.500, fahrenheit: 81.500
Installez W1ThermSensor par git clone
.
$ cd ~/python_apps
$ git clone https://github.com/timofurrer/w1thermsensor.git
$ cd w1thermsensor
$ sudo python setup.py install
Écrivez un programme simple. Les données de détection peuvent être acquises avec un flotteur avec 3 chiffres après la virgule décimale.
~/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))
Exécutez le programme. Le code a été simplifié car la bibliothèque se charge de lire le fichier w1_slave
depuis le répertoire / sys / bus / w1 / devices
comme dans le premier exemple.
$ python w1-test.py
celsius: 26.625
fahrenheit: 79.925
celsius: 26.625, fahrenheit: 79.925, kelvin: 299.775