[article] ajout de l'article sur le capteur de température et la raspi

This commit is contained in:
kleph 2015-05-19 01:20:35 +02:00
parent f7d3b86083
commit 03631e8d2d
5 changed files with 78 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

78
content/raspi_therm.mdown Normal file
View file

@ -0,0 +1,78 @@
Title: Capteur de température sur raspi
Author: kleph
Email: kleph@kleph.info
Category: Blog
Date: 2015/05/18
Tags: Linux, Arm, Embedded
Lang: fr
Un article parlant du branchement d'un capteur de température en 1-wire sur une raspberry. L'exemple est pour l'instant réalisé sur une raspberry 1 modèle B+.
Je me suis beaucoup inspiré du site [franboise314][1], avec un ajout de configuration pour le noyau 3.18+ et très bientôt comment faire un plugin collectd pour remonter ces informations sur le réseau.
# Matériel
- une sonde DS18B20
- une nappe IDE (40 fils) pour se brancher sur le port GPIO de la raspi
- une [raspberry pi][4]
## Images
Le montage est très bien décrit sur le site de [framboise314][1], je ne le décrirais donc pas à nouveau.
J'ai choisi la version "standard" à 3 fils.
Voici une image de la raspi : [![raspi](images/therm_raspi_small.jpg)][5]
et une de la breadboard : [![breadboard](images/therm_raspi_bread_small.jpg)][6]
# Logiciel
## Ajout de l'overlay (3.18+)
Dans le fichier `/boot/config.txt`, il faut ajouter le chargement d'un overlay pour le DTB. J'en parle très succintement [ici][2] avec un lien vers [devicetree.org][3], c'est une description du matériel qui permet au noyau d'activer et de configurer certaines parties de la carte.
Il me semble qu'avant le 3.18 cette description était statique pour la raspi.
```
dtoverlay=w1-gpio
```
Une version `-pullup` est aussi disponible, mais n'est nécessaire que si on branche le capteur en mode parasite (la version 2 fils, en reliant la patte d'alimentation avec la patte data)
Ensuite dans `/etc/modules`, on rajoute le chargement des pilotes 1-wire :
```
w1-gpio
w1-therm
```
Comme pour la DTB, je n'ai pas activé l'option `pullup=1`.
# Lecture de la valeur
Si le dispositif fonctionne bien et que les pilotes sont chargés, un fichier est créé dans le répertoire suivant `/sys/bus/w1/devices`. Ce fichier porte le nom de l'UUID de la sonde, chez moi c'est `28-001451521dff`.
En lisant ce fichier, on obtient sur le CRC de la lecture sur la première ligne qui permet de déterminer si la lecture de la valeur et sa transmission au pilote a fonctionné.
Voici un exemple d'une sortie en erreur :
```
cat : /sys/bus/w1/devices/28-001451521dff
00 00 00 00 00 00 00 00 00 : crc=00 NO
00 00 00 00 00 00 00 00 00 t=0
```
On retrouve alors dans les logs un message :
```
w1_slave_driver 28-001451521dff: Read failed CRC check
```
J'utilisais alors une nappe IDE de longueur classique, environ 60 cm, cela semble être trop.
En utilisant une nappe plus courte (5cm, je ne sais plus du tout dans quelle machine j'ai récupéré ça), j'ai obtenu une sortie correcte :
```
78 01 55 00 7f ff 0c 10 57 : crc=57 YES
78 01 55 00 7f ff 0c 10 57 t=23500
```
La deuxième ligne donne la température en millième de °C.
# Plugin collectd
TODO
[1]: http://www.framboise314.fr/mesure-de-temperature-1-wire-ds18b20-avec-le-raspberry-pi/
[2]: ../Home%20router%20with%20sama5d35.html#chargeur-damorcage
[3]: http://www.devicetree.org/Main_Page
[4]: https://www.raspberrypi.org/
[5]: images/therm_raspi.jpg
[6]: images/therm_raspi_bread.jpg