Warning: include(../../Obj_Stat/Head.php): failed to open stream: No such file or directory in /htdocs/Obj_Stat/index.php on line 11

Warning: include(../../Obj_Stat/Head.php): failed to open stream: No such file or directory in /htdocs/Obj_Stat/index.php on line 11

Warning: include(): Failed opening '../../Obj_Stat/Head.php' for inclusion (include_path='.:/usr/share/php') in /htdocs/Obj_Stat/index.php on line 11

Tutoriel Raspberry #2
Connaître la température à l'aide d'une ou plusieures sonde DS18B20


Mis à jour le : 25/06/2017


La sonde de température DS18B20 est une des plus utilisées pour mesurer la température sur un Raspberry. Ce tutoriel a pour but de vous montrer comment en utiliser une dans un premier temps, puis plusieurs avec un Raspberry PI.

I. Prérequis

Pour mesurer la température à l'aide d'un Raspberry, il faut :
    - Un Raspberry Pi,
    - Une sonde de référence DS18B20,
    - Des résistances de 4.7KΩ ,
    - Des cables.
Une fois tous les éléments réunis, on peut passer au branchement.

II. Branchements de la sonde

On branche ensuite la sonde au Raspberry en suivant le schéma ci-dessous.


Shéma de branchement d'une DS18B20 sur Raspberry Pi 3
Shéma de branchement d'une DS18B20 sur Raspberry Pi B rev 2

III. Lecture via la commande du Raspberry

Une fois que la sonde est branchée correctement, on peut la lire en utilisant l'invite de commande du Raspberry comme ceci : (en remplaçant les 'x' par le numéro donné par le Raspberry)

            sudo modprobe w1-gpio
            sudo modprobe w1-therm
            cd /sys/bus/w1/devices/
            ls
            cd 28-xxxxxxxxxx
            cat w1_slave
        

Exemple :

Invite de commande DS18B20 Raspberry PI

Attention

Il peut arriver que le Raspberry ne détecte pas la sonde de température. (Ça a été le cas pour mes deux Raspberry). Pour qu'il la détecte, il faut modifier deux fichiers système :

Ajouter les lignes suivantes au ficher qui se trouve dans /etc/modules :

  w1-therm
  w1-gpio pullup=1


Ajouter la ligne suivante au fichier qui se trouve dans /boot/config.txt :

  dtoverlay=w1-gpio

Information

Pour modifier un fichier, on tape dans la console :

  sudo nano /.../...

Pour modifier le fichier qui se trouve dans /etc/modules, on tape donc :

  sudo nano /etc/modules

IV. Afficher la température clairement avec un script Python

Pour afficher la température plus clairement, on peut créer un programme qui affiche la température au millième.

tfile = open("/sys/bus/w1/devices/28-xxxxxxxx/w1_slave")
# Lire tout le texte du dossier.
text = tfile.read()
# Fermer le fichier apres qu'il ai ete lu.
tfile.close()
# Supprimer la seconde ligne.
secondline = text.split("\n")[1]
temperaturedata = secondline.split(" ")[9]
# Supprimer le "t="
temperature = float(temperaturedata[2:])
# Mettre un chiffre apres la virgule
temperature = temperature / 1000
print "Temperature : " ,
print temperature
        

On obtient, en lançant le programme python ceci :

Capture d'écran programme lecture DS18B20 Raspberry

V. Enregistrer les températures dans un fichier texte

Maintenant que l'on peut lire la température clairement à l'aide du script python, on peut enregistrer la température dans un fichier externe.
On ajoute donc une ligne dans un fichier à chaque prise de température avec la date, suivi de la température.
Pour changer l'intervalle de lecture, modifier le time.sleep() qui est en seconde. Dans l'exemple, on relève la température toutes les minutes.

import time
import datetime

while True :
    date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    tfile = open("/sys/bus/w1/devices/28-xxxxxxxxxxx/w1_slave")
    text = tfile.read()
    tfile.close()
    secondline = text.split("\n")[1]
    temperaturedata = secondline.split(" ")[9]
    temperature = float(temperaturedata[2:])
    temperature = temperature / 1000
    fichier = open("Temperatures.txt", "a")
    fichier.write(str(date)+"   ")
    fichier.write(str(temperature)+'\r\n')
    fichier.close()
    time.sleep(60)
        

VI. Afficher la température de plusieurs sondes

(Idée d'un internaute)

Il peut être intéressant de lire la température de plusieurs sondes en simultané. Pour se faire, rien de bien compliqué. Il faut brancher les sondes à la suite comme le montre le schéma suivant.


Schéma de branchement de deux DS18B20 sur Raspberry Pi 3
Schéma de branchement de deux DS18B20 sur Raspberry Pi B rev 2


On relance ensuite la détéction des sondes avec les commandes comme quand il n'y en a qu'une mais on dervait voir apparaître quelque chose comme ca :

Capture Plusieurs DS18B20 Raspberry

On applique ensuite le programme Python précédemment créé aux deux sondes. Il permet d'afficher la température correctement et proprement.

Capt1 = open("/sys/bus/w1/devices/28-xxxxxxxxxxx1/w1_slave")
Capt2 = open("/sys/bus/w1/devices/28-xxxxxxxxxxx2/w1_slave")
# Lire tout le texte du dossier.
Temp1 = Capt1.read()
Temp2 = Capt2.read()
# Fermer le fichier apres qu'il ai ete lu.
Capt1.close()
Capt2.close()
# Supprimer la seconde ligne.
secondline1 = Temp1.split("\n")[1]
secondline2 = Temp2.split("\n")[1]
TempData1 = secondline1.split(" ")[9]
TempData2 = secondline2.split(" ")[9]
# Supprimer le "t="
temperature1 = float(TempData1[2:])
temperature2 = float(TempData2[2:])
# Mettre un chiffre apres la virgule
temperature1 = temperature1 / 1000
temperature2 = temperature2 / 1000
print "Temperature Capteur #1 : " ,
print temperature1
print "Temperature Capteur #2 : " ,
print temperature2
            


On obtient sensiblement la même chose si tout va bien :

Res Python Plusieurs DS18B20 Raspberry

VII. Afficher la moyenne de deux sondes de température

Maintenant que l'on sait lire plusieurs sondes de température simultanément, on peut faire une moyenne des deux valeurs obtenues. Il suffit d'ajouter les deux lignes suivantes au programme Python précedemment rédigé.

moyenne = (temperature1 + temperature2)/2
print "La moyenne des deux sondes est egale a : "
print moyenne
        


Voilà, le tutoriel est fini, on sait donc maintenant lire une ou plusieures sondes de température DS18B20 sur Raspberry Pi.


Warning: include(../../Obj_Stat/Pied.php): failed to open stream: No such file or directory in /htdocs/Obj_Stat/index.php on line 239

Warning: include(../../Obj_Stat/Pied.php): failed to open stream: No such file or directory in /htdocs/Obj_Stat/index.php on line 239

Warning: include(): Failed opening '../../Obj_Stat/Pied.php' for inclusion (include_path='.:/usr/share/php') in /htdocs/Obj_Stat/index.php on line 239