Requête HTTP ou HTTPS pour envoyer une variable ana dans un URL .php

Bonjour à tous,

J'ai besoin d'écrire une variable ana dans un URL .php pour qu'elle s'écrive dans une base de donnée.

A ce jour, je travaille avec une ESP8266 et un capteur "UltraSonic Range".

Pour le moment, l'adresse IP que je fais pour ma carte récupère correctement la valeur de mon capteur avec un refresh chaque seconce.

A côté de ça, je suis sur codeanywhere où je gère ma bdd sur phpmyadmin.

Donc ma page "monsite.com/sauvegarde-donnée.php" est codé pour que quand j'ajoute "?distance=une valeur" à mon URL, la valeur s'écrit dans ma bdd.

Je gère ceci avec une requête GET dans mon code php et INSERT de ma bdd.

Ma question est comment je pourrais facilement écrire la valeur de mon capteur en temps réel avec un rafraichissement automatique dans l'URL de mon site à "?distance=X".

Je pense déjà mettre changer ma requête GET en POST pour plus voir "?distance=", ensuite je me suis renseigner sur les requêtes HTTP et HTTPS mais y'a beaucoup trop d'informations d'un coup.

Si quelqu'un d'entre vous à une solution facile, plug and play je suis preneur.. J'ai regardé beaucoup de tuto, et je suis un peu perdu pour le moment.

Merci d'avance de votre aide.

Cdlt

Une âme en peine.

WIFI_GOOD.ino (2.46 KB)

ne postez pas les codes courts en PJ, on ne peut pas les lire sur mobile. Postez les directement dans le code en utilisant les balises de code --> cf les posts épinglés en haut du forum comme "Bien éditer son post pour les nuls" , "Faire un Nouveau Sujet ou le corriger avec les Balises..." et "Règles du forum francophone")


Pour votre question votre code y répond.. vous envoyez dans la loop le requête GET régulièrement et vous utilisez des String pou bâtir la bonne requête

  String   chaineGet = "GET /sauvegarde_donnée.php?distance=";
  chaineGet = chaineGet + RangeUltraSonic + " HTTP/1.1";
  client.println(chaineGet);

A noter au passage que ce n'est pas la peine de faire comme cela, envoyez les éléments par morceaux sans bâtir toute la requête d'un coup

client.print("GET /sauvegarde_donnée.php?distance=");
client.print(RangeUltraSonic);
client.println(" HTTP/1.1");

que ce soit un GET ou POST, votre arduino devra régulièrement envoyer la requête...

Bonjour,

Merci pour votre réponse.

Oui, à la fin de mon code j'avais fais une tentative avec ça, sans résultat. Peut etre que s'est dû au fait que ma carte a le rôle de serveur et mon site de client?

Je n'ai pas trouvé d'aide pour switch ma carte ESP8266 en client.

Merci d'avance si vous avez une solution.

#include <ESP8266WiFi.h> //ESP8266 Core WiFi Library (you most likely already have this in your sketch)
#include "WiFiManager.h" //https://github.com/tzapu/WiFiManager  
#include <ESP8266WebServer.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#include <WiFiClient.h>
#include <ESP8266mDNS.h>
#include "Ultrasonic.h"
#include <SPI.h>
#include <Ethernet.h>


#ifndef STASSID
#define STASSID "xxxx"
#define STAPSK "xxxx"
#endif

const char *ssid = STASSID;
const char *password = STAPSK;

EthernetClient client; 

char serveur [] = "https://barrage-.codeanyapp.com";
Ultrasonic ultrasonicg(14);
ESP8266WebServer server (80);
WiFiManager wifiManager; 

long RangeUltraSonic;

void setup() {

  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");
  
  while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
                                        }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
                             }
  //wifiManager.setTimeout(180);
  pinMode(LED_BUILTIN, OUTPUT);
  // wifiManager.resetSettings();
  server.on("/sensor", []() {
     
     int RangeUltraSonic = ultrasonicg.MeasureInCentimeters();
     String page = "<html><head>";
      page +="<meta http-equiv='refresh' content='1'/>";
      page +="<title>ESP8266 Recuperation de donnée de capteur</title>";
      page +="<style> body { background-color: #fffff; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; } </style>";
      page += "</head><body><h1>";
      page += RangeUltraSonic;
      page += "</h1>";
      page +="</body></html>";
  server.send(200, "text/html", page);
     
                             });
                             
  server.begin();
  
  if (!wifiManager.autoConnect()) {
    Serial.println("failed to connect and timeout occurred"); 
    delay(3000);
    ESP.reset(); //reset and try again
    delay(5000);
                                  }
             
}

void loop() {
                          
   client.println("GET /sauvegarde_donnée.php?distance=");
   client.println(RangeUltraSonic);
   client.println(" HTTP/1.1");
   //client.println("Host: barrage-.codeanyapp.com");
   //client.println("Connection: close");
   client.println();                              
   delay(1000);                  
  server.handleClient();
  MDNS.update();

}

Qui est client et qui est serveur ?

--> voulez vous pouvoir vous connecter à votre Arduino depuis un navigateur web (dans ce cas là c'est un serveur web) ?

ou il doit simplement balancer de temps en temps des data à votre script PHP, dans ce cas là c'est un client et votre serveur fait tourner le script PHP

Bonsoir,

Voila, c'est la deuxième option mais pour le moment, mon ESP8266 fait office de serveur, comment la faire passer en client?

mon code anywhere garde mon script php, qui est relié à ma bdd, je dois simplement envoyer la valeur de mon capteur arduino avec mon code arduino dans le script php mais je ne trouve pas. La requête GET de mon code arduino ne donne rien.

C'est peut être dans l'initialisation de mon code que je me trompe peut être...

Merci de votre aide

Il peut faire les deux.. il y a pleins de tutos en lignes vous en avez regardé ?

Bonjour,

merci encore de votre réponse!

J'ai vu des tutos bien-sûr, mais c'est pas clair, y'a différentes synthaxes à chaque fois et j'aimerais en trouver une qui ressemble un peu à mon code déjà.

Cdlt

la syntaxe de votre code c'est du C++ .. et il ne fait pas grand chose vraiment aujourd'hui

ma recommendation = partez de zéro, comprenez chaque ligne ou librairie que vous ajoutez

il y a des exemples web client et web server dans la librairie WiFi, partez de là

Bonjour,

J'ai vu bon nombre de tuto, j'ai réecris plusieurs fois mon code, je comprends toujours pas.

Je suis tellement dedans, que j'ai pas le recul nécessaire pour voir le problème.

Ceci est un exemple de la librairie : BasicHttpClient.ino