Raspberry Pi Tutorial
Reading Temperature with a DS18B20 Sensor


Updated on February 18, 2021 • 47 • 4.7

The Raspberry Pi opens the door to many home automation projects. One of the most basic applications in terms of home automation is knowing the temperature. In this tutorial, we will see how to read the ambient temperature using the DS18B20 sensor on Raspberry Pi.
The DS18B20 sensor is the most used on Raspberry Pi, particularly for its ease of use. We will also see that we can read multiple sensors at the same time to calculate averages, etc.
If you are interested, you can then follow this tutorial, which shows how to create temperature graphs in Python.

Reading Temperature with a DS18B20 Sensor on Raspberry Pi - Raspberry Lab

Prerequisites

To complete this tutorial, you will need:

Once you have all these elements, you can proceed directly to wiring!

Sensor Wiring

The DS18B20 sensor is wired following the diagram below. For testing, using a breadboard is particularly convenient. Later, once everything works, it is preferable to solder the resistor with a soldering iron for a cleaner setup.

Wiring diagram of a DS18B20 on Raspberry Pi 3

Reading Temperature via Console

Once the sensor is properly wired, you can read the temperature using the Raspberry Pi console. Specifically, the DS18B20 sensor transmits its data via 1-Wire bus. This bus also allows easy connection of multiple sensors in parallel (we will see this later in the tutorial). When a sensor is connected, a folder is added in the path /sys/bus/w1/devices. This folder contains a file with the information provided by the sensor, including temperature.
The goal is therefore to read this file. Here are the Unix commands that allow it:

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


ℹ️ Make sure to replace the x with the value given by ls
🔴If this is the first time you enter these commands, the sensor may not be detected, go to the "sensor not detected" box below to solve the problem

