Passer plusieurs variables dans base de données SQL

Bonjour a tous

Je suis en train de développer une application qui doit envoyer plusieurs les valeurs des entrées analogiques A0 … A3 vers une base de données SQL.
Niveau matériel :

  • arduino UNO
  • shield ethernet
  • un serveur web avec PHP/SQL et une page PHP

Le code fonctionne pour la récupération mais uniquement pour l’entrée A0. Je n’arrive pas récupérer les valeurs des autres entrées.

Un morceau de code valant mieux qu’un long discours voila le code qui fonctionne avec l’entrée A0

Programme de l’Arduino :

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,10,25);

int channel0Pin = 0;
int channel0Reading;

char server[] = "192.168.10.21"; // Adresse IP Serveur

EthernetClient client;

void setup() {
 
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
    
}

void loop() {
 
  channel0Reading = analogRead(channel0Pin);

  // Connection 
  if (client.connect(server, 80)) {
    client.print("GET /add_data.php?");
    client.print("channel0=");
    client.print(channel0Reading);
    client.println(" HTTP/1.1");
    client.println("Host: 192.168.10.21"); // Adresse IP Serveur
    client.println("Connection: close");
    client.println(); // Ligne
    client.println(); // Ligne
    client.stop();    // Fin Connection

  }

  else {
    
    Serial.println("--> connection failed\n");
  }
 
  delay(10000); // Temps entre 2 requetes
}

et le code de la page add_data.php

<?php  
    $dbusername = "arduino";  // Utilisateur
    $dbpassword = "mot_de_passe";  // Mot de passe
    $server = "localhost";

    // Connection a la base de donnée

    $dbconnect = mysql_pconnect($server, $dbusername, $dbpassword);
    $dbselect = mysql_select_db("arduino",$dbconnect);

    // Requete SQL

    $sql = "INSERT INTO arduino.arduino_log (channel0) VALUES ('".$_GET["channel0"]."')";
    mysql_query($sql);
?>

Avez vous une idée pour récupérer les valeurs des autres entrées analogiques ?

J’ai essayé de modifier dans l’Arduino:

(...)
int channel0Pin = 0;
int channel0Reading;
int channel1Pin = 1; // Ajout de l'entrée A1
int channel1Reading;
(...)
 channel0Reading = analogRead(channel0Pin);

  // Connection 
  if (client.connect(server, 80)) {
    client.print("GET /add_data.php?");
    client.print("channel0=");
    client.print(channel0Reading);
    client.print("channel1="); // Ajout de l'entrée A1
    client.print(channel1Reading);
    client.println(" HTTP/1.1");
    client.println("Host: 192.168.10.21"); // Adresse IP Serveur
    client.println("Connection: close");
    client.println(); // Ligne
    client.println(); // Ligne
    client.stop();    // Fin Connection

  }
(...)

Et modifié la page add_data.php

(...)
    // Requete SQL

    $sql = "INSERT INTO arduino.arduino_log (channel0) VALUES ('".$_GET["channel0"]."')";
    $sql = "INSERT INTO arduino.arduino_log (channel1) VALUES ('".$_GET["channel1"]."')"; // Ajout de l'entrée A1
    mysql_query($sql);
(...)

Mais dans ce cas les valeurs récupérer sont à 0.
Merci par avance pour votre aide.

Où sont les analogRead() pour les autres pins?

je n'ai placé que A0 et A1 dans le code pour alléger : si je comprends comment ça fonctionne pour 2 je pourrais en ajouter 2 de plus :-)

Oui mais vous n'avez qu'un seul analogRead()...

Et puis faut sans doute un & entre les champs

merci effectivement : j'ai rajouté

Channel1Reading = analogRead(Channel1Pin);

mais cela ne fonctionne pas.

Pour le & ou la virgule entre les variables il faut faire comment ?

Vous devez appeler votre php avec une URL du genre

.../add_data.php?var1=1[color=red]&[/color]var2=2

Donc dans le code à part pour la première variable il faut rajouter Le &

    client.print("&channel1="); // Ajout de l'entrée A1
    client.print(channel1Reading);

Et même dans l'absolu il serait bon d'utiliser la notation officielle avec &

    client.print("&channel1="); // Ajout de l'entrée A1
    client.print(channel1Reading);

Le mieux c'est de tester votre PHP à la main depuis une session telnet, tapez une requête GET bien constituée et assurez vous que le PHP fasse ce que vous voulez - une fois que votre PHP fonctionne et que vous avez vu comment former l'URL et Le header alors il ne reste plus qu'à dupliquer cela avec les client.println()

Merci bien pour les explications : je vais tester ça.

Bonjour JML et bien cela fonctionne correctement : un grand merci pour ton aide. Ci dessous le code si ça peut aider qq'un

Pour l'arduino :

  if (client.connect(server, 80)) {
    client.print("GET /write_arduino_db.php?");
    client.print("channel0=");
    client.print(Channel0Reading);
    client.print("&channel1=");
    client.print(Channel1Reading);
    client.print("&channel2=");
    client.print(Channel2Reading);
    client.print("&channel3=");
    client.print(Channel3Reading);
    client.println(" HTTP/1.1");
    client.println("Host: ADRESSE_IP_DU_SERVEUR");
    client.println("Connection: close");
    client.println();
    client.println();
    client.stop();

et pour la page php :

$sql = 'INSERT INTO arduibase (time_stamp, channel0, channel1, channel2, channel3) VALUES ("'.$time_stamp.'", "'.$_GET['channel0'].'", "'.$_GET['channel1'].'", "'.$_GET['channel2'].'", "'.$_GET['channel3'].'")';
mysql_query($sql);

Encore merci et une bonne soirée.

bravo ! :)