Données de capteurs vers une base de données MySQL

Bonjour à tous, je poste ce message aujourd’hui car je suis un peu devant "un mur"...

Depuis plusieurs jour j'essaye de connecté mon arduino uno à une base de données en utilisant un shield ethernet. La connexion entre la carte et l'ordinateur se fait sans soucis, mais je suis bloqué sur la liaison vers la base de données. Les données à transférer sont Une température, une position, un rythme cardiaque et si la personne qui possèdent le système à appuyer sur le bouton d'alerte (c'est pour un système de surveillance médical qui surveille un patient en temps réel, projet de terminale STI2D SIN)

J'ai fait pas mal de recherche et vu plusieurs "2" solutions: relier le script arduino à un script PHP qui exécute la requête à la place de l'arduino, soit directement depuis le script arduino. D'après mes recherche, la 1ère solution semble la + simple et la plus rapide, mais étant donné que je suis novice dans le domaine je ne sais pas trop comment m'y prendre.. si quelqu'un à du temps à me donner pour m'aider à le faire, je suis preneur (que ca soit la partie Php / Arduino).

Merci et bonne soirée à tous :slight_smile:

bdd:

Ta bdd est sur un serveur local j'imagine pas sur le web ? En envoyant un GET avec les donnés sur une page du serveur avec les infos et la page s'occuperait de l'envoie dans la bdd ?

Une requête de ce genre http://serveur.local/page.php?bpm=X&temp=Y&pos=Z

En effet j'utilise Wamp Serveur ! Justement c'est ce que je pensais faire mais je ne sais pas trop comment m'y prendre du côté arduino en fait ^^

Bin y'a pas plus à faire que l'exemple webclient sauf qu'au lieu de faire un GET sur google.com tu le fais sur http://serveur.local/page.php?bpm=X&temp=Y&pos=Z

Tout es là, il faudra juste modifier un peu.

Dans cette exemple il utilise un module esp8266

http://julien.coron.free.fr/?p=928

Là il envoie des donnés brutes, dans ton cas, il faut lire les donnés depuis les capteurs, en faire une variable puis envoyer la commande GET en ajoutant les variables dedans.

Il te faut te renseigner sur les capteurs que tu compte utiliser, comment fonctionne digital.Read();

tu as ici un exemple avec le code coté arduino et serveur

Merci à tous de votre aide :smiley: je vais essayer chaque solution voir laquelle marche le mieux :slight_smile:

Bonjour, je reviens vers vous pour avoir un "aperçu" de mon code, avec vos conseils et vos exemples, j'ai pû tiré ce code, que je testerai une fois le matériel reçu.

Code Arduino:

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

int carteValue = 1;
int bpmValue = 94;
int tempValue = 35-5;
int posValue = 50;
int alertValue = 0;

byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x7D, 0x1C };

char server[] = "localhost";   

IPAddress ip(192, 168, 0, 177);


EthernetClient client;
void setup() {
  if(bpmValue > 100 || bpmValue < 50 || tempValue > 39 || tempValue < 35 || posValue > 45)
  {
  Serial.begin(9600);
  while (!Serial) {
    ; 
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  delay(1000);
  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    sensorValue = analogRead(sensorPin);
    float temp = getTemp();
    Serial.println( temp );
    Serial.println(sensorValue);

    client.print( "GET /SSM/connect/connect.php?");
    client.print("id_carte=");
    client.print( carteValue )
    client.print("&&");
    client.print("bpm=");
    client.print( bpmValue );
    client.print("&&");
    client.print("temp=");
    client.print( tempValue );
    client.print("&&");
    client.print("pos=");
    client.print( posValue );
    client.print("&&");
    client.print("alert_auto=");
    client.print( alertValue );
    client.println( " HTTP/1.1");
    client.println( "Host: localhost" );
    client.println( "Content-Type: application/x-www-form-urlencoded" );
    client.println( "Connection: close" );
    client.println();
    client.println();
    client.stop();
  }
}
}
void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    
    while (true);
  }
}

Code Php:

<?php
include("../functions/pdo.php");
$sql = "INSERT INTO alerts(id_carte,bpm,temp,pos,alert_auto) 
		VALUES(".$_GET["id_carte"].",".$_GET["bpm"].",".$_GET["temp"].",".$_GET["pos"].",".$_GET["alert_auto"].")";
?>

Merci d'avance de vos avis et bonne journée :slight_smile:

Salut,
j'ai trouvé aussi une méthode directe de connexion de l'Arduino à la BDD. Cela évite une "brique" PHP. Moins il y a d"intermédiaires plus on est sûr que la donnée est bien stockée. Pour un dispositif médical cela peut être important. A tester ...

Voir le post ici et le code là

#include <SPI.h>
#include <Ethernet.h>
#include <sha1.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <mysql.h>

byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(10,0,1,54);
char user[] = "admin";
char password[] = "abcd";

Connector my_conn;        // The Connector/Arduino reference

const char INSERT_TEXT[] = "INSERT INTO joomladb.meteo VALUES ('Hello, MySQL!', NULL)";
const char INSERT_DATA[] = "INSERT INTO joomladb.meteo VALUES (%s, NULL)";

void setup() {
  Ethernet.begin(mac_addr);
  Serial.begin(9600);
 
  delay(1000);
  Serial.println("Connecting...");
  if (my_conn.mysql_connect(server_addr, 3306, user, password)) {
    delay(1000);
  }
  else
    Serial.println("Connection failed.");

 
  //
  // INSERT Examples
  //

  my_conn.cmd_query(INSERT_TEXT);
  // Now, let's check our results.
 
 
  char query[64];
  char temperature[10];
  dtostrf(value_read, 1, 1, temperature);
  sprintf(query, INSERT_DATA, temperature);
  my_conn.cmd_query(query);
 
}

void loop() {
}

Edit : Désolé !!! La librairie est obsoléte mais il y en a une nouvelle sur GitHub

Merci de ta réponse (et désoler pour le temps de réponse.. :roll_eyes: )
Je vais étudier ça de plus prêt mais ça à l'air plutôt intéressant, et comme tu le dis, plus on évite les grosses "briques" mieux c'est :grinning:

Sinon il y a une solution clé en main :

Et le git : GitHub - ChuckBell/MySQL_Connector_Arduino: Database connector library for using MySQL with your Arduino projects.
Et cela fonctionne aussi bien avec Arduino qu'ESP