Raspberry - Sonde DS18B20 - Température

ds18b20


Comment lire et afficher une température dans une page Web avec un Raspberry ?


Nous avons besoin

  • d'un Raspberry
  • d'une sonde DS18B20


Vous trouverez cette sonde en achat sur Internet pour quelques Euros 


la sonde DS18B20

resistance4700


Tension d’alimentation: +3v à +5,5v 
Température: -55°C à +125°C

La sonde DS18B20 est une sonde de température qui utilise le protocole de communication 1-Wire.

La sonde DS18B20 délivre des informations numériques.

Le bus 1-Wire est capable de traduire ces informations numériques en température.

Le Raspberry possède un bus 1-Wire capable de lire ces informations.

Il va nous falloir une résistance de 4,7 kΩ soit 4 700 Ω pour brancher votre sonde au GPIO du Raspberry Pi 


Cablage de sonde DS18B20

cablageDS18b20


Réalisons le cablage ci-contre

  • Le fil    rouge  relié au   +Vcc (3,3v) 
  • Le fil    noir   relié à la   masse 
  • Le fil    jaune   relié au   GPIO04 


Ajout d’une résistance de 4700Ω entre les fils   rouge  et   jaune 


Nous alimenterons la sonde DS18B20 en +Vcc = 3,3v.


Pourquoi avec le Raspberry, nous n’utilisons pas le +Vcc = 5v pour alimenter la sonde DS18B20 ? 
Si nous avons un soucis avec la sonde DS18B20, nous n’avons aucune certitude que le +Vcc ne se retrouve pas sur le GPIO04.
Les GPIO n’acceptent que +3,3v en entrée.
Donc si l’on injecte du +5v sur le GPIO04, on risque de détruire le Raspberry.


Installation du serveur Apache & Php

apache

Pour afficher la température dans un navigateur, nous utiliserons un serveur Apache et Php


Mise à jour de Raspbian

  • sudo apt-get update
  • sudo apt-get upgrade -y


Installation de Apache & Php

  • sudo apt-get install apache2 -y
  • sudo apt-get install php -y


Modification des droits de Apache

  • sudo chown -R pi:www-data /var/www/html/
  • sudo chmod -R 770 /var/www/html/


GPIO4 - Bus 1-wire

bus-maitre-slave
 La sonde DS18B20 utilise le bus 1-Wire 


Par défaut, c’est la broche GPIO 04 qui est activée pour le  bus 1-Wire .

Ceci peut-être facilement modifié en changeant la dernière ligne du fichier /boot/config.txt
 dtoverlay=w1-gpio,gpiopin=x en remplaçant le numéro de la GPIO souhaitée


Activation du bus 1-wire

  • bus1wire-console
  • 1wire-gui


Nous devons activer le bus 1-wire du Raspberry

Mode console

  • sudo raspi-config
  •   5 Interfacing Options
  •   P7 1-Wire
  •   [Oui] activer


Mode GUI

  • Préférences / Configuration du Raspberry Pi
  • Onglet "Interfaces"
  • Activer le 1-Wire


Puis
Rebooter le Raspberry

identification de la sonde DS18B20

28xxxxxxxxx


Nous devons identifier la sonde DS18B20

  • sudo modprobe w1-gpio
  • sudo modprobe w1-therm


Les deux commandes chargent les pilotes du protocole 1-Wire et du capteur de température connecté à la broche GPIO 4 par défaut. 
On se déplace dans le répertoire du périphérique 1-Wire et on affiche les périphériques afin de s’assurer que notre capteur de température est bien reconnu. 

  • cd /sys/bus/w1/devices
  • ls

Le capteur doit apparaître avec un numéro composé de lettres et de chiffres

La sonde est identifiée avec le numéro 28-xxxxxxxxxxx


Affichage de la température

cat-w1-slave


Vous devez alors accéder au capteur avec la commande cd, en n’oubliant pas de remplacer le numéro de série par celui de votre propre capteur

  • cd 28- xxxxxxxxxxx


Les données provenant du capteur sont périodiquement écrites dans le fichier w1_slave. Nous pouvons utiliser la commande «cat» pour lire son contenu

  • cat w1_slave


On obtient alors deux lignes de texte, avec en sortie «t» qui indique la température en millième de degrés Celsius 

  • 47 01 55 05 7f 7e 81 66 c9 : crc=c9 YES
  • 47 01 55 05 7f 7e 81 66 c9 t=20437         # t=20437 = la température en millième de degré


Affichage de la température dans une page web

temperature


Pour afficher cette température nous allons simplement modifier le fichier index.php

  • sudo nano /var/www/html/index.php


Contenu du fichier index.php

temp-index


Contenu du fichier index.php     

Remplacer le numéro de la sonde par celui de votre sonde


</center></span>
<meta name="viewport" content="width=device-width, user-scalable=no">
<center><span style="font-size:65px;">
<?php
    // Lecture du fichier w1_slave
    $file = "/sys/bus/w1/devices/28-xxxxxxxxxxx/w1_slave";  # numéro de la sonde
    // Lecture ligne par ligne
    $lines = file($file);
    // Récupération de la 2eme ligne
    $temp = explode(‘=’, $lines[1]);
    // Formatage de la température
    $temp = number_format($temp[1]/1000,2, ’.’, ’’);
    // Affichage de la température
    echo $temp;echo" °C";
?>
</center></span>
  # Attention: ne pas se tromper avec le caractère ‘ (chiffre 4) 


afficher la température a intervalle régulier

f5


Lorsque l’on affiche une température, il est souhaitable que le fichier index.php affiche la température à intervalle régulier, afin d’afficher la température à l’instant t

Lorsque l’on affiche le fichier index.php, la température affichée ne changera que si l’on effectue un rafraîchissement du navigateur avec la touche F5.

Nous allons modifier le fichier index.php, pour qu’il exécute un rafraîchissement automatiquement à intervalle régulier.
Ajouter au début du fichier index.php les lignes ci-dessous 

  • <head>
  • <meta http-equiv="refresh" content="2" />  # content="2" = 2 secondes
  • </head>


Explication:

  • <meta http-equiv="refresh" content="x;y" />

x = nombre de seconde avant rafraîchissement
y = URL de la page (pas besoin si tu reste sur la même page, et donc pas de ";" après x) 


Télécharger le fichier index.php