Tutoriel Raspberry Pi
Lire la température à l'aide d'une sonde DS18B20


Mis à jour le 18 février 2021 • 40 • 4.8

Le Raspberry Pi ouvre la porte à de nombreux projets de domotique. Une des applications les plus basiques en termes de domotique et la connaissance de la température. Dans ce tutoriel, nous allons voir comment lire la température ambiante grâce à la sonde DS18B20, sur Raspberry Pi.
La sonde DS18B20 est la plus utilisée sur Raspberry Pi, notamment pour sa simplicité d'utilisation. Nous verrons aussi que l'on peut lire plusieurs sondes en même temps, afin de faire des moyennes, etc.
Si le sujet vous intéresse, vous pourrez par la suite suivre ce tutoriel, qui montre comment réaliser des courbes de température en Python.

Lire la température avec une sonde DS18B20 sur Raspberry Pi

Prérequis

Pour réaliser ce tutoriel, il vous faudra :

Une fois tous ces éléments réunis, on peut passer directement au branchement !

Branchements de la sonde

La sonde DS18B20 se branche en suivant le schéma suivant. Pour réaliser des tests, utiliser une platine d'essai est particulièrement pratique. Par la suite, une fois que tout fonctionne, il est préférable de souder la résistance avec un fer à souder pour avoir quelque chose de plus propre.

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

Lecture de la température via la console

Une fois que la sonde est branchée correctement, on peut lire la température en utilisant la console du Raspberry Pi. Concrètement, la sonde DS18B20 transmet ses données par bus 1-Wire. Ce bus permet d'ailleurs de connecter facilement plusieurs sondes en parallèle (nous verrons cela plus loin dans le tutoriel). Lorsqu'une sonde est branchée, un dossier s'ajoute dans la route /sys/bus/w1/devices. Ce dossier contient un fichier contenant les informations délivrées par la sonde, dont la température.
Le but est donc de lire ce fichier. Voici les commandes Unix qui le permettent :

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


ℹ️ Il faut veuiller à remplacer les x par la valeur donnée par le ls
🔴Si c'est la première fois que vous entrez ces commandes, la sonde peut ne pas être détectée, rendez-vous dans l'encadré "sonde non détectée" ci dessous pour résoudre le problème

En exécutant ces commandes, on obtient un résultat semblable à l'image ci-dessous. Ici, on lit en fait une température de 6.875 °C (eh oui, c'est précis).

Invite de commande DS18B20 Raspberry PI
Attention

Sonde non detectée ?

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 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

Redémarrer le Raspberry Pi.

Information

Rappel

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


Afficher la température clairement avec un script Python

C'est bien beau toutes ces commandes, mais on a vu mieux niveau praticité ! C'est pour cette raison que l'on va utiliser un script Python qui met en forme tout ça, afin d'avoir la température en une simple commande.

Capture d'écran programme lecture DS18B20 Raspberry

Ce programme s'occupera de lire le fichier w1_slave, d'en tirer la température, pour finalement l'afficher sur la sortie standard.

Enregistrer les températures dans un fichier texte

Nous savons maintenant obtenir la température de la sonde à l'aide du script Python. On peut maintenant se servir de cela dans bon nombre d'applications. Par exemple, enregistrer cette température dans un fichier externe.
Pour ce faire, on peut ajouter 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. Ici, on relève la température toutes les minutes.

Afficher la température de plusieurs sondes

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 en parallèle comme sur le schéma suivant.

Schéma de branchement de deux DS18B20 sur Raspberry Pi 3

Avec cette nouvelle sonde, si on re-liste les fichiers contenus dans /sys/bus/w1/devices, on trouve donc deux fichiers, un pour chaque sonde.

Capture Plusieurs DS18B20 Raspberry

Il suffit ensuite de modifier (un tout petit peu) les programmes donnés précedemment.

Ce programme prend en compte l'ajout d'autres sondes, sans même avoir à y toucher. Avec deux sondes, on obtient quelque chose comme ceci :

Res Python Plusieurs DS18B20 Raspberry

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écédemment rédigé.


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

A lire

Branchement caméra - présentation

Choisir et utiliser une caméra sur un Raspberry Pi


Branchement caméra - présentation

Contrôler un Servo moteur en Python






Ce tutoriel vous a plu ?

starstarstarstarstar

4.8/5 | 24 votes




Commentaires

