STATION METEO CLIENT

après la version serveur , voyons maintenant la station client qui envoie les données a une page PHP pour enregistrer les données dans une Base De Données MySQML. on peut ensuite consulter la base de donnée ou effectuer des operations sur celle si a partir d’un site internet.

nous allons ici utiliser 3 programmes:

  • un programmeArduino: “meteoclient.ino” ( arduino uno muni de son shield ethernet) qui envoie les données capteurs a une page PHP nomée “insert.php”localisée sur le RPI en mode serveur.
  • la page php “insert.php” qui récupère les infos et les transmet a une base de donnée Mysql nomée “meteo” avec une table nommée “tablemeteo“.
  • une page php “viewtable.php” pour visualiser le contenu de la table de données .

MISE EN PLACE DE LA BDD MySQL et de sa TABLE:

a l’aide de PhpMyAdmin, nous allons créer la base de donnée nomée “meteo” et sa table “tablemeteo” dont voici la structure :

PROGRAMME ARDUINO :

pour le montage Arduino , nous allons reprendre l’ensemble décrit ICI .

  • arduino UNO + Ethernet shield
  • horloge temps reel TinyRTC I2C
  • capteur température/pression/humidité I2C BME280

le programme charge les librairies adéquates, les ouvre , configure l’adresse mac et IP du shield ethernet ( ici 192.168.1.15) puis dans la boucle void , récupère l’heure et la date du RTC puis les valeurs température , pression et humidité du capteur puis envoie tout ça au serveur RPI (adresse IP 192.168.1.18 port 80) et au fichier php “insert.php“en utilisant une syntaxe du type ci dessous:

insert.php?id=0&date=2021-10-12&heure=14:14:25&temperature=25&pression=1028&humidite=66

NOTA: la derniere ligne ” client.print(“\r\n”); ” est primordiale, elle effectue un double retour chariot, sans cette commande , l’envoi des données n’est pas opérant.

#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#include "RTClib.h"
#include <SparkFunBME280.h>
RTC_DS1307 rtc;
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 15);
BME280 mySensor;
EthernetClient client;
int id1 = 0;
String date1 ="";
String heure1 ="";
float temperature1 =0;
float pression1 = 0;
float humidite1 =0;

void setup() {
  Serial.begin(9600);
  Serial.println("demarrage");
  Wire.begin();
  rtc.begin();
  SPI.begin();
  mySensor.beginI2C();
  Ethernet.begin(mac, ip);
}

void loop() {
  if (client.connect("192.168.1.18", 80)) {
    DateTime time = rtc.now();
    date1 = time.timestamp(DateTime::TIMESTAMP_DATE);
    heure1 = time.timestamp(DateTime::TIMESTAMP_TIME);
    temperature1 = mySensor.readTempC();
    pression1 = mySensor.readFloatPressure();
    humidite1 = mySensor.readFloatHumidity();
    client.print( "GET /insert.php?id=");
    client.print("0");    
    client.print("&date=");    
    client.print(date1);
    client.print("&heure=");
    client.print(heure1);
    client.print("&temperature=");
    client.print(temperature1);
    client.print("&pression=");
    client.print(pression1);
    client.print("&humidite=");
    client.print(humidite1);
    client.print("\r\n");
    delay(30000);     
  } else {
    Serial.println("echec de la connexion");
    delay(3000);
  }
}

PROGRAMME PHP de transfert ARDUINO => MySQL:

le programme php lui est extrêmement simple: le fichier ci dessous devra etre sauvegardé avec l’extension php au lieu de txt dans le répertoire var/www/html du RPI.

en premiere ligne il se connecte a la BDD “meteo” sur le serveur local avec l’identifiant “root” , le mot de passe “motdepasse” ( ces paramètres sont éventuellement a changer en fonction des vôtres).

en deuxième ligne il envoi la commande d’insertion des paramètres arduino .

la ligne “mysqli_query ($dbconnect,$sql);” effectue la requête de connexion et d’envoi des données.

<?php
$dbconnect = mysqli_connect("localhost", "root", "motdepasse", "meteo"); 
$sql = "INSERT INTO tablemeteo (id, date, heure, temperature, pression, humidite) VALUES ('".$_GET['id']."', '".$_GET['date']."', '".$_GET['heure']."', '".$_GET['temperature']."', '".$_GET['pression']."', '".$_GET['humidite']."')";
mysqli_query($dbconnect,$sql);
?>

VISUALISATION DU RESULTAT :

pour visualiser le résultat de l’envoi des données a la table de la BDD meteo , nous allons ajouter un script php dans le répertoire var/www/html du RPI.

le fichier ci dessous au format .txt devra y etre copié avec l’extension.php

<?php
$link = mysqli_connect("localhost", "root", "motdepasse", "meteo");
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}
$sql = "SELECT * FROM tablemeteo";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>ID</th>";
                echo "<th>DATE</th>";
                echo "<th>HEURE</th>";
                echo "<th>TEMPERATURE</th>";
		echo "<th>PRESSION</th>";
		echo "<th>HUMIDITE</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['date'] . "</td>";
                echo "<td>" . $row['heure'] . "</td>";
                echo "<td>" . $row['temperature'] . "</td>";
                echo "<td>" . $row['pression'] . "</td>";
                echo "<td>" . $row['humidite'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Free result set
        mysqli_free_result($result);
    } else{
        echo "No records matching your query were found.";
    }
} else{
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
mysqli_close($link);
?>

une fois positionné dans le répertoire du RPI , pour se connecter a la table, il suffit d’ouvrir votre navigateur internet sur votre PC connecté au réseau et de taper:

192.168.1.18/viewtable.php

si tout est ok vous devriez voir une page de ce type : attention , la page ne se régénère pas automatiquement , il faut l’actualiser a la main pour voir le nombre de lignes évoluer au fil du temps .

une petite vidéo YouTube qui résume tout ça :