DS18B20 : Capteur temperature numérique
Posted on 11 octobre 2016
in Composants, Raspberry
.
Plus adapté à Raspberry car numérique, ce capteur permet la mesure de temperature.
Le montage s’effectue de la façon suivante.

Ce capteur utilise le bus WIRE, c’est une liaison série asynchrone half‐duplex avec possibilité de transfert de l’alimentation sur la ligne de donnée développée par Dallas‐Semiconductors. La ligne DATA du capteur est connectée sur GPIO4 avec pull‐up VDD 3.3v (4.7KΩ).
Aprés avoir activé le protocole Wire, le noyau Linux du Raspberry recherche régulièrement de nouveaux esclave sur ce bus.
Test du capteur (sous linux)
sudo modprobe w1-gpio
sudo modprobe w1-therm
Si vous voulez charger ces modules directement au boot, éditez le fichier et ajoutez ces 2 lignes à la fin de:
/etc/modules
Dans le repertoire “/sys/bus/w1/devices/“ vous trouverez les fichiers de ces devices ajoutés.
Dans un sous repertoire nommé 28-XXXXXX vous trouverez les fichiers des capteurs.
L’action ls, cat sur le système généreront une action le lecture du capteur.
Ce programme Python lit les données
##############################################
# Hub.bosseur@gmail.com -
#
# Programme qui li les donnees du capteur de temperature DS18B20
# http://aubonsurf.free.fr
##############################################
#!/usr/bin/python
import glob #Unix style pathname pattern expansion
import time
import os
#Fonction qui recherche les fichiers resultats
#l'ouverture du fichier provoque la lecture vers le capteur
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
#Fonction de traitement du fichier device.
def read_temp():
lines = read_temp_raw() #les ture des fichiers devices
while lines[0].strip()[-3:] != 'YES': # lit les 3 derniers caracteres de la ligne 0 et recommence si pas YES
time.sleep(0.2) #temps de reception des donnees
lines = read_temp_raw()
equals_pos = lines[1].find('t=') #identification position du =
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:] #lecture de la position a la fin de ligne
temp_c = round(float(temp_string) / 1000.0 , 2) # Arrondi a 2 chiffres apres la virgule
return temp_c
if __name__ == "__main__":
os.system('modprobe w1-gpio') ## active le protocole 1WIRE
os.system('modprobe w1-therm') #identifie le peripherique
base_dir = '/sys/bus/w1/devices/'
try:
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
except:
print ("Fichier device introuvable")
exit(0)
#boucle de lecture de temperature
while True:
print('Temperature:'+read_temp())
time.sleep(1)
ReadDS10B20.py