39 commentaires publiés.

Philippe, le 22/04/2021 à 17h19
Merci pour le partage du code. J'ai juste eu à aller dans Raspi-config pour activer le One-Wire. Pour le reste, comme une lettre à la poste! C'est donc un grand merci que je vous adresse.
Finalité du projet bien avancé, je decode et stocke dans une base de données Sqlite, les infos du compteur linky via son interface TIC, et je voulais y ajouter la température extérieure qui est en rapport étroit avec les consommations électriques. C'est donc en bonne voie.

Bonne continuation,
--
Philippe
Raspberry Lab, le 25/04/2021 à 20h35
Bonsoir @Philippe,
Merci pour votre commentaire 👌
Mettre en lien la consommation électrique et la température paraît en effet être un projet intéressant ! (je vais me renseigner sur comment fonctionne la liaison Linky - Raspberry)

Bonne continuation,
Raspberry Lab.
Philippe, le 25/04/2021 à 21h03
Bonsoir @Raspberry Lab,

si je peux vous aider, ce sera volontiers. Mon interface simple fonctionne à merveille, et j'ai trouvé du code içi et là que j'ai mixé. C'est donc un programme Python qui est lancé toutes les minutes par une Crontab, et c'est fiable. J'en suis maintenant à exploiter la base données via une interface graphique. A chaque jour suffit sa peine, ;).
cxd125, le 06/04/2021 à 17h35
Bonjour, je suis face au même problème. J'ai aussi des 00-400000000000. Et je ne vois pas de quoi ça peut venir. Je suis preneur si vous avez trouver la solution au problème :)
Alf13, le 17/03/2021 à 18h16
Bonjour,
Merci pour ce tuto très instructif pour un novice dans le monde Raps comme moi.
Pourriez-vous m'expliquer à quoi sert la résistance de 4.7kOhm ? Merci
Bonne soirée
papoujipi, le 03/03/2021 à 16h58
Bonjour,
Je suis un novice. Je viens d'acquérir un rasberry Pi4B et j'ai acheté des sondes DS18B20. J'ai fait le montage avec une seule sonde et suivi à la lettre les explications du tuto qui m'apparaissent très claires. Lorsque j'arrive à la commande qui doit me donner le nom exact de ma sonde, il apparait :
pi@raspberrypi:/sys/bus/w1/devices $ ls
00-800000000000 w1_bus_master1
J'ai racheté des sondes, pensant que mes premières étaient mortes, mis j'ai le même problème. Je suis un peu désemparé. J'ai vérifié que la pin4 du Pi était bien activée.
Merci de me dire où il peut y avoir un problème.
Moustapha, le 16/02/2021 à 11h47
Bonjour, merci pour votre tuto, il m'a permis de facilement réaliser mon projet.
Malheureusement, j'ai un problème avec les températures négatifs et je ne sais exactement pourquoi. Pourriez-vous m'aider à mieux comprendre.
Je vous remercie d'avance pour votre retour.
Moustapha
Raspberry Lab, le 18/02/2021 à 16h20
Bonjour @Moustapha,
Je viens de re-tester, je n'ai pas de problèmes avec les températures négatives.
Pouvez-vous me préciser l'erreur ?

