Une sonde de température 1-wire DS18B20 connectée au GPIO du Raspberry Pi.

Dans cet article nous allons voir comment connecter une sonde de température 1-wire DS18B20 sur un Raspberry et comment en suivre les données sur notre serveur domoticz.



Tous les grands artistes ont leurs périodes! Picasso a eut sa période bleue, Dali sa période surréalisme et moi en ce moment j'ai ma période "Capteur de température". Dans mon article précédent nous avons vu comment réaliser une sonde de température avec un microcontrôleur ESP8266 et un capteur de type BMP280 (ICI). Dans un article un peu plus ancien (ICI) nous avions vu comment utiliser un capteur de type DHT11. Hé bien aujourd'hui nous allons étudier le DS18B20 en se fixant un triple objectif: 
  1. Découvrir un nouveau type de capteur pour l'ajouter à notre base de connaissance d'électronicien débutant.
  2. Découvrir le bus de communication 1-wire (ou OneWire).
  3. Découvrir comment utiliser les GPIO du Raspberry PI et notamment comment ce dernier gère les extensions 1-wire.


Nous avons du pain sur la planche alors sans plus attendre, mettons nous au travail ...







1. Introduction


Dans ce premier chapitre, qu'avec beaucoup de clairvoyance j'ai nommé "Introduction" (💪), nous allons faire un peu de théorie pour acquérir les bases qui seront nécessaires avant de nous lancer dans la pratique. Pour commencer nous allons faire connaissance avec le DS18B20. Quand nous aurons compris qu'il s'agit d'un composant qui se connecte en 1-wire, nous regarderons un peu plus dans le détail comment fonctionne ce bus. Et pour finir nous nous pencherons sur les ports GPIO du Raspberry PI histoire de voir comment y connecter notre sonde. 


1.1 Tout savoir sur la sonde DS18B20

Le DS18B20 est un composant électronique capteur de température qui communique via un bus 1-wire (nous verrons un peu plus tard ce que cela signifie). Dans le commerce on le trouve principalement sous 3 formats:




  1. Le format composant appelé TO-92 permet de réaliser ses propres montages électroniques. Il faudra l'associer à une résistance 4,7 kΩ environ pour que cela fonctionne. 
  2. Sous forme de capteur étanche, le composant est livré dans un tube métallique étanche et raccordé à un câble (1m ou 2m en général). Il faudra aussi le raccorder à une résistance de 4,7 kΩ environ. Sous cette forme vous pourrez déporter le capteur du montage électronique pour aller mesurer la température d'un liquide (piscine, cuve ...) ou le placer à l'extérieur de la maison en conditions humides.
  3. Sous forme de module, le composant se présente soudé à une plaque électronique qui embarque la résistance de pull-up nécessaire et met à disposition des broches afin de raccorder directement un microcontrôleur (ou les ports GPIO du Raspberry PI). Attention car on trouve des modules sur lesquels il n'y a pas la résistance d'incluse et dans ce cas ce format perd un peu de son utilité selon moi. 

1.1.1 Caractéristiques

Voici (en vrac) les principales caractéristiques du DS18B20:


Il s'agit d'une sonde "numérique", c'est à dire qu'elle renvoi ses données sous forme de nombres accessibles via des broches GPIO numériques (digitales).
Sa plage de mesure est de -55°C à +125°C, avec une précision de 0,5° entre -10°C et 85°C. Il est suggéré de maintenir le composant et les câbles qui le raccordent à moins de 100°C. 

Comme nous l'avons vu on le trouve sous 3 formes différentes :
  1. Format sonde étanche au bout d'un câble d'un ou deux mètres. 
  2. Format transistor (TO-92)
  3. Format module: en général il s'agit du format transistor que l'on a placé sur une plaque électronique pour offrir des fonctions, comme l'accès aux broches par des câbles dupond ou alors la présence d'une résistance de pull-up obligatoire pour l'utilisation de la sonde. Toutefois attention: certains modules n’intègrent pas cette résistance. Lorsqu'elle l'est, c'est spécifié dans la description technique. 
Son alimentation électrique ainsi que sa broche de données fonctionnent avec une tension allant de 3 V à 5,5 V. 

La résolution est sélectionnable entre 9 bits et 12 bits. Ce qui correspondant à une précision de: 
  • +0.0625°C en 12 bits
  • +0.125°C en 11 bits
  • +0.25°C en 10 bits 
  • +0.5°C en 9 bits
