Vous êtes ici

Raspberry : Capteur de température complet (de l'obtention à l'exploitation des données)

Nous allons voir dans cet article comment construire un capteur de température complet a l'aide d'un capteur de température DS18B20 et d'une Raspberry. L'objectif est donc d'avoir un système autonome capable de relever, stocker et afficher un graphique de la température, interrogeable facilement depuis une interface web

 

  • Prèrequis :

 

- Raspberry configuré sous raspbian avec php5 - php5-gd - mysql - apache2 d'installé

- Capteur de température DS18B20

- Une résistance de 4,7KOhms

 

  • Branchement de la sonde DS18B20 sur la raspberry :

 

 

Vu que la sonde ds18b20 est une sonde qui communique de manière série, il est possible d'en cabler plusieurs en parallèle :

 

 

  • Configuration Raspbian :

 

1) sudo vi /boot/config.txt

 

2) ajouter la ligne : dtoverlay=w1-gpio,gpiopin=4

 

3) Reboot

 

4) cat /sys/bus/w1/devices/28-0314684e30ff/w1_slave

 

61 01 55 00 7f ff 0c 10 6a : crc=6a YES

61 01 55 00 7f ff 0c 10 6a t=22062

 

La temperature est donc de 22,062 degrés C

 

 

  • Récupération des températures en bases de données 

 

1) Creation de la base de données :

 

CREATE DATABASE temperature ;

 

use temperature

 

CREATE TABLE temperature1 ( time INT(40) NOT NULL, temp DECIMAL(5,2) NOT NULL, PRIMARY KEY (time) );

 

2) Code PHP qui permet de relever la temperature depuis la sonde et de l'inserer dans la base de données : 

 

<?php

#Déclaration variable
$i=0;
$temp_tab = array();
$file_temp = fopen('/sys/bus/w1/devices/28-0314684e30ff/w1_slave', 'r');
$timestamp = time();

#Obtention de la temperature
while ($i < 2)
{
        $temp_line=fgets($file_temp);
        $temp_tab[]=$temp_line;
        $i++;
}

$temp_int = substr($temp_tab[1], -6, -4);
$temp_dec = substr($temp_tab[1],-4, -1);

$temp_final=$temp_int. ".".$temp_dec;

print $temp_final;

fclose($file_temp);

#Connection mysql
$link = mysqli_connect("localhost","root","Pauline00","temperatures") or die("Error");

$query = "INSERT INTO temperature1 (time,temp) VALUES('$timestamp','$temp_final')";

$result = mysqli_query($link, $query);

print $result;

?>

 

3) Ajouter l'exécution du script a la Crontab : crontab -l

 

*/5 * * * * php /home/pi/temperature/temp.php

 

 

  • Exploitation des données à l’aide d’un graphique :

 

1) Installation librairie pChart

 

Il suffit de télécharger les sources ici et de les décompresser dans votre répertoire web apache : http://www.pchart.net/download

 

2) Code PHP permettant d'afficher le graphique de la température :

 

<?php
 /* CAT:Spline chart */

 /* pChart library inclusions */
 include("pChart/class/pData.class.php");
 include("pChart/class/pDraw.class.php");
 include("pChart/class/pImage.class.php");

#Connection et requete mysql

$hours =  time() - 86400 ;
$link = mysqli_connect("localhost","root","Pauline00","temperatures") or die("Error");
$query = "SELECT time,temp FROM temperature1 WHERE time > $hours ;";
$result = mysqli_query($link, $query);

 /* Create and populate the pData object */
 $MyData = new pData();
 while($row = mysqli_fetch_array($result))
 {
 $MyData->addPoints($row["temp"],"Temperature 1");
 $MyData->setSerieWeight("Temperature 1",2);
 $MyData->setAxisName(0,"Temperatures");
 $MyData->addPoints(date('H:i', $row["time"]),"Labels");
 $MyData->setSerieDescription("Labels","Heures");
 $MyData->setAbscissa("Labels");
 }

 /* Create the pChart object */
 $myPicture = new pImage(700,230,$MyData);

 /* Turn of Antialiasing */
 $myPicture->Antialias = FALSE;

 /* Draw a background */
 $Settings = array("R"=>190, "G"=>213, "B"=>107, "Dash"=>1, "DashR"=>210, "DashG"=>223, "DashB"=>127);
 $myPicture->drawFilledRectangle(0,0,700,230,$Settings);

 /* Add a border to the picture */
 $myPicture->drawRectangle(0,0,699,229,array("R"=>0,"G"=>0,"B"=>0));

 /* Write the chart title */
 $myPicture->setFontProperties(array("FontName"=>"pChart/fonts/Forgotte.ttf","FontSize"=>11));
 $myPicture->drawText(150,35,"Temperatures",array("FontSize"=>20,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));

 /* Set the default font */
 $myPicture->setFontProperties(array("FontName"=>"pChart/fonts/pf_arma_five.ttf","FontSize"=>6));

/* Draw the scale */
 $scaleSettings = array("XMargin"=>10,"YMargin"=>10,"Floating"=>TRUE,"GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
 $myPicture->drawScale($scaleSettings);

 /* Turn on Antialiasing */
 $myPicture->Antialias = TRUE;

 /* Draw the line chart */
 $myPicture->drawSplineChart();
 $myPicture->drawPlotChart(array("PlotBorder"=>TRUE,"BorderSize"=>1,"Surrounding"=>-60,"BorderAlpha"=>80));

 /* Write the chart legend */
 $myPicture->drawLegend(540,20,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));

 /* Render the picture (choose the best way) */
 $myPicture->autoOutput("pictures/example.drawSplineChart.simple.png");

?>

 

3) Résultat :

 

www.le-gas.fr : Le guide de l'admin Systeme