W5500 Ethernet GET Trame

Salut!

Je travaille sur un projet pour envoyer les valeurs d'un capteur de température et humidité sur un serveur via un GET.

La ligne dans la libraire est : client.println("GET /search?q=arduino HTTP/1.1");

Je change donc le /search?q=arduino par la trame que je dois envoyer sur ma base de donnée.

Le problème c'est que je n'arrive pas a créer ma trame. Dans cette trame j'ai deux valeurs uint16_t (Temperature et humidité) et j'ai besoin de les séparer par un "_" pour différentier et parser la trame dans mon php.

Mais voilà comment changer le "GET /search?q=arduino HTTP/1.1" par une variable, et comment construire une trame avec des nombre entier et un "_" ?!

vous déclarez un tableau de caractères qui est assez grand pour votre commande et vous utilisez les fonctions des librairies standard stdlib.h ou string.h pour remplir cette c-string. il faut vous assurer qu'elle soit terminée par un '\0'

évitez d'utiliser la classe String, vous allez vers des déconvenues...

petit exemple en construction "à la main" ou avec une fonction plus évoluée (mais qui va vous manger 1,5ko de mémoire flash)

const byte tailleCommande = 50;

char commande[tailleCommande + 1]; // +1 pour le '\0' à la fin

int valeur = 22;

void setup() {
  char petitBuffer[20]; // pour les conversions de nombres

  Serial.begin(115200);
  strcpy(commande, "GET /search?q=");

  // on transforme la variable valeur en sa représentation textuelle en base 10 (décimal)
  itoa(valeur, petitBuffer, 10); // http://www.cplusplus.com/reference/cstdlib/itoa/

  // on ajoute à la fin de commande
  strcat(commande, petitBuffer); // http://www.cplusplus.com/reference/cstring/strcat/?kw=strcat

  // on affiche le résultat
  Serial.print(F("La commande construite est: ["));
  Serial.print(commande);
  Serial.println(F("]"));

  // une autre option qui prend beacoup plus de mémoire car la fonction sprintf est grande
  sprintf(commande, "GET /search?q=%d", valeur); // http://www.cplusplus.com/reference/cstdio/sprintf/?kw=sprintf

  // on affiche le résultat
  Serial.print(F("La commande avec sprintf est: ["));
  Serial.print(commande);
  Serial.println(F("]"));

}

void loop() {}

si vous exécutez cela dans la console à 115200 bauds vous verrez

[sub][color=blue]La commande construite est: [GET /search?q=22]
La commande avec sprintf est: [GET /search?q=22]
[/color][/sub]

idéalement il faut utiliser strlen() avant de concatener ou rajouter des caractères à la fin de la chaîne pour être sûr de ne pas déborder en mémoire