IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

retour de HTTP POST [Arduino ESP32]


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 231
    Par défaut retour de HTTP POST
    Bonjour au Forum et bonne année à tous.

    Je viens vers vous avec une question.

    Pour remplacer des MKR1010 qui plante leur Wifi regulièrement, je veux essayer un ESP32.

    Donc j'achète un ESP32, le branche sur mon IDE Arduino(après avoir fait les update de l'IDE),

    Ecris (réécris) le programme et le teste.

    Le problème viens de la communication vers le serveur WEB local(raspberry avec nginx).
    Avec un Arduino, après avoir envoyer le HTTP POST vers une page php, je reçoit la sortie de la
    page pHP (les echo), le retour est comme suit:

    J'ai mis les divers retour en couleur, en bleu le retour Arduino, En vert la sortie des commande POST, en Brun la page PHP

    ******* Input >Serial : n
    ********** Connection au Web server (loop) **********
    25-1-16 9:48:47
    Valeur Val:DTE=1737020927&TT=17.84&Rh=53.63&tps=0.03&Wdbm=-65&PP=1027,4
    Envoit*


    HTTP/1.1 200 OK
    Server: nginx/1.18.0
    Date: Thu, 16 Jan 2025 09:48:46 GMT
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: close

    1f7

    <!-- RECOIT LES DONNEE DE L'ESP32-WROOM_32 W1
    ***** Données SHT31, TT et RH
    ***** Données BMP280 PP et TTbm
    -->

    Page depart file recoit_W1.php<br>2025-01-16 10:48:46
    Variable reçues ; TT= 17.84 Rh =53.63 PP=1027 TTbm=0
    Date : 25-01-16 Heure=10:48:47
    Connexion réussie
    sql=INSERT INTO Ttemps(Epoch,Jour,Heure) VALUES(1737020927,'25-01-16','10:48:47')

    trouve la dernière ligne

    lastligne =286
    sql= INSERT INTO Data(tpsID,TT,RH,PP,TTbm,Dbm) VALUES(286,17.84,53.63,1027,0,-65)

    <fin d'insert


    0


    **** Fin de lecture ******
    ******************* WiFi disconnected *****************
    C'est pratique, car si une erreur est fait dans la syntaxe soit de l'Arduino, soit de la page PHP, soit du format de la base de donnée, les message de retour me disent ou aller chercher.

    Cependant, le même code sur un ESP32 me donne comme réponse,
    ********** Connection au Web server (loop) ***********
    Valeur Val:DTE=1737021301&TT=3.93&Rh=98.49&PP=1029.88&tps=5.93&Wdbm=-59

    Envoit
    Mweb disponible

    H
    **** Fin de lecture ******
    **** WiFi disconnected ****
    Donc en fait je n'ai aucun retour de la commande HTTP POST ni de la page PHP. Cependant la page PHP est bien executée, car les données sont bien ajoutées dans la base de donnée.

    J'ai regardé sur le WEB, mais on me parle de commande HTTPGET avec des includes pour l'ESP32 qui sert de serveur WEB, mais ce n'est pas mon cas, le ESP32 est utilisé comme client WEB.


    Le code "partiel " utilisé est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #include <Arduino.h>
    #include <WiFi.h>
    #include <time.h>
    #include <ESP32Time.h>
     
    WiFiClient Mweb;
    .....................................
    void EnvoiData() {
    .....................
    int result = Mweb.connect(server, 80);
      if (result == 1) {
        Wifi=true;
        if(1){Serial.print("Envoit\n");}
        Mweb.println(F(WEBPOST));
        Mweb.println(F(Hosts));
        Mweb.println(F("Connection: close"));
        Mweb.print(F("Content-Length: "));
        Mweb.println(machaine.length());
        Mweb.println(F("Content-Type: application/x-www-form-urlencoded"));
        Mweb.println();
        Mweb.println(machaine);
     
        delay(1000);
        while (Mweb.connected()) {
          if (Mweb.available()) {
                char c = Mweb.read();
               Serial.print(c);
          }
        }
     
    ......................
    Le code pour le MKR1010 et l'ESP32 sont les mêmes.

    Est-ce le WiFiClient pour le ESP32 qui ne retourne pas de réponse de la page PHP ?

    Ou autre chose??

    Merci

    Michel

  2. #2
    Membre éclairé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2012
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 231
    Par défaut Une solution
    Bonjour,

    Ayant continué mes recherche, je sui tombé sur le site GitHub
    https://github.com/PhilippeSimier/Es...b/src/main.cpp

    Sur ce site, au lieu de relire caractère par caractère le retour du serveur Web, il utilise la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String line = Mweb.readStringUntil('\r');
    Et les boucles sont modifiées comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        while (Mweb.connected()) {
          Serial.print("Mweb connecté\n");
          while (Mweb.available()) {
     
              String line = Mweb.readStringUntil('\r'); // découpe ligne par ligne
              Serial.print(line);
    }
    Du coup, lors de la commande HTTP POST pour envoyer les données, le retour est :
    Envoit
    Mweb connecté
    HTTP/1.1 200 OK
    Server: nginx/1.18.0
    Date: Fri, 17 Jan 2025 08:30:01 GMT
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: close

    1d4
    <!-- RECOIT LES DONNEE DE L'ARDUINO EXTERIEUR
    Version avec conversion des date en gmdate -->
    Page depart file recoit.php

    L'heure est :2025-01-17 08:30:01
    Donnée recues

    Epoch est :1737102601
    La date est :25-01-17
    L'heure est :08:30:01
    date recue =25-01-17 08:30:01
    Connexion réussie
    sql= INSERT INTO Exterieur(time,TT,RH,PP) VALUES('25-01-17 08:30:01',0.79,100,1038.05)
    sql= INSERT INTO Psolaire(time,Tension) VALUES('25-01-17 08:30:01',5.71)

    <fin d'insert


    0


    **** Fin de lecture ******
    **** WiFiclient disconnected ****
    Ce qui correspond bien à ce que la page PHP repond à la requete HTTP POST.

    Voila, je suis content, en cas d'erreur je voit ou je dois aller chercher.


    Je marque comme résolu

    Merci à ceux qui on pris du temps à lire ce problème

    Michel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. PHP HTTP POST et API Flickr envoi d'un formulaire et retour
    Par YannCo dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 09/01/2011, 01h21
  2. HTTPS - POST côté client
    Par Julaie95 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 29/03/2006, 15h37
  3. Requette HTTP POST
    Par CrazySeb dans le forum C++
    Réponses: 7
    Dernier message: 25/02/2006, 15h17
  4. HTTP POST
    Par jmjmjm dans le forum Web & réseau
    Réponses: 17
    Dernier message: 12/11/2005, 22h05
  5. [HTTP][POST] passassion de variable
    Par Yodalf dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 04/09/2004, 21h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo