DS18B20 sur Raspberry

 

Introduction

Encore un article sur le DS18B20. Mais il est nécessaire, car il y a quelques modifications qui font que:

  • Votre sonde DS18B20 ne sera pas visible,
  • Votre sonde DS18B20 ne sera pas reconnue,
  • Votre sonde DS18B20 ne répond pas !

Ou pire, que vous ayez peur d'avoir crâmé votre sonde ou le GPIO du raspberry !

 

Le DS18B20

Il s'agit d'une sonde numérique mesurant la température.

Température de -55°C à +125°C (±0.5°C entre -10°C et +85°C).

Il fonctionne suivant une architecture 1-wire:

Il s'agit d'un protocole basé sur un bus (sur 1 fil) avec un maître (ici raspberry) contrôlant le bus et ordonnant ou lisant des informations provenant d'esclaves (des sondes DS18B20 dans notre cas).

Des esclaves, ce qui signifie qu'il sera possible de brancher plusieurs sondes sur le même GPIO !

Cette sonde se présente sous différentes formes:

sondes

Les plus fréquements utilisées pour un raspberry étant celle ressemblant à:

  • bs1un transistor (en fait, rien à voir avec un transistor, puisqu'il s'agit bien d'une sonde, mais dans un boitier TO-92, d'où la confusion possible).
  • ds2La sonde protégée de l'humidité, idéale en extérieur par exemple.

 

Pour plus de détails:

 

Montage électrique sur Raspberry

Il faut:

  • une sonde DB18B20
  • une résistance de 4,7kOhm
  • du fil et un fer à souder ou une platine d'expérimentation (breadboard) 400 Points sans soudure devrait suffir si vous n'avez pas de fer pour faire des tests ...
  • un raspberry !

L'installation:

  • Brancher le 3.3V sur la borne 3 du DS18B20 (fil rouge !)
  • Brancher un GPIO (exemple le GPIO n°4, soit le pin n°7 sur raspberry Pi2 et Pi3 par exemple) sur la borne 2 du DS18B20. Note, il semble qu'il y est des pb. avec l'utilisation du GPIO4 pour la sonde et d'une camera Raspberry. Il serait donc préférable d'en utiliser un autre si vous avez une caméra ou envisagez d'en installer une...
  • La borne 1 du DS18B20 retourne sur le ground du raspberry
  • La résistance est branchée entre le 3,3Volt (récupérable sur la borne 3 du DS18B20 ou depuis la ligne + du breadboard) et la borne 2 du DS18B20.

Attention:Avant d'installer votre sonde, débranchez votre Raspberry Pi (y compris la RJ45, où du courant passe même si l'appareil est débranché du secteur).

shéma

Montage

 

AttentionN'inversez pas les branchements, vous pourriez crâmer votre sonde !

1

NoteIl sera possible de brancher plusieurs sondes sur le même GPIO:

2

Configuration

/boot/config.txt

Tapez su pour passer en root de façon permanente. Cela vous évitera de devoir taper sudo à chaque fois !

cd /boot

nano config.txt

et ajoutez à la fin du fichier

dtoverlay=w1-gpio,gpiopin=n°GPIO utilisé pour votre sonde

Ex. dtoverlay=w1-gpio,gpiopin=4

NoteCtrl+o pour sauver le fichier, ctrl+x pour quitter (il vous demandera de sauver si nécessaire).

NoteC'est la ligne qui est rarement indiquée dans les montages qui va vous permettre de faire fonctionner cette (ces) sonde(s) sur votre raspberry !

 

Des modules

Dans /etc/modules ajoutez les modules w1-gpio et w1-therm.

Pour ne pas avoir à rebooter, tapez:

modprobe w1-therm
modprobe w1-gpio

 

Récupération des lectures

Comme tout est géré comme un simple périphérique, il n'y a plus grand chose à faire. Il suffit d'aller dans le répertoire /sys/bus/w1/devices

cd /sys/bus/w1/devices

Là, devrait se trouver autant de répertoires (en fait des liens) commençant par 28- que vous avez branché de sondes.

root@raspberrypi:/sys/bus/w1/devices# ls -la 28-*
lrwxrwxrwx 1 root root 0 janv. 28 17:42 28-031661d302ff -> ../../../devices/w1_bus_master1/28-031661d302ff
lrwxrwxrwx 1 root root 0 janv. 28 17:42 28-0316624c69ff -> ../../../devices/w1_bus_master1/28-0316624c69ff

Ici, 2 sondes...

28 étant le type de la sonde ds18b20, le reste étant le n° de la sonde (un n° unique par sonde un peu comme une adresse mac pour une carte réseau).

Dans ces répertoires, se trouvent entre autre un fichier w1-slave

root@raspberrypi:/sys/bus/w1/devices/28-031661d302ff# ls -la
total 0
drwxr-xr-x 3 root root    0 janv. 28 17:41 .  
drwxr-xr-x 5 root root    0 janv. 28 17:41 ..  
lrwxrwxrwx 1 root root    0 janv. 28 19:10 driver -> ../../../bus/w1/drivers/w1_slave_driver  
-r--r--r-- 1 root root 4096 janv. 28 19:10 id  
-r--r--r-- 1 root root 4096 janv. 28 19:10 name  
drwxr-xr-x 2 root root    0 janv. 28 19:10 power  
lrwxrwxrwx 1 root root    0 janv. 28 19:10 subsystem -> ../../../bus/w1  
-rw-r--r-- 1 root root 4096 janv. 28 17:41 uevent  
-r--r--r-- 1 root root 4096 janv. 28 19:10 w1_slave

cat w1_slave

40 01 4b 46 7f ff 0c 10 bc : crc=bc YES  
40 01 4b 46 7f ff 0c 10 bc t=20000

Vous pourrez ainsi trouver surtout la température (x1000) en degré celsus.

Camera PI

Il semble que l'utilisation de la sonde sur le GPIO 4 provoque des conflits d'accès sur la caméra (elle est inaccessible).

Pb. de partage du GPIO 4 avec un périphérique 1-Wire

La première solution serait donc d'utiliser un autre GPIO pour la sonde...

Sinon, une solution serait d'ouvrir en root /etc/modules:

Et d'ajouter les lignes suivantes

sudo nano /etc/modules

Puis blacklister les modules dans /etc/modprobe.d/raspi-blacklist.conf:

Evidemment, cette solution posera quelques problèmes si vous faîtes partie des gens qui ont besoin de ces modules...