Raspberry - Sonde de température DS18B20
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
- sudo modprobe w1-gpio
- sudo modprobe w1-therm
- cd /sys/bus/w1/devices/
- 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)
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
- w1-therm
- w1-gpio pullup=1
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
Code Python pour afficher la température dans le terminal [ctrl]+[alt]+[t]
fichTemp = open(emplacement)
# Lecture du fichier
# Fermeture du fichier apres qu'il ai ete lu
fichTemp.close()
return contenu
def recupTemp (contenuFich) :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
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 datetime # import de la bibliothéque datetime
def lireFichier (emplacement) :
contenu = fichTemp.read()
fichTemp.close()
return contenu
def recupTemp (contenuFich) :
temperatureData = secondeLigne.split(" ")[9]
temperature = float(temperatureData[2:])
temperature = temperature / 1000
return temperature
def sauvegarde (temperature, date, emplacement) :
fichierSauvegarde.write(str(date)+" ")
fichierSauvegarde.write(str(temperature)+'\r\n')
fichierSauvegarde.close()
while True :
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
Afficher la température de plusieurs sondes
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)
- sudo modprobe w1-gpio
- sudo modprobe w1-therm
Le code
contenu = fichTemp.read()
fichTemp.close()
return contenu
def recupTemp (contenuFich) :
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