Raspberry Lab.
foxbille, le 02/02/2021 à 17h53
Bonjour, sur le schéma "Afficher la température de plusieurs sondes", les DS18B20 ont l'air d'avoir quatre fils ! Comment fait-on si on a que trois fils (par sonde). Le branchement sur le breadboard est effectué autour du rang 35, mais j'imagine qu'on peut le faire autour du rang 20 (ma carte n'a que 30 rang). Désolé pour la question de noob.
Merci pour ce tuto
Eric
Raspberry Lab, le 02/02/2021 à 18h28
Bonjour @foxbille,
En effet, sur le schéma avec deux sondes, les DS18B20 ont 4 fils, mais seulement 3 sont utilisés, et d'ailleurs, je n'ai aussi que 3 fils sur mes sondes. Il suffit donc d'ignorer le fil orange sur le schéma.
Enfin, concernant le numéro de rang, il n'a en effet aucune importance 🙂. Dans ce tuto, j'explique brièvement le fonctionnement des plaques, n'hésitez pas à jeter un œil 😉

Bonne continuation sur votre Raspberry Pi,
Raspberry Lab.
foxbille, le 03/02/2021 à 15h21
Merci beaucoup :-)
foxbille, le 04/02/2021 à 15h01
Bonjour, J'ai fini et ça fonctionne très bien malgré mes pietres compétences, mais certainement grâce à ce tuto. Il ne me reste plus qu'à installer tout ça dans les combles de ma maison. Une sonde dehors, une dedans. Les cables mesurent trois metres chacun, je ne vais pas me casser la tete a ajuster la valeur de la resistance (de toutes façons, je ne sais pas faire) puisque pour l'instant, seule m'interesse la différence entre les deux, pour faire un petit bilan avant / après isolation des combles.
Je ferai juste un petit commentaire sur le matos : j'ai acheté à l'arrache sur un grand site de e-commerce sans chercher la qualité. Constat : les fils bagottent dans le breadboard. Ceux de la sonde qui sont les plus fins, mais aussi les pics des cables de liaison et les pattes de la résistance. J'hésite entre un coup de colle chaude pour fixer le tout ou un montage "soudure".
En tous cas, merci beaucoup pour le tuto et les précisions.
Bonne journée
Eric
Raspberry Lab, le 04/02/2021 à 17h39
Bonjour, merci du retour, c'est toujours intéressant de voir que ces tutos permettent de réaliser divers projets 🙂. Juste un mot concernant l'installation, il vaut toujours mieux passer par des soudures dès lors qu'on a l'intention de laisser l'installation en place un certain temps (ça évitera des problèmes de contacts, etc).

Enfin, si ça vous intéresse d'aller un peu plus loin, ce tuto montre comment enregistrer et faire des courbes à partir des données récoltées.

Raspberry Lab.
PR, le 27/09/2020 à 16h15
Bonjour, si ce n'est pas trop tard : en suivant votre tutant passionnant, je retrouve bien, dans mon rapsberry et les repertoires correspondants, les repertoires correspodants à ma sonde, créés regulièrement. sauf que le fichier w1_slave n'existe pas. auriez vous une explication à ce problème (pb d'écriture ?,). j'ai modifié certains fichiers comme décrit dans le tuto dans le doute que la sonde ne soit pas detecté par le raspberry pi 4 (pour info).
si vous avez un début d'explication, je prends...
merci à vous pour votre tuto. moi qui suis débutant, celà me fait comprendre le fonctionnement de tout ca avec beaucoup de facilité.
Philippe
Roland, le 14/12/2019 à 18h48
Bonjour
J'espère qu'il n'est pas trop tard pour cette question :
Est il possible en appliquant ce tuto d avoir un affichage en temps réel de la valeur de chaque sonde de température ?
Raspberry Lab, le 22/12/2019 à 10h03
Bonjour @Roland,
Oui c'est possible et la démarche est expliquée juste ici !

Bonne lecture ;)
BernArd, le 25/01/2020 à 20h10
Bonsoir,
Je souhaite que cela soit toujours d'actualité... ;-)
Je recherche "pratiquement la même chose" mais, pour un ordi et des sondes radio ?
Cela existe-t-il ?
Quels équipements cela nécessite-t-il ?
Merci de vos réponses :-)
Cordialités Ensoleillées !
BernArd
Cédric, le 27/07/2019 à 14h37
bonjour le tuto est clair est j'ai réussi sans problème "en trouvant la bonne resistance du premier coup j'aurais était plus vite..."
Je voulais savoir si l'un de vous avez déjà pensé ou fait un programme pour compiler les températures de sorte à faire un graphique qui suit l'évolution des températures... ?
Raspberry Lab, le 27/07/2019 à 15h42
Bonjour Cédric,
Content que tout ai fonctionné pour vous !
Concernant votre question, un tutoriel sur comment enregistrer et faire des courbes de températures est disponible sur le site à cette adresse :)

Bonne continuation !
cédric, le 28/07/2019 à 12h32
Bonjour à tous comme j'ai dis dans un autre commentaire j'ai réussi à tout faire fonctionner "content pour mon premier projet" le seul soucis que j'ai est que quand je demande la temperature de la sonde via l'invite de commande j'ai cette réponse :
python: can't open file 'temperature.py' : [Errno 2] No such file of directory

Par contre je réussi à l'avoir depuis python est ce cela peut être dû au nom du fichier que j'ai donné à la programmation ?


