Vous êtes ici

Raspberry et domotique : lecture d'une sonde de température 1ére partie

Afficher la température avec un Rspberry Pi

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...

Sonde de température

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.

Schéma de connexion de la sonde

Montage sonde sur le Raspberry Pi

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>&deg;</strong>
                
              </div>
            </div>
          </div>
        </div>
    </div>
        
</div>
</body>

</html>