Progetto alternanza scuola-lavoro “Guardiani della costa”
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 °C</td> \n <td
colspan=\"2\">Umidità %</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