By executing these commands, you get a result similar to the image below. Here, we actually read a temperature of 6.875 °C (yes, it's precise).

DS18B20 Raspberry PI command prompt
Warning

Sensor not detected?

Sometimes the Raspberry may not detect the temperature sensor. For it to detect it, you need to modify two system files:

Add the following lines to the file located in /etc/modules:

w1-therm
w1-gpio pullup=1


Add the following line to the file located in /boot/config.txt:

dtoverlay=w1-gpio

Restart the Raspberry Pi.

Information

Reminder

To modify a file, type in the console:

sudo nano /.../../...

To modify the file located in /etc/modules, type:

sudo nano /etc/modules


Display Temperature Clearly with a Python Script

All these commands are nice, but we've seen better in terms of practicality! That's why we will use a Python script that formats all this, to get the temperature with a simple command.

Screenshot of DS18B20 reading program on Raspberry

This program will read the w1_slave file, extract the temperature, and finally display it on standard output.

Save Temperatures to a Text File

We now know how to get the sensor temperature using the Python script. We can now use this in many applications. For example, save this temperature to an external file.
To do this, we can add a line to a file at each temperature reading with the date, followed by the temperature.
To change the reading interval, modify the time.sleep() which is in seconds. Here, we record the temperature every minute.

Display Temperature from Multiple Sensors

It can be interesting to read the temperature from multiple sensors simultaneously. To do this, nothing too complicated. You need to wire the sensors in parallel as shown in the following diagram.

Wiring diagram of two DS18B20 on Raspberry Pi 3

With this new sensor, if we re-list the files contained in /sys/bus/w1/devices, we find two files, one for each sensor.

Multiple DS18B20 Raspberry capture

Then just modify (a tiny bit) the programs given previously.

This program takes into account the addition of other sensors, without even having to touch it. With two sensors, you get something like this:

Python result multiple DS18B20 Raspberry

Display Average of Two Temperature Sensors

Now that we know how to read multiple temperature sensors simultaneously, we can calculate an average of the two values obtained. Just add the following two lines to the previously written Python program.


There you go, the tutorial is complete, we now know how to read one or more DS18B20 temperature sensors on Raspberry Pi.

Read next

Article image

Choose and use a camera on Raspberry Pi


Article image

Control a Servo motor in Python






Ce tutoriel vous a plu ?

starstarstarstarstar

4.7/5 | 54 votes




Commentaires

47 commentaires publiés.

Anonyme, le 20/02/2023 à 11h46
Après plusieurs essais avec une seule sonde, ça a marché super bien. Je commande immédiatement une deuxième sonde pour essayer de mesurer la température intérieure et extérieure.... à suivre et MERCI
Anonyme, le 03/09/2022 à 22h56
Merci, j'ai réussit la première étape. Mais pourquoi dans le deuxième exemple avec plusieurs sondes chaque se retrouve avec un quatrième fil jaune qui ne semble branché à rien sur la breadboard ? De plus on confond le fil blanc des sondes avec le gris de la board, ce n'est pas très clair.

Merci,

Camille.
Raspberry Lab, le 11/09/2022 à 17h19
Bonjour @Anonyme,
Le logiciel d'édition de schéma ne proposait plus la version de la sonde avec uniquement 3 fils, d'où sur le schéma un 4eme fil qui n'est branché à rien. De même pour la couleur grise, les composants ne sont pas éditables.
Anonyme, le 18/07/2022 à 21h49
Tout va bien, je lis la température sur 3 sondes durant 1 semaine à 2 mois mais soudainement les fichiers /sys/bus/w1/devices/28-XXXXXX n'existe plus, mon programme arrête. Je redémarre le programme mais les fichiers sont toujours absents. Je reboot, les fichiers sont encore absent. Je ferme le courant au raspberry et remet le courant, les fichiers sont maintenant présents, je peux reprendre mes lectures pour une durée indéterminée.
Anonyme, le 15/10/2021 à 12h27
Bonjour, super tuto, un grand merci. je voulais savoir si il étais possible de de créer avec ce genre d'appareil une alerte mail quand un seuil est franchie. C'est pour surveiller une salle serveur.
Anonyme, le 24/09/2021 à 19h32
bonjour et merci pour ce tuto ,

au lieu de "temperature capteur" ou alors à la place du numéro de capteur je souhaite afficher le n° de la sonde sous forme 28-xxxxxxxxxxxxxxxx.
quelles serait les modifications à faire ?
autre question : l'un des lecteurs de ce tuto ont-ils réussi à intégrer la commande "trigger" en echo vers "therm_bulk_read" qui permet une conversion instantanée des sondes .
j'arrive à activer cette commande , mais seulement en mode root , par sudo su.

merci pour votre aide
Anonyme, le 24/06/2021 à 06h08
Bonjour, je n'arrive pas à afficher le code en mode 28**** , le mien commence par 00*******
Anonyme, le 24/06/2021 à 06h02
Bonjour,
J'ai essayé de suivre à la lettre le tutoriel mais je suis bloqué quand il faut appeler le fichier w1 créé, je n'arrive pas à avoir le fichier cat w1_ =slave. Et déjà mon ID ne commence pas par 28*******, le mien commence commence par un truc du genre 00********
Anonyme, 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 @Anonyme,
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.
Anonyme, le 25/04/2021 à 21h03
Bonsoir @Anonyme 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, ;).
Anonyme, 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 :)
Anonyme, 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
Anonyme, 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@Anonyme:/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.
Anonyme, 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 @Anonyme,
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.
Anonyme, 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 @Anonyme,
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.
Anonyme, le 03/02/2021 à 15h21
Merci beaucoup :-)
Anonyme, 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.
Anonyme, 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
Anonyme, 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 @Anonyme,
Oui c'est possible et la démarche est expliquée juste ici !

Bonne lecture ;)
Anonyme, 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
Anonyme, 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 !
Anonyme, 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 ?


Anonyme, 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....
Anonyme, 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 @Anonyme,
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
Anonyme, 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 :)
Anonyme, le 13/07/2019 à 17h00
J'ai ca qui s'affiche :
00-600000000000 00-e00000000000 w1_bus_master1
une idée ?
Anonyme, 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

Anonyme, 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
Anonyme, 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)
Anonyme, 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.
Anonyme, 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

Anonyme, 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 @Anonyme et @Anonyme,
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.
Anonyme, 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
Anonyme, 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.
Anonyme, 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/
Anonyme, 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.