Raspberry - Sonde de température DS18B20

ds18B20-cablage



Comment installer une sonde DS18B20 sur Raspberry. voir la page 

Raspberry - Sonde DS18B20 - Température


 La sonde DS18B20 utilise le bus 1-Wire 


Câblage de la sonde DS18B20

  • Rouge = +Vcc
  • Noir = Gnd
  • Jaune = GPIO4 - Pin7


Résistance de 4700 Ohms entre +Vcc et GPIO4 - Pin7


Identification de la Sonde DS18B20

ds18b20-initialisation

Dans un terminal [ctrl]+[alt]+[t], saisir les commandes ci-dessous:

  • sudo modprobe w1-gpio
  • sudo modprobe w1-therm
Se déplacer dans le dossier /sys/bus/w1/devices/

  • cd /sys/bus/w1/devices/
Afficher le contenu du dossier, vous devez trouver un dossier correspondant à votre sonde 28-xxxxxxxx

Déplacez-vous dans le dossier 28-xxxxxxx
Afficher le contenu du fichier w1_slave

  • ls
  • cd 28-xxxxxxxxxx
  • cat w1_slave  # Affiche le contenu du fichier w1_slave

La température est indiquée sous la forme t=19375 (dans mon exemple)
Ce qui correspond à une température de 19,375 °C



Non détection de la sonde

Il peut arriver que le Raspberry ne détecte pas la sonde de température.

Pour qu'il la détecte, il faut modifier deux fichiers :


Editer le fichier /etc/modules

  • sudo nano /etc/modules
Ajouter les lignes suivante à la fin du fichier /etc/modules
  • w1-therm
  • w1-gpio pullup=1
Sauvegarder [Crtl]+[o] puis [Enter] et quitter l'éditeur nano [Crtl]+[x]



Editer le fichier /boot/config.txt

  • sudo nano /boot/config.txt

Ajouter la ligne suivante à la fin du fichier /boot/config.txt

  • dtoverlay=w1-gpio

Sauvegarder [Crtl]+[o] puis [Enter] et quitter l'éditeur nano [Crtl]+[x]


Puis redémarrer le Raspberry Pi



Afficher la température avec un script Python

temperature_°C


Code Python pour afficher la température dans le terminal [ctrl]+[alt]+[t]


def lireFichier (emplacement) : 
# Ouverture du fichier contenant la temperature 
fichTemp = open(emplacement) 
# Lecture du fichier
contenu = fichTemp.read()
# Fermeture du fichier apres qu'il ai ete lu
fichTemp.close() 

return contenu

def recupTemp (contenuFich) :
# Supprimer la premiere ligne qui est inutile
secondeLigne = contenuFich.split("\n")[1]
temperatureData = secondeLigne.split(" ")[9]
# Supprimer le "t="
temperature = float(temperatureData[2:])
# Mettre un chiffre apres la virgule
temperature = temperature / 1000  # Pour afficher 19687 en 19.687
return temperature

contenuFich = lireFichier("/sys/bus/w1/devices/28-xxxxxxxx/w1_slave")  # Remplacer 28-xxxxxxx par celui de votre sonde 
temperature = recupTemp (contenuFich)


print ("Temperature :"), temperature,(" °C")   # Affichage de la température





Enregistrer les températures dans un fichier texte

temperature_fichier


Nous savons lire une température avec un script python.

Nous pouvons enregistrer la température dans un fichier txt.
On ajoute dans le fichier la date et la température à intervalle régulier.


Le code:


import time  # import de la bibliothéque time
import datetime   # import de la bibliothéque datetime

def lireFichier (emplacement) :
fichTemp = open(emplacement)
contenu = fichTemp.read()
fichTemp.close()
return contenu

def recupTemp (contenuFich) :
secondeLigne = contenuFich.split("\n")[1]
temperatureData = secondeLigne.split(" ")[9]
temperature = float(temperatureData[2:])
temperature = temperature / 1000
return temperature

def sauvegarde (temperature, date, emplacement) :
fichierSauvegarde = open(emplacement, "a")
fichierSauvegarde.write(str(date)+" ")
fichierSauvegarde.write(str(temperature)+'\r\n')
fichierSauvegarde.close()

while True :
date = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
contenuFich = lireFichier("/sys/bus/w1/devices/28-xxxxxxxx/w1_slave")   # Remplacer 28-xxxxxxx par celui de votre sonde 
temperature = recupTemp(contenuFich)
sauvegarde(temperature, date, "Temperature.txt")  # Création du fichier Temperature.txt
time.sleep(60)  # Temporisation en seconde


  Le fichier Temperature.txt est créé dans le dossier qui contient le fichier python  



Afficher la température de plusieurs sondes

  • 2_sondes
  • temperature_2_sondes
  • temperature-2sondes


Connecter les sondes en parallèle sur le GPIO4 - Pin7

  • Tous les fils d'alimentation (Rouge)  au +5v
  • Tous les fils de masse  (Noir)  à la masse
  • Tous les fils de detection de température  ( Jaune)  au GPIO4 - Pin7

Mettre une résistance de 4,7 KOhms

soit

  • Une résistance pour l'ensemble des sondes (Entre le +5v et le GPIO4 - pin7)

soit

  • Une résistance pour chaques sondes (Entre les fils Rouge et Jaune de chaques sondes)

Relancer la détection des sondes

  • sudo modprobe w1-gpio
  • sudo modprobe w1-therm

Le code


def lireFichier (emplacement) : 
fichTemp = open(emplacement)
contenu = fichTemp.read()
fichTemp.close()
return contenu

def recupTemp (contenuFich) :
secondeLigne = contenuFich.split("\n")[1]
temperatureData = secondeLigne.split(" ")[9]
temperature = float(temperatureData[2:])
temperature = temperature / 1000 
return temperature

contenuFich1 = lireFichier("/sys/bus/w1/devices/28-xxxxxxxxxxx1/w1_slave")  # Remplacer 28-xxxxxxx par celui de votre 1ère sonde 
contenuFich2 = lireFichier("/sys/bus/w1/devices/28-xxxxxxxxxxx2/w1_slave")  # Remplacer 28-xxxxxxx par celui de votre 2ème sonde 
temperature1 = recupTemp (contenuFich1)
temperature2 = recupTemp (contenuFich2)


print "Temperature Capteur #1 : " , 
print temperature1
print "Temperature Capteur #2 : " ,
print temperature2




Afficher la moyenne de deux sondes de température

Puisque nous savons lire la température relevée de plusieurs sondes.

Nous pouvons afficher la moyenne des températures.


Le code


moyenne = (temperature1 + temperature2)/2  # Effectuer la moyenne des températures
print "Température moyenne : "
print moyenne




Afficher la température sur une page Web

Pour afficher la (les) température(s) relevée(s) par la (les) sonde(s), voir la page


Raspberry - Sonde DS18B20 - Température