gipet, le 14/07/2019 à 22h11
Excellent tuto
je l'ai appliqué différemment et partiellement, (passerelle 1wire-USB, récupération des valeurs en script, jusqu'à l'affichage des données 1wire sur une page web), le tout sur Rpi3
j'essaierai l'affichage des courbes plus tard....
Loic moumou, le 28/06/2019 à 11h32
Bonjour,
Je souhaite installer cette sonde dans ma piscine avec un raspberry situé dans le local technique qui est à une distance de 20-25 mètres. Pour relié la sonde je ne sais pas trop quel câble utiliser ?
J'ai un câble éléctrique de courant "classique" en rabe. Cela fonctionnerait bien ou dois-je utiliser un cable RJ45 ?

Merci pour votre aide
Raspberry Lab, le 02/07/2019 à 10h29
Bonjour @Loic,
J'ai cherché un peu sur Google, pas mal de personnes se posent la même question que vous, et la solution serait de câbler la sonde ainsi :
Utiliser un câble RJ45 pour faire passer les 3 fils de la sonde, alimenter la sonde en +5V (au lieu de 3.3V) et laisser le pont des données au +3.3V.
Je vous ai fait un schéma pour mieux illustrer le tout :

La valeur de la résistance reste à trouver, le mieux est de faire des tests avec un potentiomètre, mais d'après certains forum, une valeur de 2.2k? conviendrai.

Il ne reste plus qu'à tester et ça devrait marcher d'après les retours que j'ai lu.

Tenez-moi au courant !
RaspberryLab.

Liens :
https://raspberrypi.stackexchange.com/questions/41234/max-length-of-wire-w-3-3v-or-other-issue
https://www.raspberrypi.org/forums/viewtopic.php?t=36163#p303756
Loic moumou, le 02/07/2019 à 11h05
Super merci pour ta réponse. Je vais essayer ça.
-Pour l'alimentation 5V je peux me brancher directement sur l'alim externe (lien en dessous) ou il vaut mieux directement sur le rapsberry ?
https://www.amazon.fr/gp/product/B07FQ7NR5N/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1
-Je peux brancher une deuxième sonde (pour le local avec un fils de 1 mètre) sur cette alim de 5v et cette résistance de 2.2K sur le même principe que la partie VI ?

En tout cas merci à toi
Raspberry Lab, le 02/07/2019 à 13h41
Tu peux brancher directement le +5V de la sonde à l'alim directement, ça ne pose pas de soucis.
Pour ce qui est de la deuxième sonde, j'aurai laissé 4.7K comme préconisé (ajouter ~2.5K en série avec la résistance de 2.2K précédemment utilisée).

Après il faut surtout tester :)
Loic moumou, le 13/07/2019 à 17h00
J'ai ca qui s'affiche :
00-600000000000 00-e00000000000 w1_bus_master1
une idée ?
Tommy_Vasek, le 21/04/2019 à 11h47
Bonjour et merci pour ce tuto,
J' ai 3 sondes, j 'en vois 2.
Alors j'ai fouillé dans "w1_bus_master1" mais j'ai rien trouvé de probant.
Est que j'aurais mal fait quelque chose?
Merci

Vac17180, le 12/03/2019 à 09h17
Bonjour , je travaille sur Un projet de term Sti2d Sin dans lequel j'ai une sonde avec laquelle je doit envoyer via Xbee des données de type température et des données visuel issu d'un caméra . Je cherche un code me permettant de relevé les donnée et de les convertir pour les envoyée à une autre Raspberry ou un ordinateur via Le Xbee . Mon inexpérience des Raspberrys me porte à ne pas savoir de quel façon faire pour réaliser cela , donc si vous pourriez m'aider et me renseignée un code me permettant de récupérer , convertir et envoyée ces données via Xbee
Luluberlu , le 08/11/2018 à 12h07
Bonjour
tuto clair et concis bravo
problème : à partir de 2 sondes et sur des appareils différents invariablement au bout de quelques centaines de lectures voire moins les sondes disparaissent, ce problème a déjà été évoqué sur d'autres tuto mais sans réponse ( variations testés : temporisation , alimentation 3 v3 séparé, w1-pullup=1)
Clem, le 07/09/2018 à 12h57
Bonjour,
est-il possible d'utiliser différentes GPIO pour récupérer la température ? Ma problématique est que j'aimerais pouvoir lire au même instant chacun des capteurs.

