La série d’articles :
- Partie 1 : Installation capteur DS18B20 et lecture en ligne de commande
- Partie 2 : Lecture des valeurs avec un script Python basique
- Partie 3 : Lecture des valeurs avec un script Python avancé et stockage dans une base MySQL
Le matériel nécessaire :
- 1 raspberry pi fonctionnel avec Raspbian installé
- 1 resistance 4700 ohms (jaune-violet-rouge)
- 1 capteur de température DS18B20
Compter 1 euro sur amazon/ebay/aliexpress ou 2 euros pour la version étanche
Le capteur DS18B20 de Dallas est un capteur numerique sur bus 1-wire, et ça tombe bien car Raspbian est déja configuré pour faire fonctionner le 1-wire (uniquement sur le GPIO 4). Du coup l’installation et l’utilisation de ce capteur est vraiment très simple.
De plus il est possible de mettre plusieurs capteurs 1-wire à la suite sur le même port . il suffit de les brancher en parallèle , une seule résistance suffit quelque soit le nombre de capteur.
Ce type de capteur peux se brancher de 2 manières :
- en mode alimenté : 3 fils à brancher : positif , masse et data
- en mode parasite : 2 fils à brancher : masse et data , le positif étant rélié à la masse
le mode parasite par contre demande plus de puissance pour réussir a convertir la temperature et le Raspberry n’est pas capable de la fournir. c’est pour ça que certaines personnes ont une sonde qui indique toujours 85°C
Il existe une version de cette sonde DSB18B20-P ou PAR qui se branche uniquement en mode parasite , faites attention lors de l’achat à bien prendre la version normale DS18B20
La résistance de pull up sert a maintenir un niveau haut sur la broche afin d’éviter les fausses mesures dues aux fluctuations du voltage
Pour brancher tout ce petit monde je vous conseille d’utiliser une nappe 26 fils
tuto pour en fabriquer une facilement avec une nappe IDE
le branchement est simple , 3 fils à brancher :
- 1-la masse (GND): sur le 0v du Raspberry (broche 9)
- 2-le data (DQ): sur le port GPIO 4 (broche 7) (il s’agit du port 1-wire du raspberry)
- 3-le plus (Vdd) : sur le 3.3v (broche 1)
et la resistance (pull-up) entre le 3.3v et le data
pour la version etanche ca depend de la couleur des fils mais en général on a le fil noir pour la masse , le rouge pour le 3.3v et le jaune ou bleu pour le data
Il faut par contre absolument faire attention au sens de branchement. sinon le capteur va très rapidement chauffer et claquer. Donc, touchez le capteur juste après avoir mis votre circuit sous tension. Si il chauffe, coupez tout et recommencer votre branchement!
Voila le plus dur est fait , maintenant pour lire la température c’est vraiment ultra facile , il suffit juste de savoir lire un fichier sous linux
Test du capteur :
Connectez vous sur la console avec votre logiciel habituel, par exemple PuTTy puis tapez les commandes suivantes :
/boot/config.txt
dtoverlay=w1-gpio
puis rebooter le raspberry:
sudo reboot
Une fois la machine rebootée passons a la suite :
Ces deux commandes vont permettre à linux de charger les modules et de communiquer avec la sonde.
sudo modprobe w1-gpio sudo modprobe w1-therm
Si vous voulez charger ces modules directement au boot, éditez le fichier
/etc/modules
et ajoutez ces 2 lignes à la fin
w1-gpio w1-therm
sous linux tous les péripheriques sont gérés comme des fichiers, on se déplace donc dans le répertoire des péripheriques et on liste le contenu, chaque sonde possède un numéro de série , si vous avez mis plusieurs sondes vous verrez plusieurs répertoires commencant par 28 (en fait il s’agit de lien vers les répertoires) chez moi j’ai mis 3 sondes:
cd /sys/bus/w1/devices/ ls -l
déplacez vous dans le répertoire de votre sonde
cd 28-xxxxxxxx ls -l
et affichez le contenu du fichier qui nous intéresse w1_slave qui contient la température :
more w1_slave
la température est indiquée en degrés celsius x1000 à la fin de la 2 eme ligne, il suffit donc de diviser par mille pour avoir la température exacte , ici 20.75 °C
Et voila votre maitrise du Raspberry viens d’augmenter un peu 🙂
Comprendre le fonctionnement du fichier w1_slave:
En réalité ce fichier n’est pas mis a jour en permanence ,le capteur n’envoi la température que si on lui demande et pour lui demander …il suffit de lire le fichier 🙂 .
en effet au moment d’afficher le fichier ( que ce soit avec un cat , un more, un vi …) celui ci est vide mais linux va envoyer une requete au capteur , qui lui renvoi la valeur qui au final est stocké dans le fichier et enfin le fichier s’affiche sous vos yeux emerveillés.
C’est ce qui explique la petite latence entre la demande d’affichage et la réponse .
Par defaut la durée du calcul (convertion time) est de 750 ms avec une résolution sur 12 bits
Cette latence n’est pas le fruit du hasard , les sondes DS18B20 ont une résolution modifiable.
Resolution | 9 bit | 10 bit | 11 bit | 12 bit |
Conversion Time (ms) | 93.75 | 187.5 | 375 | 750 |
LSB (°C) | 0.5 | 0.25 | 0.125 | 0.0625 |
Attention la différence entre les résolutions n’est pas synonyme de marge d’erreur ou de précision, simplement l’échelle est gradué de 0.5° en 0.5° sur 9 bits ou de 0.0625° sur 12 bits mais la marge d’erreur reste de 0.5° tout le temps
De tout façon il me semble que sur le module w1-therm de Raspbian il n’est pas prévu de pouvoir modifier cette résolution donc on est sur 12 bits par défaut.
le fichier contient 2 lignes avec des valeurs en hexa et en clair.
ce qui nous interesse c’est la fin en clair des 2 lignes.
la 1 ère contient soit YES soit NO
si c’est YES ça veut dire que la 2 ème ligne contient la température
si c’est NO ça veut dire que le capteur n’a pas réussi a lire la température , ce qui peut arriver de temps en temps a cause de parasite. il suffit de relire une 2 ème fois .
La température est indiquée à la fin de la 2 eme ligne, il faut diviser par 1000 pour avoir la température exacte.
Voila , dans la partie 2 nous verrons comment lire cette sonde avec un script python
Bjr; mon capteur affiche t=85000 soit 85°C. Je travaille à 10cm de raspberry, ce n’est donc pas pb de longueur de fil. mon capteur est reconnu, la fin de la premiere ligne est bien YES
Avez vous une idée sur l’origine de ce pb?Merci
J’aimeJ’aime
Je sais qu’il existe un bug sur ces capteurs qui fait que de temps en temps de manière aléatoire ils affichent t=85000. du coup la plupart des gens ajoute un test dans le script de lecture qui permet de relancer la lecture si la valeur est 85000. par contre si ça affiche 85000 en permanence ça veut dire que tu as acheté un DS18B20-P , P pour mode Parasite , et ca ne se cable pas pareil.
de plus le mode Parasite necessite un gros pull-up que le raspberry ne semble pas capable de fournir.
je te conseille de racheter un DS18B20 normal , ou sinon essaye de googler sur le mode parasite , peut etre que quelqu’un a reussi
J’aimeJ’aime
Merci pour votre réponse en effet c’est un DS18B20-P que j’ai cablé en 3 fils
je vais tester le mode parasite.
J’aimeJ’aime
Bonjour,
Merci pour ce site où on apprend des choses. D’abord que la résolution de conversion est de 12 bits par défaut avec w1-therm, et ensuite que le fichier w1_slave est mis à jour à chaque lecture. Ca pourrait être une réponse à mes problèmes de conversion très fréquents quand je lis mes températures.
Quelles sont vos sources svp ?
Voici mes températures http://82.227.40.57/jpt/ws_temp_jd.html et les programmes ici http://82.227.40.57/public/
Si vous avez une idée ?
Merci
J’aimeJ’aime
a quoi sert le capteur svp?
J’aimeJ’aime
il s’agit d’un capteur qui mesure la temperature
J’aimeJ’aime
oups pardon je voulais dire : à quoi sert la résistance?
J’aimeJ’aime
Celle se trouvant entre l’alimentation et la broche de communiation
J’aimeJ’aime
oups pardon je voulais dire : à quoi sert la résistance?
J’aimeJ’aime
c’est une resistance de pull-up , elle sert a éviter d’avoir une valeur aléatoire dans le circuit.
sans cette resistance, le bruit electronique parasiterait la sonde
J’aimeJ’aime
Merci pour ce tuto 🙂
Dans mon cas la sonde n’était pas détectée, j’ai du ajoute ceci dans /boot/config.txt :
Il semblerait que ce soit lié à des modifications dans le firmware de début 2015 (avec l’arrivée du Pi2) cf https://www.fanjoe.be/?p=1332
Et ensuite nickel 🙂 J’ai utilisé une résistance de 4,7K pour 1M de câble environ pour info
J’aimeJ’aime
Bonjour, pour ma par mon raspberry ne trouve pas les sondes de température. ceci peut il venir de la résistance qui est trop élevé?
J’aimeJ’aime
a mon avis tu as le nouveau firmware , la solution doit etre dans le lien qu’indique Xhark dans le commentaire précédent
J’aimeJ’aime
Bonsoir, dans un montage avec plusieurs capteurs 1-wire, faut-résistance par capteur ou une seule pour tous ? Merci !
J’aimeJ’aime
Il en faut une seul pour tous
J’aimeJ’aime
En fait il faut une résistance par port GPIO donc soit :
– tous les capteurs sont en parallèle sur le meme GPIO , alors 1 seule résistance
– les capteurs sont sur différent GPIO : plusieurs résistance.
je te conseille la 1ere solution avec une seule résistance, ca marche très bien
J’aimeJ’aime
Bonjour.
Je me permet de poser ce lien qui me semble assez utile concernant la mise en place de nombreux DS18B20 ou autre 1-WIRE devices sur de grandes longueurs : (ajout d’une résistance de 100-120 Ohm en série de chaque pin DATA de DS18B20 avant de connecter le capteur au bus et ajout d’une diode Schottky type 1N5817 entre DATA (Cathode) et GND (Anode)
en fin de bus.
http://dreamgreenhouse.com/designs/automation/1wire/index.php
Il y est fait usage d’une version ancienne (le DS18S20) mais je pense que les conseils s’appliquent à tous les 1-WIRE devices.
J’aimeJ’aime
Merci , c’est assez intéressant en effet dès qu’on commence a avoir de la distance ou beaucoup de capteur , je note ça dans mes favoris
J’aimeJ’aime
Bonjour
Je n’arrive plus a lire mes capteurs DS18B20 après une nouvelle réinstallation de ma RASBIAN 4.4.43.
J’ai bien fait les manip indiquées par Xhark le 15 aout 2015, mais rien y fait.
Cela à bien changé quelque chose puisque dans :
cd /sys/bus/w1/devices/
apparait maintenant
« w1_bus_master1 »
qui n’apparaissait pas avant, cependant, je n’ai toujours pas de sonde 28-xxxxxxxxxx.
D’autre part, je ne me souviens pas avoir fait toutes ces manipulations lors la première mise en œuvre de ce « tuto »
J’aimeJ’aime
Oups !
Je n’ai pas la possibilité mon post précédant, mais en fait, j’avais « juste » une erreur de connectique !
N’en reste pas moins que je ne me souviens pas avoir effectué les manip indiquées par Xhark le 15 aout 2015 lors de la première install, or il me semble qu’avant d’avant mon soucis de connectique j’avais le problème évoqué concernant cette mise à jour !
J’aimeJ’aime