Envoyer et recevoir des donnée d'une base de données ( pon

Bonjour à tous,

Je cherche une proposition ou des orientations pour envoyer et recevoir des données (mesures capteurs ...) d'une carte arduino mega à une DB SQL avec l'intermediaire d'un ESP01

Donc comme notre ami supercc m'avait dit un pont : un pont Arduino <-> ESP8266 <-> Base de données .

Merci d'avance !

Il y a deux manières de faire ça :

Un serveur PHP (ou autre) qui reçoit des requêtes HTTP de l'ESP01 et génère les requêtes SQL adéquates :

Se connecter directement à la base avec l'ESP01 :

Mais la MEGA ne verra rien de tout cela, tout se fera entre ESP01 et serveur.

hbachetti : Merci pour ta réponse !

D'accord merci ! et pour utiliser les données qu'on reçoit de l'arduino ( mesures des capteurs ) y a til un pont pour envoyer tout cela ?

Tu insères simplement les données dans la requête HTTP ou MYSQL.

Donc en gros l'arduino reçoit les mesures des capteur, il les transmets à l'esp puis l'esp à la base de données ?

Tu as bien compris.

theoriquement oui , mais pratiquement pas vraiment x), deja la premiere etape de transmettre les mesures de la Mega à l'esp8266-01, tu auras des recommandations stp ?

Non, aucune, il me semble que supercc t'a déjà prémâché la moitié du travail non ?

https://forum.arduino.cc/index.php?topic=630697.msg4280993;boardseen#new

Non, aucune, il me semble que supercc t'a déjà prémâché la moitié du travail non ?

Non, dans ces exemples il contrôle les arduinos à l'aide d'un navigateur web ...

Ce que je veux c'est de transmettre des données ou des variables à l'esp pour pouvoir ensuite la transferer dans une base de donnée MySQL ( cela est une autre histoire)

Je ne vois pas ce qui t'empêche d'envoyer des mesures de la MEGA à l'ESP01 par la ligne série, en mode texte ou en binaire.
Il n'y a pas de librairie pour cela.

Ah oui autant pour moi ! Merci !

Donc en résumé, maintenant que vous avez fait tout le boulot :wink:

arduino <--- [Serie ]---> Pont esp8266 <--- [Wifi] ---> serveur quelconque (TCP, HTTP, ...)

  1. L'arduino, qui ne sait communiquer que par sa liaison série, émet sur celle ci la requête et attend une réponse.
  2. Le pont esp8266 (qui écoute la liaison série) capte la requête et l'envoie par Wifi, attend et collecte la réponse du serveur, et affiche la réponse sur la liaison série .
  3. L'arduino, qui écoutait la liaison série, collecte la réponse et est content.

L'arduino qui est le client ne fait que écrire/lire sur sa liaison série, et n'a pas connaissance de quoi que ce soit de réseau et pourtant il l'utilise.

Qu'est qu'on a, qu'est ce qui manque ?

  1. L'arduino : la fonction int sqlSend(char *serveur, unsigned int port, char *request, char *response, unsigned len); est a écrire.

  2. Le pont : Dans le cas de sql tu as de la chance, MySQL Connector Arduino fait le job (jamais testé), y compris sur ESP8266. Reste a établir le pont (lecture série, émission requête, collecte réponse de requête, écriture série réponse)

  3. fait partie de la fonction sqlSend du point 1.

Ça c'est la théorie :wink:

@lgabed420, essaye peut-être déjà de faire fonctionner "MySQL Connector Arduino" sur ton ESP-01, et peut être qu'on pourra récupérer le code du pont qui est en cours de développement ici. Quand il marchera, sa transposition à un serveur MySql devrait être triviale.

Bonsoir supercc,

je viens de rentrer du boulot^^, je vais essayer ce soir ce que tu viens de me conseiller j'espere que j'y arriverai comme ca demain je traite ce qu'il reste :smiley:

Quel optimisme ! mais cela sera un grand pas !

croisons les doigts ^^

Bonjour ,

J'ai reçu à envoyer les mesure d'un dht sur un fichier json, malheuresement pas sur une base de données ( j'ai essayé mais j'ai pas reçu) , donc en utilisant un script php qui permet de creer un fichier json et puis evoyer les mesures dans ce dernier.
et puis j'ai tester aussi de transmettre deux variable de l'arduino mega à l'esp via le serial port mais c'est pas encore puisque je maitrise pas encore le String, je mets tout cela dans un topic dés que c'est finit .

Maintenant j'essaie de me connecter à un url qui contient un fichier json pour recevoir des datas grace au PARSE de ArduinoJSON, donc cette fois-ci j'utilise le https et j'arrive pas à me connecter, est ce que cela pourrais venir des permissions de l'url meme ?

NB : je n'utilise plus l'ESP-01 je viens de recevoir le Nodemcu enfin après 2 mois d'attentes ^^ et j'avoue c'est beaucoup plus pratique .

voilà le code avec lequel je teste le HTTPS :

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <WiFiClientSecureBearSSL.h>


const uint8_t fingerprint[20] = { fingerprint obtenu à partir du certificat dans le navigateur};

ESP8266WiFiMulti WiFiMulti;

void setup() {

  Serial.begin(115200);
  // Serial.setDebugOutput(true);

  Serial.println();
  Serial.println();
  Serial.println();

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }

  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("ssid", "mdp wifi");
}

void loop() {
  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);

    client->setFingerprint(fingerprint);

    HTTPClient https;

    Serial.print("[HTTPS] begin...\n");
    if (https.begin(*client, "https://URL HTTPS ")) {  // HTTPS

      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = https.GET();

      // httpCode will be negative on error
      if (httpCode > 0) {
        // HTTP header has been send and Server response header has been handled
        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

        // file found at server
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = https.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
      }

      https.end();
    } else {
      Serial.printf("[HTTPS] Unable to connect\n");
    }
  }

  Serial.println("Wait 10s before next round...");
  delay(10000);
}

donc j'obtiens le message du print:

[HTTPS] GET... failed, error: connection refuse

Update : j'ai utilisé aussi l'exemple BasicHttpsClient avec le meme lien j'ai mis à jour le fingerprint mais toujours pas, par contre le http ca marche nickel

Salut lgabed420,

j'ai un peu de mal a te suivre. Tu cherches toujours à insérer et lire dans une base de données MySql ?

Si c'est le cas, pourquoi empiler tous ces protocoles alors que MySql Connector fait le boulot ?

Salut supercc, me voilà de retour !
finalement j'ai laissé tombé la lecture et l'insertion dans un BdD, je ferai cela plus tard quand j'aurai le temps de bien reviser tout ce qui est BdD.

je l'ai fait en Json donc en utilisant la fameuse librairie de ce dernier.

donc en gros ce que j'ai fait :

envoyer des requetes post à un https puis recuperer le json ( parametre : humidité temperature ...) et le parser ( je sais pas si on peut dire ca en francais ^^) .

ce qu'il me reste c'est de envoyer les données Json de l'esp à l'arduino mega, j'ai cherché un peu j'ai vuqu'on peut pas envoyé plusieurs variables à l'aide du UART ou plutot j'ai pas encore trouver comment, peut etre si j'utilise un autre bus de communication plus adapté à ce que je fais, j'ai pas encore regardé , est ce que t'aurais des propositions ?

je sais pas si j'ai bien expliqué, je suis un peu fatigué mais n'hesite pas à me demander si c'est pas le cas et je te remercie pour l'interet que tu portes à mon ptit sujet ca fait zizir !