Identifiant unique:
Chaque sonde possède un identifiant unique sur 64 bits (8 octets) gravé par le fabriquant. Ce identifiant est constitué par:

  • 1 octet identifiant la "famille" du composant. Dans notre cas, le DS18B20 aura pour famille la valeur "28". 
  • 6 octets dont la valeur est unique et est propre au circuit.
  • 1 octet de CRC (si vous ne savez pas ce que c'est, en gros c'est un octet dont la valeur est calculée avec les 7 octets précédents afin de vérifier dans une communication qu'il n'y a pas eu d'erreurs).
Cette information est importante pour comprendre comment sera constitué le nom chemin d'accès au composant 1-wire sous Raspbian sur notre Raspberry PI. 

La sonde dispose de 3 broches: 
  • GND (fil noir)
  • VCC (fil rouge)
  • Data (fil jaune bien qu'il arrive qu'on trouve une autre couleur).
Dans le cas d'un modèle sous la forme TO-92, la broche de données est toujours au centre. 

Sur le câble qui connecte la broche de données, il peut y avoir plusieurs autres sondes 1-wire (jusqu'à 100). Chacune sera identifié par son identifiant unique sur 8 octets.

Le temps d'interrogation dépend de la précision fixée mais sera inférieur à 750 ms (minimum 9 bits: 93.75 ms, maximum 12 bits: 750 ms).

Zone mémoire:
Chaque sonde dispose d'une zone de mémoire de 9 octets ainsi que d'une EEPROM de 3 octets (permettant de la configurer). Le schéma ci-dessous montre comment est constituée cette zone mémoire:

1.1.2 Où en trouver et à quel prix?

Le DS18B20 se trouve facilement pour pas très cher. J'ai acheté le miens sur eBay ICI pour 2€33 le 29/09/2019. J'ai attendu plus de 6 semaines pour être livré.


DS18B20 étanche acheté sur eBay

Il faudra toutefois être vigilant car certains vendeurs affichent un intitulé qui peut être trompeur ou ne pas correspondre exactement à l'article. J'en ai fais les frais en pensant acheter un lot de 10 pièces et en réalité j'ai acheté un capteur unique disposant d'un câble de 10 pouces: il y avait "10 pcs" dans le titre de l'article et sur la photo on distinguait plusieurs sondes. 

En cherchant bien sur eBay vous devriez pouvoir trouver encore moins cher (autour de 1€) comme par exemple ICI.

Vous pouvez également vous procurer le capteur sous forme de module (ICI). Sous cette forme vous n'aurez plus l’étanchéité mais sur les modules que je vous ai indiqué une résistance de tirage (pull-up) est incluse, ce qui vous évitera d'avoir à jouer du fer à souder. 





Et pour finir, vous pouvez vous procurer le composant électronique nu, sans a coque et sans plaque : ICI.






Pour les plus pressés d'entre vous, la seule option pour recevoir très rapidement votre commande, est d'utiliser le service "Prime" d'Amazon. Tout ayant un coût dans ce bas monde, il faudra compter au moins 2€ de plus par capteur. 

(si vous ne voyez pas les images de matériel qui devraient s'afficher ci-dessus désactivez votre bloqueur de publicité sur mon Blog: vous ne risquez absolument rien).

1.1.3 Câblage 

Pour illustrer ce paragraphe j'ai repris une image qui m'avait servi à illustrer un paragraphe du même nom dans un autre de mes articles. Saurez vous retrouver lequel? Bon sinon au lieu de vous proposer des petits jeux, je ferais mieux de vous expliquer comment on raccorde un DS18B20 à un microcontrôleur. 




Comme nous l'avons vu précédemment, quelle que soit sa forme, le DS18B20 dispose d'une broche de données, d'un VCC et d'un GND. 

Donc de manière naturelle on peut se dire que le VCC et le GND vont se raccorder à l'alimentation et la broche DATA (la jaune en général, parfois bleue) va se raccorder à une broche digitale du microcontrôleur. Et c'est tout à fait cela sauf qu'il y a deux petites choses qu'il faudra savoir:
  1. Le fonctionnement du bus 1-wire impose que la broche data soit dans un état haut par défaut. Il faudra donc placer une résistance de rappel pull-up entre la broche data et VCC. Cette résistance est d'environ 4,7 kΩ. On lit parfois que pour des longueurs de câble allant au delà de 10m on pourra utiliser une valeur plus faible 2 kΩ). 
  2. La broche du microcontrôleur sur laquelle est raccordée la broche data du DS18B20 doit être celle qui est associée à la gestion du bus 1-wire. On ne peut pas toujours spécifier cela logiciellement et il a parfois des équipements qui imposent la broche à utiliser. 

Voici quelques schémas illustrant des cas de câblage:

Raccordement sur un PI modèle B: les deux schémas montrent comment raccorder le DS18B20  sous deux formes différentes mais les broches et les raccordements à réaliser sont identiques.


Sur le Raspberry PI, la broche à utiliser pour raccorder la broche DATA du bus 1-wire est GPIO4.




Raccordement sur un ESP8266 NodeMCU ESP12e: Par défaut le port de l'ESP associé au bus 1-wire est le GPIO4. Mais cela peut se changer de manière logicielle au moment de l’instanciation de la classe OneWire. 


En conclusion vraiment rien de sorcier pour réaliser ce câblage. Pour un arduino ou tout autre microcontrôleur le principe sera identique. 

1.1.4 Questions / réponses sur DS18B20 

Voici quelques questions que je me suis posé et les réponses que j'ai trouvé:

Peut-on allonger le câble de la sonde ?
Oui. Un câble téléphonique 2 paires (donc 4 fils) peut faire l'affaire pour une distance d'une dizaine de mètres. Pour une plus longue distance, mieux vaut prendre un câble réseau ethernet blindé afin d'éviter les perturbations.

Peut-on utiliser une autre valeur de résistance de pull-up que 4,7 kΩ ?
La réponse est oui. Pour ma part je n'avais qu'une résistance de 5 kΩ et cela a fonctionné. Il y a certainement des limitations, dans un sens comme dans l'autre mais je n'ai pas réalisé les tests. Baisser la valeur de cette résistance augmente la consommation du système mais permet à ce dernier d'être plus réactif, donc d'augmenter le nombre de périphériques sur le bus. 

1.2 Découverte du bus 1-wire (ou OneWire)


Le 1-wire, appelé bus 1-wire (ou parfois bus DALLAS) est un bus de données permettant de connecter et de faire communiquer entre eux des circuits électroniques. Et comme son nom l'indique, cette communication est réalisée en utilisant un seul fil de données.

Et pour ceux qui se demandent ce qu'est un bus, c'est un système qui permet de transporter des données d'un endroit à un autre! Autrement dit, c'est ce qui permet à des circuits d'être reliés entre eux et de communiquer en utilisant des protocoles normalisé. Un simple fil qui interconnecte deux circuits peut être vu comme un bus de données. 

1.2.1 Un fil unique pour les gouverner tous (.. mon précieux ...) 

Pour échanger leur données, les composants qui sont reliés sur le bus 1-wire, utilisent un fil unique. Mais dans la réalité, pour fonctionner, le système 1-wire nécessitera 2 ou 3 fils:

  1. le fil de données
  2. le GND
  3. et éventuellement le VCC. Un des avantages de ce bus est de pouvoir se passer de VCC car les circuits raccordés peuvent être alimentés par le fil de données. On appellera cela le mode "parasite" (on dit aussi parfois mode "fantôme"). 
Ce système de bus fonctionne en mode maître/esclave. Il n'y aura qu'un seul maître, qui pourra dialoguer avec un ou plusieurs esclaves. Les circuits esclaves pourront être raccordés en série, en parallèle ou en étoile.

Voici un petit schéma de principe: 
Schéma de principe de bus 1-wire

Sur ce schéma on distingue la présence d'une résistance entre le fil de données et le VCC. Ceci s'explique car le fil de données du bus doit être "tiré" au +Vcc par une résistance de rappel.

Autrement dit, l'état de repos du bus est un état haut. La valeur de cette résistance est donnée à 4,7kΩ. Cette valeur va fonctionner dans la majorité des cas. Toutefois dans la norme 1-wire il existe des formules qui permettent de la calculer. 

1.2.2 Quelques caractéristiques techniques 

Bien que ce ne soit pas vraiment nécessaire dans notre cas, si vous souhaitez aller plus loin dans la compréhension et la maîtrise du 1-wire, ce paragraphe rassemble certaines informations techniques qui seront utiles.

Le bus 1-wire est alimenté de 3V à 5,5V.

L'état logique sur le bus de données est considéré comme étant à:
  • "1" pour une tension sur le bus de donnée ≥ 2,2V
  • "0" pour une tension ≤ 0,8V 
Les équipements esclaves, sur le bus, sont en général capable de tirer la tension de ce dernier sur vers un niveau de 0,4V face à une consommation de 4 mA. Leur résistance interne est de 100Ω.

La résistance de rappel a une valeur typique comprise entre 1 kΩ et 4,7kΩ. Ceci fixe la plage de courant sur le bus entre 5 mA et 1,06mA. Sachant que la consommation typique d'un DS18B20 est de 3 mA. 

Chaque circuit possède une adresse unique (un identifiant sur 7 octets) , gravée dans la puce à la fabrication. C’est une des raisons pour laquelle le constructeur Dallas est réticent pour accorder l'autorisation à d'autres fabricants de créer et commercialiser des esclaves 1-wire: il souhaite conserver la maîtrise de l’identification des équipements. Parmi ces 7 octets le premier identifie la famille de composant et les 6 suivants représentent un numéro de circuit unique. 


Je ne rentrerai pas plus dans le détail du protocole 1-wire car beaucoup de sites sur internet en parlent très bien. A la fin de cet article je vous ai mis quelques liens vers les meilleurs sites que j'ai trouvé.

1.2.3 Questions / réponses sur 1-wire

Combien de composants 1-wire peuvent se connecter sur un même bus? 
On parle de 100.

Quel est le débit du bus ? 
On parle d'une communication à 15 ou 16 kb/s. Ce qui est largement suffisant étant donné le type de composants associés à ce système. Il existe un mode "overdrive" permettant d'augmenter ce débit à 110kb/s mais je n'ai pas trouvé d'exemple d'utilisation.

Quelle est la longueur de câble maximale?
20m à 30m semble la longueur maximale atteignable avec une configuration "standard". Pour aller au delà (jusqu'à 50m) il faudra adapter la résistance de rappel pour la diminuer (2,2kΩ. par exemple) et la tension pour l'augmenter (passer à 5V). Dans tous les cas faites des tests avant de câbler en mode définitif. 

Faut-il une résistance de pullup par équipement ?
Non! Dans un réseau 1-wire avec plusieurs appareils esclave, il ne faudra mettre qu'une seule résistance commune à tous. Sinon il y a un risque de surchauffe des équipement pour des raisons de résistance globale du circuit et de quantité de courant trop importante. 

1.3 Quelques autres composants 1-wire

Dans la gamme des composants 1-wire il existe plusieurs capteurs de température mais il existe également pas mal d'autres composants avec des fonctionnalités intéressantes pour les bidouilleurs que nous sommes (n'est-ce pas?
Dans le wiki 1-wire vous trouverez une liste non exhaustive. Et ci-dessous j'en détail quelques uns. 

1.3.1 Clé iButtons DS1990A 

La technologie 1-wire permet de réaliser des contrôles d'accès. Il suffit d'associer des "boutons" de type DS1990A à un lecteur. Lorsque qu'il est présenté au lecteur, le bouton qui en réalité est un esclave 1-wire va être alimenté et communiquer son numéro de série. 
Le microcontrôleur ou le Raspberry PI connecté au lecteur saura donc si le bouton fait partie de ceux autorisé pour l'accès. On peut bien évidement associer cette fonctionnalité à un système d'accès mécanique, comme une serrure de porte, une porte de garage ou un bâtiment de jardin (dans le potager). Mais aussi faire de la gestion d'accès pour tout autre type de système (protection de données par exemple). Le code "famille" pour ces circuits est "01".

Voici ci-dessous ci-dessous à quoi ressemble ces boutons:

Exemple de bouton d'accès DS1990A


(si vous ne voyez pas les images de matériel qui devraient s'afficher ci-dessus désactivez votre bloqueur de publicité sur mon Blog: vous ne risquez absolument rien).

Ce système est équivalent d'un lecteur de carte à puce ou RFID mais présente l'avantage du coût d'achat des équipements et la facilité d'utilisation du bus 1-wire.

1.3.2 Horloge temps réel DS1994

Le DS1994 est un autre composant 1-wire sous forme de bouton qui fourni une horloge temps réel. 
Il peut s'utiliser avec un arduino ou sur tout montage nécessitant un composant qui calcul le temps passé. 
Vous trouverez un petit tuto ICI

1.3.3 Interrupteur DS2405

Ce circuit dont l'identifiant de famille est "05" agit non seulement comme un interrupteur ON/OFF (une commande pour mettre la sortie DATA à ON et une commande pour passer à OFF) mais permet également d'opérer une lecteur d'état sur la sortie DATA. C'est utile pour connaitre l'état d'un équipement en "lisant" directement sur l'équipement. En fait ce circuit agit un peu comme une broche numérique sur un microcontrôleur. 








2. Mise en pratique



Fort de toutes ces connaissances que nous venons d'acquérir, en cette période de Noel, nous allons passer à la pratique en offrant à notre Raspberry PI chéri, un magnifique cadeau: un capteur de température DS18B20 livré directement sur ses ports GPIO! Et ensuite nous verrons comment accéder aux données de température directement dans le système Raspbian ou alors comment en activer la remontée dans l'interface de notre serveur domotique "Domoticz".



2.1 Matériel nécessaire


Philosophie commerciale: Je ne suis pas actionnaire d'Amazon ou autres eBay. Les liens que je vous donne pointent sur du matériel compatible avec mes montages, que je recommande et que j'ai souvent acheté moi même. Je choisi du matériel de bon rapport qualité/prix/service (livraison, SAV,...) Si vous faites un achat en passant par un de mes liens, la (minuscule) commission qui me sera versée ne nuira pas aux bénéfices des sites marchand et m'aidera à investir pour rédiger de nouveaux articles. Et si aucun matériel ne vous intéresse, vous pouvez mettre ce lien https://amzn.to/30xd8Ag dans vos favoris et l'utiliser quand vous aurez besoin de quelque chose sur Amazon.

Un GRAND merci à tous ceux qui ont joué le jeu ou le joueront


Ce projet ne nécessite pas grand chose comme matériel. En voici la liste ainsi que quelques liens pour vous les procurer.

  • Une (ou un) Raspberry PI: Je pense que tous les modèles avec ports GPIO fonctionnent. Du PI 1 au PI 4. Si vous devez en acheter un neuf, prenez un PI 4 (avec 4 Go) comme ça vous pourrez aussi faire un médiacenter qui lira des vidéos en 4K. Prenez un kit (comme ICI) ainsi vous aurez le bon chargeur et les bons cables. 
  • Une sonde DS18B20: Pour ma part j'ai pris le modèle avec un cable et sous forme de capteur étanche. Ainsi peux faire sortir la sonde du placard ou est stocké le RPI. C'est plus pratique pour mesurer la température de la piece. Ces sondes coûtent en 2€ et 3€. Je vous conseil un lot de 5 (comme ICI) histoire d'en avoir de coté en cas de panne ou d'erreurs de montage. 
  • Une résistance 4,7kΩ: C'est la valeur conseillée mais avec une résistance de 5kΩ cela fonctionne également. Je vous conseille de prendre un kit comme ICI
  • Des câbles dupont: ce n'est pas obligatoire si vous avez une autre méthode pour relier les cables du DS18B20 aux ports GPIO du Raspberry. Moi c'est la solution que j'ai trouvé la plus simple. Il faudra des câbles avec au moins un coté femelle comme ICI
  • Un fer à souder: car il faudra souder la fils de la sonde aux cables dupont et il faudra aussi souder la résistance entre le fil 1-wire en le VCC. Moi j'avais pris un kit comme ICI avec une pompe à dessouder. Si vous voulez mieux regardez ICI.

(si vous ne voyez pas les images de matériel qui devraient s'afficher ci-dessus désactivez votre bloqueur de publicité sur mon Blog: vous ne risquez absolument rien).

2.2 Câblages

Quel que soit le modèle que vous aurez choisi pour votre sonde DS18B20, le principe reste le même: il va falloir raccorder correctement ses 3 broches vers les 3 broches adéquates sur le Raspberry.

La bonne nouvelle est que le Raspberry PI avec Raspbian implémentent de manière native la gestion du protocole 1-wire. Nous verrons ci-dessous comment le configurer. Par contre il faut que les composants soient branchés aux bons endroits.

Voici étape par étape comment réaliser le montage.

2.2.1 Repérer les broches

La première chose à faire est d'identifier toutes les broches concernées par les raccordements. Sur la sonde cela va dépendre du modèle que vous avez. Si vous avez le modèle étanche, vous allez travailler directement avec les fils. Normalement vous aurez:

  • un fil noir pour le GND (ou la masse ou le 0V). 
  • un fil rouge pour le VCC (ou VDD ou +3,3V ou +5V)
  • un fil jaune pour les données. Ce fil peut aussi avoir une autre couleur (blanc par exemple).
Connectique sonde DS18b20 étanche

Si vous travaillez avec une sonde sous forme de composant (format TO-92) vous aurez la broche DATA au centre, le GND à gauche et le VCC à droite quand vous avez le coté plat face à vous. 

Broches du DS18b20 au format TO-92

Vous allez également devoir repérer quelles sont les broches concernées sur votre Raspberry PI. 
Bien que le nombre totale de broche puisse varier en fonction du modèle de Raspberry, vous trouverez toujours la même disposition dans les premières broches. 

Broches GPIO du Raspberry PI

Pour raccorder une (ou plusieurs) sondes DS18b20 nous allons avoir besoin:
  • d'une broche VCC à 3,3,V. Une broche à 5V pourra aussi fonctionner mais cela ne sert à rien de consommer plus. Dans le schéma ci-dessus on voit qu'il existe deux possibilités.
  • d'une broche GND. Dans le schéma ci-dessus toutes les broches symbolisées en noir sont reliées au GND. 
  • d'une broche DATA. Celle qui est associée au protocole 1-wire dans le système Raspbian et géréer comme telle par les driver système est la broche 7 : GPIO 4. Pour cette dernière il faudra respecter ce brochage. 
Il est possible de changer la broche associée par défaut au 1-wire en modifiant la valeur du paramètre "gpiopin=4" dans le fichier "/boot/config.txt". Dans les versions les plus récentes du noyaux (supérieures à 4.9.28) il est même possible de créer plusieurs bus 1-wire. 

2.2.2 Raccorder la résistance de pull up.

Comme nous l'avons vu précédemment, la sonde DS18b20, pour fonctionner, comme tout composant 1-wire, nécessite d'avoir une résistance de pull up qui "tire" le niveau de la broche data vers VCC (c'est à dire que le niveau au repose de la broche DATA sera une tension haute). 

Il faudra donc connecter la broche DATA de la sonde avec VCC en plaçant une résistance de 4,7kΩ entre les deux. Il y a plein de méthodes possibles pour réaliser cela. La plus fiable et la plus sure pour un montage durable sera de souder. Mais vous pouvez aussi réaliser le montage sur une breadboard, utiliser un domino électrique ... j'ai même vu des bidouilleurs qui utilisent une pince à linge.



Le schéma ci-dessus illustre le principe de la résistance de rappel entre GPIO4 (ou DATA sur la sonde) et VCC.



Le montage ci-contre montre comment un ami bidouilleur à utilisé un domino électrique pour la résistance de pullup et un fiche d'alimentation de PC pour poser sur les GPIO du Raspberry. Les fils sur lesquels il y a un X vert ne sont pas utilisés.







La photo de gauche montre l'utilisation de câbles de type dupont (sur lesquels l'embout plastique a été enlevé) pour fixer la résistance entre DATA et VCC. On ne voit pas la suite mais on imagine qu'à l'autre extrémité ces câbles dupont sont reliés (soudés) avec soit les câbles de la sonde étanche, soit les broches de la sonde TO-92.










Sur cette photo on voit comment raccorder la sonde avec des câbles dupont et une breadboard. Ce montage sans soudure permettra de réaliser des tests.






Une fois ces connections réalisées il ne nous reste plus qu'a lancer la configuration du système.

2.3 Configuration du système

Comme je l'ai dit, le protocole 1-wire est géré de manière plus ou moins native sur un Raspberry PI qui tourne sous Raspbian. Si les branchements sont bien réalisés, il faudra également s'assurer que les modules logiciel (les drivers 1-wire et ceux gérant les modules de la famille 28h qui est celle du DS18b20) sont bien installés, configurés et exécutés. Pour voir les modules installés lancez la commande:

sudo lsmod |more

Dans la liste qui s'affiche vous devriez voir: w1_gpio. Si c'est le cas alors le protocole 1-wire est déjà géré par votre RPI. Si en plus vous voyez le module "w1_therm" alors les composants de la famille 28h tel que le DS18b20 sont également reconnus. 

Sinon vous avez 3 manières de faire.

2.3.1 Utiliser "raspi-config"

Raspi-config exécute un programme qui permet de naviguer dans des menus d'options à partir des flèches du clavier. En lançant cet outil, vous pouvez activer le protocole 1-wire. En fonction de votre version du logiciel les menus peuvent être différents mais voici ce que cela donne chez moi.

sudo raspi-config




Choisir:
5 - Interfacing Option
P7 - 1-Wire
<Oui>

Cette action devrait avoir activé la gestion du bus 1-wire sur le port GPIO 4 du Raspberry. La commande lsmod devrait vous le montrer (vous devriez avoir w1_gpio dans la liste des modules. Si vous ne voyez pas le module w1_therm il va falloir l'ajouter avec la commande:

sudo modprobe w1-therm

Vous devriez maintenant voir le module dans la liste retournée par lsmod.

2.3.2 Utilisation de modprobe

La commande modprobe. Cette dernière permet simplement de charger ou décharger des modules.
Pour que cela fonctionne nous avons besoin des modules:
  • w1-gpio: Active la gestion du protocole 1-wire sur les ports GPIO du RPI. 
  • w1-therm: Permet la gestion des composants 1-wire de la famille 28h. Ce qui est le cas de tous les DS18x20 (x dans notre cas est le B). 

Nous allons exécuter les 3 commandes suivantes: 
sudo modprobe w1-gpio
sudo modprobe w1-therm
sudo lsmod |grep w1

Si le résultat de la dernière commande affiche: 

C'est gagné!


2.3.3 Ajout manuel

Ajouter des modules sous Raspbian cela revient à les déclarer dans le fichier "/etc/modules" et s'assurer qu'ils sont bien configurés dans le fichier "/boot/config.txt".
C'est ce que nous allons faire.

Pour cela il va falloir utiliser un éditeur de texte. Le plus courant et facile à utiliser est "nano". Moi par habitude d'ancien développeur, j'utilise emacs. Je vais donc supposer que vous savez utiliser un éditeur de texte et si ce n'est pas emacs, dans les commandes vous remplacerez ce dernier par le votre.

Etape 1: ajouter les modules w1-gpio et w1-therm dans le fichier /etc/modules:
sudo emacs /etc/modules


Vous êtes libres d'ajouter l'option pullup=1 (ou 0) au module w1-gpio. Cette dernière permet d'activer (valeur 1) ou désactiver (valeur 0) le fonctionnement du bus 1-wire en mode parasite. C'est à dire en ayant une alimentation sur le fil de données.

Etape 2: ajouter le paramètre "dtoverlay=w1-gpio" à la fin du fichier "/boot/config.txt".

sudo emacs /boot/config.txt


Vous pouvez supprimer l'option gpiopin=4. Cette option permet de modifier la broche par défaut correspondant au bus 1-wire. Ici cela ne sert à rien car la valeur 4 est la valeur par défaut. Mais si vous souhaitez utiliser une autre broche que GPIO 4 comme broche DATA du bus 1-wire, c'est ici qu'il vous faudra modifier cette valeur. 

Après chacune de ces modification n'oubliez pas de redémarrer le Raspberry.

2.4 Lecture de la température


Après tous nos efforts nous touchons enfin au but! Nous avons galéré pour apprendre, comprendre, souder, câbler, connecter, configurer ... Nous avons branché, débranché, crié, pleuré, sauté de joie ... Nous avons passé des heures à bichonner notre magnifique Raspberry pour lui offrir en cette période de Noel, le plus beau des cadeaux: non pas seulement la possibilité de mesurer la température, mais surtout une nouvelle compétence! Celle de devenir le maître d'autant d'esclave 1-wire que nous pourrons lui offrir. Nous avons fait de lui un MAITRE! Champagne!
- Oui mais au fait, maintenant qu'on a connecté notre DS18B20, comment on lit la température?
- Ha oui je m'emballe un peu vite c'est vrai. En fait il y a deux possibilités. Je vous explique. 

2.4.1 Dans un fichier

Pour faire simple, sous linux, nous savons tous que tout n'est que fichier. Et bien cette règle ne sera pas démentie avec les composants esclaves 1-wire. Lorsque le bus 1-wire va être créé, les équipements qui y sont connectés vont être identifiés par leur numéro de série. Suite à cette identification, un répertoire portant comme nom l'identifiant va être créé. Si vous vous souvenez de ce que nous avions dit, chaque équipement dispose d'un identifiant unique sur 6 octets précédé d'un octet désignant sa famille d'appartenance. La famille du DS18B20 étant 28h (le h signifiant qu'il s'agit d'un nombre hexadécimal). Ces répertoires se trouvent sous: 
/sys/bus/w1/devices

Si je liste ce que contient ce répertoire je vois:


Je ne parlerai pas du répertoire "w1_bus_master1". Mais on distingue bien la présence d'un fichier dont le nom commence par "28" et qui ensuite est composé d'un numéro étant la suite de 6 octets. La présence de ce fichier indique que notre sonde est bien reconnue sur le bus. 
Il faut ensuite aller dans ce répertoire et regarder ce que l'on trouve dans le fichier w1_slave:

cat /sys/bus/w1/devices/28-011914336f1f/w1_slave


Ce fichier est constitué de deux lignes. La première indique que la mémoire de la sonde DS18B20 a été lue et que le CRC est valide. La seconde donne la température relevée. Comme vous pouvez le constater, cette température est en millièmes de degrés. Il faudra donc diviser par 1000 pour avoir une température en degrés. Ici nous voyons t=19250. Ce qui signifie qu'il fait 19,25°C. 

Il sera assez facile de réaliser un programme ou un script qui aille chercher la température dans ce fichier pour l'afficher de manière plus explicite ou réaliser des traitements dessus (envois, log, ...).

Pour ceux d'entre vous qui se demandent ce que signifient la suite de nombres hexadécimaux qui se trouvent en début de chaque ligne, j'avoue moi aussi m'être posé la question. Un jardinier aime creuser et comprendre ce qu'il récolte. Il s'agit tout simplement du contenu de la mémoire RAM de la sonde. Cette dernière contient 9 octets. La température est codée sur les deux premiers. Je vous ai fait un tableau qui montre comment est constituée cette mémoire. 

Structure mémoire RAM d'une sonde DS18B20

2.4.2 Suivi dans domoticz

La deuxième méthode pour suivre la température remontée par le sonde DS18B20 consiste à l'associer à un capteur Domoticz. Et cela va se réaliser très simplement. Bien entendu je suppose que le serveur Domoticz tourne sous le même Raspberry PI que celui sur lequel nous avons installé le bus 1-wire et connecté la sonde. 

Etape 1: Déclarer le bus 1-wire comme nouveau Matériel.


Ici aucune difficulté spécifique. Il vous suffit simplement d'ajouter un équipement 1-wire. Vous lui donnez un nom (ici 1W), le type (1-Wire (System) ), vous laissez les autres valeurs par défaut mais effacez le fichier qui se trouve dans "OWFS Path", sinon cela ne fonctionnera pas. Finissez en cliquant sur <Ajouter>.

Etape 2: Ajoutez la sonde comme nouveau dispositif


Une fois le bus 1-wire déclaré, en allant dans l'onglet "Dispositifs" vous devriez voir tous les équipements 1-wire raccordés au bus. Il ne vous restera plus qu'a cliquer sur la petite flèche verte pour l'ajouter comme un dispositif. Donnez lui un nom (ici 1WRPI) et vous le retrouverez dans la liste de vos capteurs de température dans l'onglet <Température>. 


Maintenant nous avons mérité notre coupe de champagne et avec les sondes étanches nous allons même pouvoir en vérifier la température. 









3. Conclusion


Joyeux Noel mon cher Raspberry PI ... et joyeux Noel à tous! 
J'espère que l'autre pote âgé passera chez vous avec sa hotte pleine de cadeaux. 

3.1 Liens utiles

Vous trouverez ci-dessous quelques sites qui m'ont bien aidé pour réaliser cet article. Je remercie chacun des auteurs d'avoir apporté leur petite pierre.

Le carnet du Maker présente la sonde DS18B20 sur un Arduino:
https://www.carnetdumaker.net/articles/mesurer-une-temperature-avec-un-capteur-1-wire-ds18b20-et-une-carte-arduino-genuino/

Le Datasheet DS18B20 est un incontournable:
https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Framboise 314 présente la même chose que moi mais sous une forme différente:
https://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/

Tout sur 1-wire et des infos sur la résistance de pull-up page 6:
http://dutta.csc.ncsu.edu/csc453_spring16/wrap/1-Wire-Design%20Guide%20v1.0.pdf

Le wikipédia:
https://fr.wikipedia.org/wiki/1-Wire

Pour tout savoir sur le protocole 1-wire:
https://www.planete-domotique.com/blog/2009/06/20/le-bus-1-wire/

Document technique pour tout savoir:
http://daniel.menesplier.free.fr/Doc/BUS%201%20WIRE.pdf

Site générique sur 1-wire:
http://so-domotic.fr/2016/03/29/le-protocole-et-le-bus-1wire/

3.2 Soutenez la BlogoCulture 

Le plus simplement du monde, si vous avez un achat à faire sur Amazon, accédez au site à partir de ce lien (que vous pouvez ajouter dans vos favoris)https://amzn.to/2nbe4sm



Retrouvez la Framboise au Potager sur Facebook dans le groupe "Culture Domotique".


Merci

Commentaires

  1. Félicitations pour cet article plus que complet!!!
    Je suis sous Jeedom mais le principe doit être tout à fait similaire.

    RépondreSupprimer
  2. Merci pour cet article, simple et claire.

    RépondreSupprimer
  3. Bonjour, merci pour cet article détaillé et très claire.
    Pourrait-on envisager que le raspberry portant la sonde et celui intégrant domoticz soient différents?
    Si oui comment récupérer les données du raspberry de capture (porteur de la sonde) pour les transférer au raspberry hébergant Domoticz?
    Merci

    RépondreSupprimer
  4. Bonjour,
    Merci pour cet article qui m'a permis de mettre en service 1 sonde 1-wire DS18B20 sur raspberry/domoticz.
    Elle est bien reconnue et je reçois les données mais je sèche complètement sur le câblage d'une 2ème sonde, d'une troisième ... La 2ème pour essai n'est pas retrouvée sur Domoticz.
    J'imagine une erreur dans le câblage que j'ai fait "en parallèle" sur la première sonde post la résistance.
    Merci si vous pouvez m'aider.
    Bien à vous et bon début d'année.
    Arnaud

    RépondreSupprimer

Enregistrer un commentaire