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 ?
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.
#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
}
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