Lecture variables url avec string

Salut,
Je bosse sur une lecture de variable que j’envoie sur mon client (carte arduino) avec une méthode get :

Je cherche à récupérer les deux valeurs afin de pouvoir les utiliser comme limites pour mes actionneurs. J'ai donc ce programme, j'arrive à repérer temp et hum dans la chaîne de caractère mais je n'arrive pas à lire leur valeur.

Si quelqu’un pourrait m’éclairer, ou juste alléger le programme.
Merci d’avance :slight_smile:

#include <Arduino.h>
#include <Ethernet2.h>
#include <SPI.h>
#include <Wire.h>
#include <SD.h>
#include "SHT31.h"
#include <String.h>

int hum = 0
int temp = 0
byte mac[] = {0x90,0xA2,0xDA,0x10,0x72,0xB5}; //L'adresse MAC de votre shield Ethernet 
IPAddress ip(20,20,20,4);        // @ IP du shield
EthernetServer server(80);
String readString;
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask


void setup() {
 
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // Start the Ethernet connection and the server:
Ethernet.begin(mac,ip); 
  server.begin();
  Serial.print("Arduino IP server: ");
  Serial.println(Ethernet.localIP());
}

void loop()
{
  // Create a client connection
  EthernetClient client = server.available();
  if (client)
  {
    while (client.connected())
    {   
      if (client.available())
      {
        char c = client.read();
     
        //read char by char HTTP request
        if (readString.length() < 100)
        {
          //store characters to string
          readString += c;
        //  Serial.println(c);
        }

         //if HTTP request has ended
        if (c == '\n')
        {        
          // readString.contains() replaced with readString.indexOf(val) > -1  by Katsu
          // indexOf locates a character or String within another String.
          // Returns the index of val within the String, or -1 if not found.


          if(readString.indexOf("temp=") > -1){
            char d = client.read();
            Serial.println("------------------------------------------"); 
            Serial.println("Température repérée :");
            temp = cl.read()
            Serial.println(temp);
            
          }
          if(readString.indexOf("hum=") > -1) {
            char z = client.read();
            Serial.println("Humidité repérée :");
            hum = cl.read()
            Serial.println(hum);
          }
           
           Serial.println("Chaîne de caractères string allignée :"); //print to serial monitor for debuging
           Serial.print(readString); //print to serial monitor for debuging
           Serial.println("------------------------------------------");
           client.println("HTTP/1.1 200 OK"); //send new page
           client.println("Content-Type: text/html");
           client.println();
           client.println("<HTML>");
           client.println("<HEAD>");
           client.println("<meta charset='UTF-8'>");
           client.println("<meta http-equiv='refresh' content='5'>");
           client.println("<TITLE>Temp</TITLE>");
           client.println("</HEAD>");
           client.println("<BODY>");
           client.println("Test!!!");
           client.println("</BODY>");
           client.println("</HTML>");
           
           delay(1);
           
           //stopping client
           client.stop();
           
           //Gestion des sorties
           //en fonction de readString
           //...

           //clearing string for next read
           readString="";

         }
       }
    }
  }
}

Peut-être avec stoi ?

Bonjour, merci
Je ne comprends pas trop l’utilisation de stoi, mais ducoup ça donnerait quelque chose dans le genre non ? :

std::string str_dec = temp;

std::cout << str_dec << “=” << i_dec << " and " << str_dec.substr(sz) << “\n”;

Je ne connais pas trop non plus mais si tu as un String qui commence par la valeur entière que tu cherches à mettre dans un int, tu dois pouvoir faire

int valeur = stoi(readString,nullptr,10);

le '10' sert à l'avoir en décimal (c'est peut-être l'option par défaut)

Par exemple : si le String vaut "252&hum=58" ça te renverra 252

          if(readString.indexOf("temp=") > -1){
            char d = client.read();
           
            Serial.println("Température repérée :");
            int valeur = stoi(readString,nullptr,10);
            Serial.println(valeur);
           
          }

Je vais essayer comme ça

Si ça ne fonctionne pas comme ça, il faut que tu isoles la partie du String qui commence par les chiffres que tu veux (voir substr au besoin)

Ouais mais ça pourrait marcher pour la variable 1 mais la 2?

C’est pareil, tu cherches la position de “hum=” et tu prends la suite de la String

Bonsoir,
Problème toujours d’actualité,
Quelqu’un pourrait faire un exemple, mon cerveau sature vraiment, j’ai essayé 1001 façons de faire…
Merci d’avance