Merci par avance.

Cordialement,
Clem
Raspberry Lab, le 09/09/2018 à 13h01
Bonjour Clem,
Il n'est pas possible à ma connaissance d'utiliser différentes GPIO pour récupérer la température. Cependant, la section VI montre comment lire la température de plusieurs sondes en même temps.

En espérant avoir répondu à votre question,
RaspberryLab.
BeeckmansO, le 28/06/2018 à 15h27
Tout d'abord merci pour ce tuto.
Mais n'y aurait-il pas une erreur dans le branchement en effet aucune des pin orange n'est jamais branchée sur aucun des schémas seul le le 3.3v et le GROUND sont connectés.
Ni dans l'explicatif de branchement avec une sonde ou ceux avec plusieurs sondes.
Certains fils ne même d'ailleurs nulle part.
Ce serait sympa de corriger.
Concernant les longeurs, c'est compliqué selon la topologie, cette explicatif devrait aider.

https://www.maximintegrated.com/en/app-notes/index.mvp/id/148

Merci

Yelsen, le 02/07/2018 à 08h20
Même constat que BeeckmansO. Si ce n'est pas une erreur, une petite explication du branchement serait sympa. Pour ma part, je ne comprends pas les pins orange sur les 2 schémas et 2 des fils blanc après la résistance sur le deuxième schéma.
Raspberry Lab, le 04/07/2018 à 16h17
Bonjour @BeeckmansO et @Yelsen,
Merci de m'avoir signalé que le schéma n'était pas bien expliqué. En fait, la sonde DS18B20 possède trois entrées/sorties :
- Le 3.3V en rouge,
- Le GND en noir,
- Le "Data" en blanc sur les schémas, et certaines fois en jaune sur les sondes.

C'est ce fil là qu'il faut connecter au 3.3V avec une résistance ainsi qu'au Pin 7 du Raspberry Pi.

En espérant avoir répondu à votre question,
RaspberryLab.
David, le 08/05/2018 à 21h57
Bonsoir et merci pour ce tuto,
J'envisage de construire un système de relevé de température à plusieurs endroits de ma maison et je me pose quelques questions auxquelles vous pouvez peut-être répondre.
Y-a-t-il une distance maximale pour utiliser la sonde ?
Peut-on brancher plusieurs sondes à des distances différentes sur une même résistance, ou faut-il prévoir une résistance différente par longueur de sonde ?
Par avance, merci pour votre retour.
David
Raspberry Lab, le 19/05/2018 à 15h13
Bonjour David,
J'ai fait quelques recherches sur la distance maximale d'utilisation de la sonde et... j'ai pas vraiment trouvé de réponse précise. Le mieux serait encore d'expérimenter tout ça, mais je ne suis pas sur qu'il soit faisable de prendre la température de différentes pièces de cette manière.. et c'est bien dommage car ce projet est très interessant.

Ce qui pourrait fonctionner serait de relier chaque sonde à un Arduino Nano (2€ pièce si on commande de Chine) puis transférer la température par Wifi au Raspberry (2€ aussi pour le module Wifi sur chaque Arduino) ou par un système de transfert autre que le 1-Wire.

D'autres solutions doivent aussi être envisageables !

Tenez-moi au courant quant à la solution que vous choisirez,
Bonne Journée,
RaspberryLab
David, le 19/05/2018 à 19h55
Bonjour, merci pour votre aide.
J'ai lu sur le site de vente de la sonde dans les commentaires qu'un client préconise d'augmenter la taille de la résistance en fonction de la longueur du cable. Ce n'est pas tres précis mais ça veut dire qu'on peut le faire.
Reste à tester. J'ai commandé 2 sondes, des cables, des résistances.
Le projet consiste à mesurer la température au niveau des Bouches d'aération d'une vmc double flux, de par les combles. Donc il n'y a pas tant de complexité, si ce n'est cette problematique des distances.
Je vous ferai un retour.
Loic moumou, le 13/07/2019 à 16h51
J'ai testé le montage, ça ne marche pas :(
Je n'arrive pas à afficher ma sonde dans /sys/bus/w1/devices/
Fred, le 18/08/2019 à 15h41
Bonjour Loïc,

Moi, j'ai testé, ça marche.


Commenter
Votre adresse mail ne sera pas visible sur le site.

Les commentaires sous soumis à vérification avant publication.