Quantcast
Channel: Code 4 Pi
Viewing all articles
Browse latest Browse all 25

Suivi de température sur le Raspberry Pi (sonde 1-wire DS18B20)

$
0
0

Depuis la sortie du Raspberry Pi, nombre de tutoriels concernant le branchement de sonde DS18B20 sur les ports GPIO via le bus 1-wire ont vu le jour. Néanmoins, la plupart se contentent seulement de vous montrer comment brancher la sonde de température et comment récupérer la valeur mesurée en ligne de commande. Afin de pousser un peu plus le concept j’ai décidé de réaliser une application facilement configurable qui vous permettra de rapidement installer un serveur web où vous pourrez, à l’aide de graphique, avoir un suivi de température d’une ou plusieurs sondes branchées sur un Raspberry Pi.

Projet PiTemp

Un aperçu de l’interface web du projet PiTemp

Montage électronique

Matériel nécessaire :

  • Une sonde de température DS18B20 1-wire (entre 1 à 6 € selon le modèle)
  • Une résistance de 4.7K Ω
  • Quelques câbles

Branchement de la sonde :

Pour notre montage, nous allons utiliser des sondes DS18B20 qui utilisent le bus 1-wire. La résolution de cette sonde est ajustable (de 9 à 12 bits) et la plage de mesure est de -55°C à 125°C. Le bus 1-wire est basé sur la notion de maître / esclaves. Le maître (ici le Raspberry Pi) interroge les différents esclaves à travers le bus ou leur envoi des ordres. Il est donc possible de brancher plusieurs sondes en parallèle sur notre bus (via trois conducteurs : masse, alimentation & données). De plus, ce type de sonde possède un mode parasite qui lui permet de ne pas relier la broche d’alimentation au Raspberry Pi (en la reliant directement à la masse ce qui permet d’économiser un fil).

Concernant les différentes possibilités de branchement de la sonde et le fonctionnement détaillé du bus 1-wire, je vous laisse faire vos propres recherches (ce n’est pas en soi l’intérêt de cet article). Vous trouverez ci-dessus un exemple de schéma de branchement :

Schéma branchement DS18B20

Schéma branchement sonde DS18B20

Pour résumer nous avons branché l’alimentation du capteur sur la pin 3.3V du Raspberry Pi, la masse du capteur sur la pin de masse et enfin la patte de donnée de la sonde à la pin GPIO 4. La résistance de 4.7K Ω est alors placée entre l’alimentation et le fil de données. Attention au sens de branchement de la sonde. Une fois le Raspberry Pi alimenté, si la sonde chauffe (par expérience cela peut être assez chaud) c’est qu’il y a un problème. Couper alors immédiatement l’alimentation du Raspberry afin d’éviter de griller définitivement le capteur.

DS18B20 schéma

Sonde DS18B20

Configuration du système

⚠ Attention : La procédure décrite ci-dessous risque d’être différente des anciens tutoriels que vous pouvez trouver sur internet. Ceci est dû au système de Device Tree (plus d’informations à cette adresse) maintenant utilisé par défaut par le noyau Linux de Raspbian afin de gérer l’allocation de certaines ressources ainsi que le chargement de modules.

Afin d’activer le module 1-wire il vous suffit d’ouvrir et modifier le fichier config.txt :

sudo nano /boot/config.txt

Et d’y rajouter à la fin la ligne suivante :

dtoverlay=w1-gpio,gpiopin=4

Pour que les changements soient appliqués, il est nécessaire de redémarrer le Rpi :

sudo reboot

Ce fichier est contenu sur la partition de boot du Raspberry Pi qui est formaté en FAT 32. Vous pouvez donc modifier directement le fichier depuis votre ordinateur sous Windows par exemple, après avoir écrite votre image de système sur la carte SD.

Nous allons maintenant vérifier le bon fonctionnement du capteur de température. Pour cela rendez vous dans ce dossier :

/sys/bus/w1/devices
  et affichez la liste des fichiers et dossiers disponibles :

cd /sys/bus/w1/devices
ls

Normalement, chaque sonde 1-wire connectée au Rpi est répertoriée au sein de ce dossier par le biais d’un identifiant unique. Pour consulter la valeur de température d’une sonde, il vous suffit alors de vous rendre dans ce répertoire et d’afficher le contenu du fichier

w1_slave
 .

3b 01 55 00 7f ff 0c 10 db : crc=db YES
3b 01 55 00 7f ff 0c 10 db t=19687

Nous pouvons donc voir qu’à cet instant la température relevée par la sonde est de 19.687 °C.

Installation de l’outil de suivi

Node JS LogoL’outil de suivi est que j’ai développé utilise le langage Node JS (développement d’application en JavaScript côté serveur) couplé à une base de données RRD (Round-Robin Database) gérée par l’outil RRDTool. Ce dernier est notamment utilisé pour l’enregistrement de données cycliques ou chronologiques et la génération de graphique par de nombreux logiciels open source tel que Lighttpd (statistiques d’utilisation), Cacti ou Nagios.

RRDTool LogoConcernant le stockage des données via RRDTool, nous allons créer une DataSource de type GAUGE par sonde enregistrée. La valeur de chaque sonde sera lue toutes les 5 minutes. Nous allons alors générer trois archives RRA (Round Robin Archives) :

  • 1ère RRA : Toutes les valeurs de la journée actuelle (soit 288 valeurs, une toutes les 5 minutes)
  • 2ème RRA : La moyenne des valeurs sur une heure de la semaine (soit 168 valeurs, correspondant à la moyenne de 12 mesures)
  • 3ème RRA : La moyenne des valeurs sur une journée pour un an (soit 365 valeurs, correspondant à la moyenne de 288 mesures)

