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:
Les plus fréquements utilisées pour un raspberry étant celle ressemblant à:
-
un 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).
La sonde protégée de l'humidité, idéale en extérieur par exemple.
Pour plus de détails:
- Le descriptif en anglais de la sonde provenant de maxim integrated.
- l'excellent site http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/
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.
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).
N'inversez pas les branchements, vous pourriez crâmer votre sonde !
Il sera possible de brancher plusieurs sondes sur le même GPIO:
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
Ctrl+o pour sauver le fichier, ctrl+x pour quitter (il vous demandera de sauver si nécessaire).
C'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...