Extraire des données depuis le port serie

Bonjour à tous, je souhaiterais extraire des données du port série.

En fait des données transite sur le port serie du style:
Temp=10, Hum=50 etc...

Je souhaiterais les extraire pour les mettre dans des variables afin de pouvoir travailler avec.
Est ce que quelqu'un aurait la procédure pour faire cela ?

Bonjour

il faut faire un parsing (split) des données par rapport a la virgule.
puis pour chaque donnée rechercher le = et couper tout ce qu il y a avant = y compris ... le reste c'est la donnée.

Bonjour biker32

Est ce que ces données sont bien séparées par des virgules ou c'est une succession de données, ainsi;

Temp=10
Hum=50
Vitesse=120

Quel terminaison y as t il pour chaque ordre, en général "nouvelle ligne" ou \n (ASCII 10)

Cordialement
jpbbricole

Bonjour, mes données transitent en Json de ce type:

{"Numruche":1.00,"Tension":5.32,"Temperature_INT":35.13,"Temperature_EXT":27.08,"Humidite":69.39,"CompteurE":0,"CompteurR":341,"Poids":55.51}

Pourriez-vous me donner un exemple pour extraire Temperature_int s'il vous plaît ?

Merci.

Bonjour,
si c'est un json il existe d’excellente bibliothèque qui font le boulot toutes seules.

il y en a surement d'autres plus ou moins adaptées.

Il faut que le json soit correctement créé suivant la norme.

Merci, je vais bûcher tout ça !

Je sèche... :woozy_face: dans cet exemple:

#include <ArduinoJson.h>

void setup() {
  // Initialize serial port
  Serial.begin(9600);
  while (!Serial) continue;

  // Allocate the JSON document
  //
  // Inside the brackets, 200 is the capacity of the memory pool in bytes.
  // Don't forget to change this value to match your JSON document.
  // Use arduinojson.org/v6/assistant to compute the capacity.
  StaticJsonDocument<200> doc;

  // StaticJsonDocument<N> allocates memory on the stack, it can be
  // replaced by DynamicJsonDocument which allocates in the heap.
  //
  // DynamicJsonDocument doc(200);

  // JSON input string.
  //
  // Using a char[], as shown here, enables the "zero-copy" mode. This mode uses
  // the minimal amount of memory because the JsonDocument stores pointers to
  // the input buffer.
  // If you use another type of input, ArduinoJson must copy the strings from
  // the input to the JsonDocument, so you need to increase the capacity of the
  // JsonDocument.
  char json[] =
      "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";

  // Deserialize the JSON document
  DeserializationError error = deserializeJson(doc, json);

  // Test if parsing succeeds.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }

  // Fetch values.
  //
  // Most of the time, you can rely on the implicit casts.
  // In other case, you can do doc["time"].as<long>();
  const char* sensor = doc["sensor"];
  long time = doc["time"];
  double latitude = doc["data"][0];
  double longitude = doc["data"][1];

  // Print values.
  Serial.println(sensor);
  Serial.println(time);
  Serial.println(latitude, 6);
  Serial.println(longitude, 6);
}

void loop() {
  // not used in this example
}
char json[] =
      "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";

Le Json est directement téléchargé dans l'arduino. Mais je ne parviens pas à savoir comment lire celui-ci par le port com. Faut il faire un Serial.read() ?
Genre char json[] = Serial.read(); dans le loop ?
Ca ne marche pas si je fais ça "initializer fails to determine size of 'json'".

Quand tu sèche la première chose à faire est de regarder ce que dit la documentation sur la fonction que tu pense utiliser.
Dans ce cas, la documentation indique que la fonction retourne le premier caractères disponible dans l'entrée série ou -1 si il n'y a pas de caractère disponible.

Je crois que @J-M-L a fait un tutoriel sur la récupération de donnée sur une liaison série aussi :slight_smile:

➜ mon petit tuto sur le sujet

petite disgression, ton tuto n'est pas dans le post regroupant les principaux tutoriels ?

Si (le 3ème)

Comme il n'a pas le même numéro de post, j'ai cru qu'il était différent :+1:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.