⚠ Attention : Le seul souci actuellement de ce système c’est qu’il n’est pas possible d’ajouter de DataSource (donc de sonde) à un fichier .rrd existant. Il vous faudra soit repartir sur un nouveau fichier, soit dupliquer les données manuellement avec un outil externe dans une nouvelle base de données qui aura été générée avec toutes les DataSources nécessaires.

Dans un premier temps il est nécessaire d’installer RRDTool (sans oublier de mettre à jour les paquets d’abord) :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install rrdtool librrd-dev

Nous allons ensuite installer Node JS. Nous n’allons pas utiliser notre gestionnaire de paquets habituel, car la version présente est généralement obsolète (et risque de nous poser des problèmes).

Si vous êtes sous Raspbian Jessie il vous suffit de taper ces commandes :

wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb

Si vous êtes sous Raspbian Wheezy :

Pour un Raspberry Pi premières versions :

wget https://nodejs.org/dist/v4.2.2/node-v4.2.2-linux-armv6l.tar.gz
tar -xvf node-v4.2.2-linux-armv6l.tar.gz
cd node-v4.2.2-linux-armv6l
sudo cp -R * /usr/local/

Pour un Raspberry Pi 2 :

wget https://nodejs.org/dist/v4.2.2/node-v4.2.2-linux-armv7l.tar.gz
tar -xvf node-v4.2.2-linux-armv7l.tar.gz
cd node-v4.2.2-linux-armv7l
sudo cp -R * /usr/local/

Vous pouvez maintenant vérifier que Node Js est bien installé à l’aide de la commande

node -v
  et
npm -v
.

La récupération des dépendances via NPM ne fonctionne pas parfois en HTTPS. Vous pouvez basculer en HTTP si jamais vous rencontrez des problèmes avec la commande

npm install
  :

sudo npm config set registry http://registry.npmjs.org/
npm config set registry http://registry.npmjs.org/

Il faut ensuite installer les différents modules Node JS nécessaires. Pour cela il suffit de lancer la commande :

sudo npm install -g pm2

PM2 est un outil Node JS permettant l’exécution de script Node JS en tant que daemon. Node-gyp va nous permettre de compiler le module node_rrd faisant la liaison entre notre script Node JS et l’outil RRDTool.

On clone maintenant le projet PiTemp (et le projet node_rrd) :

git clone https://github.com/Orion98MC/node_rrd.git
git clone https://github.com/code4pi/PiTemp.git

Il faut maintenant installer les dépendances du projet :

cd PiTemp/
npm install

Si vous rencontrez une erreur de ce type :

cc1plus: error: unrecognized command line option ‘-std=c++11’
 (notamment sous Raspbian Wheezy, sous Jessie pas de problèmes en principe) faites ceci :

cd ../node_rrd/
git checkout 5b73f3e
cd ../PiTemp/
npm install

Nous allons modifier la configuration du projet. Pour cela il faut éditer le fichier

config.js
  :

var config = module.exports = {};

config.http = {};
// Port utilisé pour l'interface web (Attention un port inférieur à 1024 nécessite de lancer le serveur avec les droits root)
config.http.port = 8080;

// Chemin ou sera enregistré le fichier RRD. Si le fichier n'existe pas, il sera créé
config.filename = 'PiTemp.rrd';

// Liste des sondes 1-wire
config.w1 = [{
  // ID de la sonde, sera utilisé pour identifié la datasource (j'utilise l'ID de la sonde dans mon cas)
  id: '28-0000054c2ec2',
  // Chemin complet permettant la récupération des données
  path: '/sys/bus/w1/devices/28-00042c32c1ff/w1_slave',
  // Nom de la sonde (qui sera affiché sur le graphique)
  name: 'Chambre',
  // Couleur de la ligne sur le graphique
  color: '#081D58'
}, 
  // On ajoute une deuxième sonde
  {
  id: '28-00042c32c1aa',
  path: '/sys/bus/w1/devices/28-00042c32c1aa/w1_slave',
  name: 'Salon',
  color: '#B1221C'
}];

module.exports = config;

Il ne nous reste plus qu’à lancer le serveur :

node server.js

Voilà maintenant vous pouvez accéder à l’interface web (http:\\ip_du_raspberry:port_choisi). Néanmoins il faudra alors attendre quelques minutes avant de voir des données s’afficher sur le graphique.

Une fois que vous vous êtes assuré que tout fonctionne bien, vous pouvez lancer le serveur en tant que daemon :

pm2 start server.js

Pour lancer l’outil au démarrage du Raspberry Pi utilisez cette commande :

sudo su -c "env PATH=$PATH:/usr/local/bin pm2 startup ubuntu -u pi --hp /home/pi"

(Cette commande vous est normalement indiquée si vous saisissez 

pm2 startup ubuntu
 avec l’utilisateur
pi
.)

Perspective d’amélioration

Ce projet n’est qu’une première ébauche de ce que pourrait donner un projet plus abouti. J’ai différentes pistes d’améliorations que je souhaiterai mettre en place si le temps me le permet :

  • Possibilité d’avoir plusieurs sondes sur plusieurs Raspberry Pi reliés en réseau. On aurait alors une architecture client/serveur avec un Raspberry Pi central chargé d’enregistrer les données, qui hébergerait le serveur web et d’autres Raspberry Pi qui enverraient les données de leurs sondes au serveur.
  • Ajout de sonde à la volée. En effet comme je l’expliquais plus haut, il n’est pas possible actuellement de rajouter une datasource au sein d’un fichier RRD existant sans passer par un outil externe.
  • Système d’authentification afin de sécuriser l’accès aux données depuis le web.

The post Suivi de température sur le Raspberry Pi (sonde 1-wire DS18B20) appeared first on Code 4 Pi.


Viewing all articles
Browse latest Browse all 25

Latest Images





Latest Images