Je dois arriver a récupérer le 6 de boucle=6, le 200 de vitesse=200 et le 3000 de duree=3000.
Une difficulté supplémentaire est que les trois nombres a récupérer peuvent avoir un nombre de chiffre variant, c'est a dire que 6 peut avoir comme valeur 14 ou 112.
Je comptais utiliser substring, mais je ne peux pas définir une position fixe de début ou de fin, donc ça ne fonctionne pas.
Donc si vous avez une idée je suis preneur.
Merci d'avance
tu peux utiliser substring, il faut "juste" récupérer les index de tes charactères de début, qui serait "=" et de fin "&". Pour ça tu peux utiliser indexof()
On peut aussi chercher non pas la sous chaine &, mais la sous-chaine &boucle=
Cela ferait un truc du genre
int flagFirst = httpText.indexOf("&boucle", 0); // Recherche champ "boucle"
int flagSecond = httpText.indexOf("&", flagFirst +1); // Recherche de la fin de ce champ
String textExtract = httpText.substring(flagFirst +7, flagSecond);
Attention le code proposé suppose que la chaine est toujours dans le même format.
Il est bon de prendre en compte que indexOf puisse renvoyer -1, car la sous chaine n'a pas était trouvé
On peut aussi noté que la solution de @vileroi est plus pérenne car pas dépendant de l'ordre des paramètres qui peut être fluctuant suivant le client utilisé pour appeler l'URL.
Désolé pour pour le retour tardif, mais vraiment merci pour vos approches différentes et à chacun de vous pour les améliorations ou évolutions qu'elles apportent.
J'ai réussi à produire le résultat voulu, reste juste à le faire évoluer avec vos différentes propositions.
Sinon J-M-L, j'utilise un ESP01et la seule bibliothèque que j'utilise est :
ESP8266WiFi.h
Mais si ça peut correspondre, n’hésite pas à développer.
Oui j'avais cet ESP01, il est suffisant pour ce que j'ai à faire avec du Wifi et j'ai pas beaucoup de place.
De plus je vais certainement tester de le faire fonctionner en OTA.
Qui fonctionne parfaitement, mais plus pour un soucis de lisibilité que de format de chaine.
Car mon format ne changera pas, je l'ai donc modifier comme ceci :
String httpText = "http://192.168.0.31/Mode=0&boucle=6&vitesse=200&duree=3000";
void setup()
{
Serial.begin(115200);
if (httpText.indexOf("boucle=") != -1 || httpText.indexOf("vitesse=") != -1 || httpText.indexOf("duree=") != -1)
{
int debut1 = httpText.indexOf("boucle=");
int fin1 = httpText.indexOf("&", debut1 +1);
int debut2 = httpText.indexOf("vitesse=");
int fin2 = httpText.indexOf("&", debut2 +1);
int debut3 = httpText.indexOf("duree=");
String paramBoucle = httpText.substring(debut1 +7, fin1);
String paramVitesse = httpText.substring(debut2 +8, fin2);
String paramDuree = httpText.substring(debut3 +6);
Serial.println("Paramètre du nombre de boucle = " + paramBoucle);
Serial.println("Paramètre de vitesse = " + paramVitesse);
Serial.println("Paramètre de durée = " + paramDuree);
}
}
void loop()
{
}
Merci pour vos interventions à tous, qui m'ont permis de bien comprendre et maitriser "indexOf"
Pour information : le jour où l'ESP8266 ne sera plus suffisant et l'encombrement sera une contrainte forte tu trouvera des toutes petites cartes avec ESP32 (un exemple parmi d'autres...)