Progetto alternanza scuola-lavoro “Guardiani della costa”

Contest "Stazione meteo marina"

Classi: IV sez.B – V sez. I

Tutor: prof.ssa Maria Antonietta Baiamonte 

Docente: prof. Giuseppe Luigi Di Bella


 

 

Rilevazione dati di temperatura ed umidità

Il sistema Arduino per la rilevazione dei dati di temperatura ed umidità è quello raffigurato in foto. Essenzialmente è costituito da una scheda Arduino UNO, dal sensore DHT11 e dalla scheda Ethernet ENC28J60. Lo sketch elaborato utilizza le librerie di uso comune UIPEthernet.h e DHT.h, reperibili su GitHub. La lettura dei dati dal sensore, effettuata ogni ora, viene inviata ad un database MySQL residente su di un hosting Altervista. L’invio avviene instaurando una richiesta http ad un file .php, anch’esso residente sull’hosting di Altervista, che riceve i dati e li inserisce nel database MySQL. Attraverso le pagine del sito web dedicate (http://meteomarconi.altervista.org) è possibile estrarre i dati sotto forma di grafico o tabellare.

Il sistema è stato racchiuso all’interno di una scatola in pvc posizionata a parete sotto il cornicione della terrazza del plesso scolastico e collegato alla rele LAN dell’istituto con un cavo UTP Cat. 5E per esterni. Di seguito sono riportati i listati dello sketch e del files .php.

 

Schema di collegamento

 

 

Listato Sketch Arduino per caricamento dati DHT11 su database MySQL

 

#include <UIPEthernet.h> //libreria Ethernet

#include "DHT.h"                //libreria sensore temperatura/umidità

#define DHTPIN 2  

#define DHTTYPE DHT11   // DHT 11 

 

DHT dht(DHTPIN, DHTTYPE);

 

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                      

byte ip[] = { xxx, xxx, xxx, xxx };

byte dnServer[] = { 8, 8, 8, 8 };

byte gateway[] = { xxx, xxx, xxx, xxx };

byte subnet[] = { 255, 255, 0, 0 };

 

EthernetClient client;

char server[] = "meteomarconi.altervista.org";   // Indirizzo su Altervista

int  interval = 5000; // Intervallo tra in dump e l'altro

int t;

int u;

int var;

String data;

 

void setup() {

  Serial.begin(115200);

  //Ethernet.begin(mac);

  Ethernet.begin(mac, ip, dnServer, gateway, subnet);

  Serial.print("IP Address: ");

  Serial.println(Ethernet.localIP());

  Serial.println("");

  dht.begin();

  delay(1000);

            }

 

static void ReadDHT11()

{

  u = dht.readHumidity();

  t = dht.readTemperature();

}

 

void loop() {

    ReadDHT11();

    data = "t1=" + String(t) + "&um=" + String(u) ;

  // verifica connessione e ottiene OK su seriale

  if (client.connect(server, 80)==1) {

 

    Serial.println("connessione riuscita");

    Serial.println(client.connect(server, 80));

    // Lancia la richiesta HTTP

    client.print( "GET /xxxxxxx.php?"); //chiamata al file .php che esegue il caricamento sul database

    client.print( data);

    client.println( " HTTP/1.1");

    client.print( "Host: ");

    client.println(server);

    //client.println( "Connection: close" );

    //client.println("\r\n");

    client.println();

    delay (500);

    client.stop();

    Serial.println("dati trasmessi");

    Serial.println(data);

delay(3600000);

  }

  else {

    delay(1000);

    // Se connessione non riuscita...

    Serial.println("--> Connessione fallita !/n");

        }

 

  }

 

Nota: I dati contrassegnati con “xxxxxx” sono stati volutamente omessi

 

Listato file .php che riceve i dati da Arduino e li carica nel database MySQL

 

<?php

$conex = mysql_connect("xxxxxxxx","xxxxx","xxxxx");

 

if(!$conex){

    die("attenzione non è possibile connettersi al server <br />".mysql_error());

}

else{

echo ("Connesso con successo");

print ("Connesso con successo");}

 

$db = mysql_select_db("xxxxxxxx", $conex);

 

if(!$db){

    die("attenzione, non è possibile connettersi al database <br />".mysql_error());

}

 

$t1 = $_GET ['t1'];

$um = $_GET ['um'];

 

$sql= "INSERT IGNORE INTO `xxxxxx`.`xxxxxxxx` (`indice`, `ora`, `Temperatura`, `Umidita`)

                VALUES (NULL, CURRENT_TIMESTAMP, $t1, $um);";

 

$res = mysql_query($sql,$conex);

?>

 

Nota: I dati contrassegnati con “xxxxxx” sono stati volutamente omessi

 

 

Listato file .php embedded in .html che estrae gli ultimi 100 records

 dal database MySQL e genera una tabella

 

<html>

<head>

<title> Query su database </title>

<style type="text/css">

.style1 {

                                                               text-align: center;

                                                               font-size: medium;

                                                               color: #FF0000;

}

</style>

</head>

<body style="background-image: url('http://meteoct.altervista.org/Etna3.jpg')">

 

<?php

$host = 'xxxxxxxxxxxxx';

$user = 'xxxxxxx';

$password ='xxxxxxxxxxxx';

$database = 'xxxxxxxxxxxxx';

$db= mysql_connect( $ xxxxxxxxxx, $ xxxxxxxx, $ xxxxxxxxxxxxx)

or die ("impossibile connettersi al server $host");

mysql_select_db( $database, $db)

or die ("impossibile connettersi al database $database");

$query = "SELECT * FROM ` xxxxxxxxxxxxx ` ORDER BY `ora` DESC LIMIT 100 ";

$dbResult = mysql_query($query, $db);

print "<table border=\"1\" width=\"50%\" align=\"center\"> \n";

print "<tr align=\"center\"> \n  <td>n.</td> \n <td>Data-Ora</td> \n <td>Temperatura &#176C</td> \n <td

colspan=\"2\">Umidit&#224 %</td> \n ";

while ($line =mysql_fetch_row($dbResult)) {

print "<tr > \n";

foreach ($line as $col_value) {

print "<td align=\"center\"> $col_value </td> \n";

}

print "</tr> \n" ;

}

print "</table> \n";

mysql_free_result($dbResult);

mysql_close($db);

?>

</body>

</html>

 

File .php che genera un grafico degli ultimi 30 records (libreria: phpgraphlib.php)

 

<?php

 

   $url=$_SERVER['REQUEST_URI'];

   header("Refresh: 10; URL=$url");

 

include("phpgraphlib.php");

$graph=new PHPGraphLib(900,700);

$link = mysql_connect('xxxxxxxx', 'xxxxxxx', 'xxxxxxxxxxxxx')

   or die('Could not connect: ' . mysql_error());

mysql_select_db('my_meteomarconi') or die('Could not select database');

$dataArray=array();

$dataArray1=array();

 

//get data from database temp

$sql="SELECT ora, Temperatura FROM xxxxxxxxxxxxx ORDER BY indice DESC LIMIT 30 ";

$result = mysql_query($sql) or die('Query failed: ' . mysql_error());

if ($result) {

 while ($row = mysql_fetch_assoc($result)) {

 $ora=$row["ora"];

 $Temperatura=$row["Temperatura"];

  

 //aggiunge a data array

 $dataArray[$ora]=$Temperatura;

 }

}

 

//get data from database umid

$sql="SELECT ora, Umidita FROM xxxxxxxxxxxxx ORDER BY indice DESC LIMIT 30 ";

$result = mysql_query($sql) or die('Query failed: ' . mysql_error());

if ($result) {

 while ($row = mysql_fetch_assoc($result)) {

 $ora=$row["ora"];

 $Umidita=$row["Umidita"];

 

 //aggiunge a data array1

 $dataArray1[$ora]=$Umidita;

 }

}

 

$graph->addData(array_reverse($dataArray),array_reverse($dataArray1));

$graph->setLegend(true);

$graph->setLegendTitle('Temperatura °C', 'Umidità %');

$graph->setBarColor('red','olive');

$graph->setBackgroundColor("white");

$graph->setBars(false);

$graph->setLine(true);

$graph->setDataPoints(true);

$graph->setDataValues(true);

$graph->setDataValueColor('maroon');

$graph->setGrid(false);

$graph->setupXAxis(20, 'blue');

$graph->setupYAxis(20, 'blue');

$graph->setLineColor('maroon');

$graph->createGraph();

$graph->setTextColor("black");

$graph->setXAxisTextColor("yellow");

$graph->setYAxisTextColor("yellow");

?>

?>

 

 

Nota: I dati contrassegnati con “xxxxxx” sono stati volutamente omessi