Bon une fois mon projet vidéo terminé (cf poste précédent), je voulais utiliser un de mes Raspberry pour collecter des informations sur ma maison. Je souhaite à terme l'utiliser pour suivre ma consommation d'energie, d'eau et de gaz. De même, un ami m'a suggéré qu'il souhaitait contrôler la gestion de la température de sa maison. Après moultes recherches, j'ai commencé par investir dans des toutes petites sondes de température DS18B20. Ces sondes existent sous deux formes, soit brute, soit waterproof...
Le montage sur les GPIO est très simple. Il y a trois pattes, il faut relier la première à la masse, la troisième à l'alimentation 3V3 du raspberry et la broche du milieu sur un des GPIO ici le 4. De même il faut mettre une résistance de 4.7K ohm.
Pour recevoir des informations des GPIO, il faut les activer avec les commandes :
>sudo modprobe w1-gpio
>sudo modprobe w1-therm
Afin que la lecture des GPIO soit lancée au démarrage, j'ai rajouté ces lignes, via vi dans le fichier /etc/modules :
>w1-gpio
>w1-therm
Dès cet instant, vous pouvez lire les informations de la sonde via la commande :
>cat /sys/bus/w1/devices/numero_de_la_sonde/w1_slave
Ce qui vous donne :
>8f 01 4b 46 7f ff 01 10 14 : crc=14 YES
>8f 01 4b 46 7f ff 01 10 14 t=24937
Ce qui signifie qu'il fait une température de 24,937°C.
On a plus qu'a utiliser le PHP pour lire cette valeur et utiliser une base de données MySql et une tâche cron pour l'enregistrer périodiquement. J'ai donc dans un premier temps mis à jour ma distrib (Rasbian) :
>sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
Puis j'ai installé les paquets apache et php pour obtenir un serveur web et pouvoir afficher les valeurs obtenues :
>sudo apt-get install apache2 php5 php5-mysql
Concernant la base de données, j'ai préféré l'installer sur mon Synology. D'une part, parce que les cartes mémoires du Raspberry supportent mal les écritures à répétition, d'autre part, pour pouvoir par la suite centraliser d'autres données telles que mes consomations ou d'autres sondes de température ...
Une fois l'installation faite d'apache et de php, j'ai envoyé le fichier temp.php suivant sur le serveur Web en utilisant le code de Daniel Stancu pour la mise en forme :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Température</title>
<link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />
<?php
if (!defined("THERMOMETER_SENSOR_PATH")) define("THERMOMETER_SENSOR_PATH", "/sys/bus/w1/devices/28-00000607dd50/w1_slave");
// On ouvre le fichier
$thermometer = fopen(THERMOMETER_SENSOR_PATH, "r");
// On récupère le contenu dans une variable
$thermometerReadings = fread($thermometer, filesize(THERMOMETER_SENSOR_PATH));
// on ferme le fichier
fclose($thermometer);
// Puis on récupère la valeur de la température
preg_match("/t=(.+)/", preg_split("/\n/", $thermometerReadings)[1], $matches);
//On prépare l'affichage en récupèrant la valeur avant et les deux chiffres arrondis après la virgule
$temperature = $matches[1] / 1000;
$temperature = round($temperature, 1);
$temp = explode(".", $temperature);
?>
</head>
<body>
<div class="container">
<div class="de">
<div class="den">
<div class="dene">
<div class="denem">
<div class="deneme">
<?php echo $temp[0]; ?><span>.<?php echo $temp[1]; ?></span><strong>°</strong>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
- Jean-Bernard CONSTANT's blog
- Log in to post comments