Bonjour, je vais vite expliquer les problèmes que j'ai , je suis en terminale STI2D et j'ai comme projet de fin d'année de designer un système pouvant lire des tag RFID , et communiquer avec une base de donnée MySQL afin de stocker les valeurs.
Mes problèmes sont les suivants : J'utilise une libraries ( MySQL_Connector_Arduino-master ) afin de pouvoir communiquer directement avec MySQL sans devoir passer par le bordel de la page php.
Seulement j'avais un shield 2 avec les libraries W5500 --> résultat, il semble que ce n'est pas possible d'utiliser MySQLconnectorArduino avec ces nouvelles libraries.
Je suis donc revenu à mon idée de départ. J'utilise un pc portable hors réseau afin de n'avoir que l'arduino branché en RJ45 à son port Ethernet directement , sans rien entre les deux ( à part le câble ) --> résultat , quand j'essaye d'envoyer la valeur à ma page , celle-ci semble de pas s'envoyer .. et cela est confirmé par le fait que la base de donné n'a rien de nouveau d'ajouté.
J'utilise WAMP , une arduino mega avec possibilité d'avoir un shield ethernet r3 (le 1 ( qui ne se connecte pas aussi) et un shield ethernet 2 qui fait pareil.
L'assignation d'adresse IP semble fonctionner , la mac est la bonne aussi.
Le câble est un câble droit ( je crois )
Voici les différents codes que j'ai écris , basé sur la doc pour vous aider à y voir + clair sur ces problèmes...
Voici celui utilisé pour essayer d'envoyer une valeur à une page PHP qui elle même met dans sa BDD la variable. ( shield V2 utilisé et V1 )
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x3B, 0x94};
IPAddress ip(192,168,1,42); //adresse ip donné au shield ethernet
IPAddress serveur(192,168,1,54);//:adresse ip du pc
EthernetClient client;
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);
}
void loop() {
int nbr= 42; //nombre à insérer dans la bdd
if(client.connect(serveur,80)){
Serial.println("Connecté au pc");
Serial.print("GET /php.php?nbr=");
Serial.print(nbr);
Serial.println(" HTTP/1.1");
Serial.print("Host: 192.168.1.54");
Serial.println("Connexion fermé");
client.stop();
}
delay(9000000); // "arrêt" du programme
}
et voici le code de la page PHP dans le répertoire WWW de WAMP
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=epicerie','root','');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$bdd->exec('INSERT INTO stock (Nombre) VALUES ('.$_GET["nbr"].')');
?>
Donc voilà .. au final ça a beau ne pas faire d'erreur dans le moniteur série , je n'ai au final pas de nouvelle variable dans ma bdd
Après cet essai infructueux j'ai testé avec un shield v1 et v2 pour tester la librarie sql , mais ça ne marche toujours pas aussi..
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <MySQL_Encrypt_Sha1.h>
#include <MySQL_Packet.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetClient.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x3B, 0x94 };
IPAddress serveur(192, 168, 1, 54); // ip du pc
IPAddress ip(192,168,1,42); // ip défini pour l'arduino
EthernetClient client;
char user[]= "root";
char pass[] = "";
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);
delay(2000);
if(conn.connect(serveur, 3306, user, pass)){
Serial.println("Connecté");
delay(1000);
}
else
Serial.println("Connexion échoué");
}
char INSERT_SQL[] = "INSERT INTO stock (Nombre) VALUES nbr";,
/* le truc que je comprend pas ici c'est que ma base de donné a pour nom epicerie , possède une table : stock , et donc une colonne Nombre dedans. Comment l'arduino sait que il faut aller dans la table epicerie ? */
void loop() {
int nbr=10;
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn); // aucune idée de ce que ça fait mais on me dit de le mettre ..
cur_mem->execute(INSERT_SQL); // on exécute la requête PHP
nbr = nbr +1;
delay(5000); // on refait toutes les 5 secondes un INSERT correspondant à la même variable +1
delete cur_mem;
}
Donc voilà je ne fais que me prendre des "connexion échoué" sur cette dernière partie.
Il va dans dire que je suis là dessus depuis 2 semaines à chercher sur des fofo anglais et fr des solutions qui se sont toutes révélés infructueuse !
Merci pour vos futures réponses.
Cordialement,