Arduino Forum

International => Français => Topic started by: lgabed420 on Aug 20, 2019, 12:30 pm

Title: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 20, 2019, 12:30 pm
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 (https://fr.aliexpress.com/item/32341788594.html?src=google&albslr=205957859&src=google&albch=shopping&acnt=494-037-6276&isdl=y&slnk=&plac=&mtctp=&albbt=Google_7_shopping&aff_platform=google&aff_short_key=UneMJZVf&&albagn=888888&albcp=1706977641&albag=66909914152&trgt=800756788306&crea=fr32341788594&netw=u&device=c&gclid=CjwKCAjwtO7qBRBQEiwAl5WC23oAb4dVJNCqIesRdLpgLr1TMdS2dLGPQJzgNQoKRUq8n2YLQKMRKxoC8sgQAvD_BwE&gclsrc=aw.ds)

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

Merci d'avance !
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: hbachetti on Aug 20, 2019, 12:43 pm
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 :
https://randomnerdtutorials.com/esp32-esp8266-mysql-database-php/ (https://randomnerdtutorials.com/esp32-esp8266-mysql-database-php/)

Se connecter directement à la base avec l'ESP01 :
https://github.com/ChuckBell/MySQL_Connector_Arduino (https://github.com/ChuckBell/MySQL_Connector_Arduino)

Mais la MEGA ne verra rien de tout cela, tout se fera entre ESP01 et serveur.
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 20, 2019, 01:36 pm
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 ?
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: hbachetti on Aug 20, 2019, 01:38 pm
Tu insères simplement les données dans la requête HTTP ou MYSQL.
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 20, 2019, 01:46 pm
Donc en gros l'arduino reçoit les mesures des capteur, il les transmets à l'esp puis l'esp à la base de données ?
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: hbachetti on Aug 20, 2019, 02:55 pm
Tu as bien compris.
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 20, 2019, 03:06 pm
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 ?
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: hbachetti on Aug 20, 2019, 04:40 pm
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 (https://forum.arduino.cc/index.php?topic=630697.msg4280993;boardseen#new)
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 20, 2019, 04:55 pm
Quote
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) 
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: hbachetti on Aug 20, 2019, 05:05 pm
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.
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 20, 2019, 05:12 pm
Ah oui autant pour moi ! Merci !
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: supercc on Aug 20, 2019, 05:33 pm
Donc en résumé, maintenant que vous avez fait tout le boulot ;-)

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 (https://github.com/ChuckBell/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 ;-)

@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 (https://forum.arduino.cc/index.php?topic=631576.0). Quand il marchera, sa transposition à un serveur MySql devrait être triviale.


Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 20, 2019, 11:35 pm
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 :D
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: supercc on Aug 20, 2019, 11:42 pm
Quel optimisme ! mais cela sera un grand pas !
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 21, 2019, 12:17 am
croisons les doigts ^^
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 22, 2019, 04:19 pm
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 .
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 22, 2019, 04:25 pm
voilà le code avec lequel je teste le HTTPS  :


Code: [Select]
#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:

Quote
[HTTPS] GET... failed, error: connection refuse
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 23, 2019, 04:56 pm
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
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: supercc on Aug 24, 2019, 01:43 pm
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 ?
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 28, 2019, 12:48 am
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 !
Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: supercc on Aug 28, 2019, 09:19 am
Tu sais donc récupérer sur l'esp des données

Quote
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 ^^)  .
Et c'est quoi le serveur derrière ? Domoticz ?

Quote
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 ?
Et pourquoi pas un truc comme ça pour envoyer du json de l'esp vers le mega :

1. l'esp écrit le json sur la liaison série.
2. le mega lit le json sur sa liaison série et le décode

Il te suffit normalement juste de relier en croisant les Rx et les Tx  (UART) entre les 2 cartes. Je ne connais pas la mega mais je crois qu'il y a plusieurs ports séries, il y a donc moyen d'en utiliser un autre que Serial (Serial2 ?). Sur l'esp tu n'as que 1 UART du coup pense a bien déconnecter la liaison série entre l'esp et la mega avant de télécharger un programme sur une des cartes.





Title: Re: Envoyer et recevoir des donnée d'une base de données ( pon
Post by: lgabed420 on Aug 28, 2019, 08:12 pm
Bonjour supercc,

non c'est un api rest.

si j'ai essayé mais c'est vrai que j'ai pas envoyé le json entier, je l'ai d'abord parser et puis j'ai essayé d'envoyer à l'aide de l'UART mais vu le nombre de données que j'ai il a pas du aimé, je vais essayé ce soir d'envoyer le json et le parser sur le mega.