Raspberry - Sonde DS18B20 - Température
la sonde DS18B20
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
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
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
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
identification de la sonde DS18B20
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
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é
Contenu du fichier index.php
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
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)