Arduino e MySql+Php – minitutorial + RFID

Prendendo spunto da una riflessione che mi veniva posta in classe : “perchè usare ThingSpeak rispetto a creare un proprio database?” ho pensato che fosse utile fare un mini corso sull’uso di DataBase MySql e Arduino.

Trovate tanti tutorial in rete su come inviare dati dal vostro Arduino Wifi (o Wemos o ESP8266 etc) alla piattaforma ThingSpeak.

Il concetto è analogo se avete un server in casa e volete inviare i dati del vostro Arduino alimentando il vostro DB MySql.

In pratica se volete avere una cosa del genere:

dovrete prima inviare i dati, salvarli, e poi con un secondo file, leggerli ed esporli. Guardate questo caso.

Non vi farò tutto il tutorial ma vi posterò solo la parte di codice da inserire nel vostro Arduino IDE e quindi nella vostra Wemos o equivalente. Createvi un file funzionante per l’invio dei dati e poi sostituite la parte :

String var=”temperatura=”+temperature+”&umidita=”+hum+”&pm10=”+pm10s+”&pm25=”+pm25s;
if (client.connect(server, 80)) {
Serial.println(“Connesso…”);

String url = “POST /myarduino/aggiungi.php HTTP/1.1”;
client.println(url);
client.println(“Host: www.miosito.it“); //Metti il dominio dove si trova inserisci.php (SOLO dominio!)
client.println(“User-Agent: Arduino/1.0”);
client.println(“Connection: close”);
client.println(“Content-Type: application/x-www-form-urlencoded;”);
client.print(“Content-Length: “);
client.println(var.length()); //Lunghezza dato
Serial.println(var); //Per debug
Serial.println(var.length()); //Per debug
client.println();
client.println(var);

}

Il codice è abbastanza semplice. Dopo aver letto i sensori a vostra disposizione ed aver assegnato a varie variabili stringa i valori, viene poi inviato in POST ad un file aggiungi.php sul vostro server, tutta la rilevazione effettuata. Nell’esempio è la variabile “var”. Nell’invio bisogna anche passare la lunghezza della stringa. Per debug se volete la stampate a video nel vostro monitor locale di Arduino IDE.

Sul server, vediamo il file aggiungi.php come deve essere composto:

<?php

foreach ($_REQUEST as $tipo_dato => $value)
{

if ($tipo_dato == “temperatura”) {
$temperatura = $value;
}
if ($tipo_dato == “umidita”) {
$umidita = $value;
}
if ($tipo_dato == “pm10”) {
$pm10 = $value;
}
if ($tipo_dato == “pm25”) {
$pm25 = $value;
}
if ($tipo_dato == “battery”){
$battery = $value;
}
if(!isset($_POST[‘temperatura’])) {
$temperatura = “NULL”;
}
if(!isset($_POST[‘umidita’])) {
$umidita = “NULL”;
}
if(!isset($_POST[‘pm10’])) {
$pm10 = “NULL”;
}
if(!isset($_POST[‘pm25’])) {
$pm25 = “NULL”;
}
if(!isset($_POST[‘battery’])) {
$battery = “NULL”;
}
}

$username=””; //inserire utente tabella mysql
$password=””; //inserire la password utente
$database=”myarduino”; //inserire il nome del db ad esempio myarduino
$tabella= “wemos”; //inserire il nome della tabella del db, ad esempio wemos
$host=”localhost”;

//Connetti al database
if ($con = mysqli_connect($host, $username, $password))
{
mysqli_select_db($con, $database) or die (“Impossibile selezionare database.”);

/*
Ora vengono inseriti i dati su database. Gli altri sono impostati di default a NULL.
now() restituisce l’ora attuale.
*/
$query = “INSERT INTO $tabella VALUES ($temperatura, $umidita, $pm10, $pm25, $battery, now())”;
$result = mysqli_query($con, $query);
} else {
echo(‘Impossibile connettersi al database.’);
}

?>

Prima di lanciare il tutto, dovete aver creato:

  1. Database MySql. Nell’esempio –> “arduino”
  2. Una tabella in tale Database. Nell’esempio –> “wemos”
  3. Dovete creare le chiavi: temperatura, pm10, pm25, umidita, battery come FLOAT e con possibilità di essere NULL e poi il campo time_stamp di tipo timestamp.

Ora potete anche provare. se volete visualizzare tali dati, eccovi un esempio di file index.php:

<?php

$username=””;
$password=””;
$database=”myarduino”;
$tabella= “wemos”;
$host=”localhost”;

$conness = mysqli_connect($host, $username, $password);
mysqli_select_db($conness,$database) or die(‘Errore connessione…’);

$result=mysqli_query($conness,”SELECT * FROM wemos ORDER BY time_stamp DESC”);

?>

<html>
<head>
<title>Sensor Data</title>
</head>
<body>
<table border=”1″ cellspacing=”1″ cellpadding=”1″>
<tr>
<td>&nbsp;Timestamp&nbsp;</td>
<td>&nbsp;Temperatura&nbsp;</td>
<td>&nbsp;Umidità&nbsp;</td>
<td>&nbsp;PM10&nbsp;</td>
<td>&nbsp;PM25&nbsp;</td>
</tr>

<?php
if($result!==FALSE){
while((list($temperatura, $umidita, $pm10, $pm25, $battery, $time_stamp) = mysqli_fetch_row($result)))
{
printf(“<tr><td> &nbsp;%s </td><td> &nbsp;%s&nbsp; </td><td> &nbsp;%s&nbsp; </td><td> &nbsp;%s&nbsp; </td><td> &nbsp;%s&nbsp; </td></tr>”,
$time_stamp, $temperatura, $umidita,$pm10,$pm25);
}
mysql_free_result($result);
mysql_close();
}
?>

</table>
</body>
</html>

Infine se volete potete anche creare un file di esportazione csv o xlsx. Ma per questo cercate in rete 🙂

ADDENDUM:

per leggere una scheda RFID e confrontarlo con un DB MySql con Wemos D1 mini dobbiamo creare una connessione con una tabella “card” che avremo creato nel nostro Db MySql. Il lettore RFID legge il codice univoco della card, si collega grazie al WiFi della Wemos e se il file remoto “lettura.php” risponde con un “SI” vuol dire che la card è autorizzata e si accende il led VERDE di un led RGB collegato con la vostra wemos. Su GITHUB

avete nel codice anche l’associazione PINS tra Wemos e RFID Reader. Ci sono anche i PIN a cui collegare il LED RGB e il file “lettura.php” che dovete mettere sul vostro server . Ricordatevi di inserire utente e password di accesso al DB MySql e nel file per la Wemos anche SSID e Password della vostra rete Wifi

Lic. CC-BY-SA

Potrebbero interessarti anche...