Mise en forme de données JSON sur serial

Bonjour,

Je souhaite afficher les données issues de mon arduino sur un serveur raspberry en liaison série. Plusieurs méthodes trouvées sur le web suggèrent de mettre en forme une string JSON dans le programme arduino avant de l'envoyer au serveur dont un websocket extrait les variables. Exemple piqué ailleurs pour un gyro:

   // form a JSON-formatted string:
    String jsonString = "{\"x\":\"";
    jsonString += x;
    jsonString +="\",\"y\":\"";
    jsonString += y;
    jsonString +="\",\"z\":\"";
    jsonString += z;
    jsonString +="\"}";

J'ai environ une dizaine de variables à envoyer au serveur toutes les 200ms (approximativement) et j'ai du mal à me représenter l'utilisation des ressources arduino quand il faut envoyer tout ça sur le port série.

Me conseillez-vous de garder la mise en forme conseillée que je viens de décrire ou de simplifier en envoyant sur le serial quelque chose du type "variable1,variable2,variable3..." dont le tri sera effectué côté serveur pour ensuite tout convertir en JSON ?

J'espère avoir été assez clair.

Merci.

Bonjour,

Pour avoir déjà été confronté exactement à la même question, je te conseille d’envoyer sur la liaison série le moins de caractères possible. Donc, je suggère “variable1,variable2,variable3…”.

Merci de ta réponse qui implique une autre question: Sachant qu'avec l'exemple ci-dessus, ma string JSON est interprétée par cette fonction:

// listen for new serial data:  
    myPort.on('data', function (data) {
        // Convert the string into a JSON object:
        var serialData = JSON.parse(data);
        // send a serial event to the web client with the data:
        socket.emit('serialEvent', serialData);
    });

A quoi ressemblerait le code permettant de trier la string du type "variable1,variable2,variable3" ?

Un truc de ce style (copier-coller brut d'une de mes fonctions, je te laisse faire fonctionner ton intelligence pour l'adapter à ton besoin):

  def read(self,size):
    try:
        sample_string = self.ser.readline()
        sample_values = sample_string.split(",")
        if (len(sample_values) == size):
            return sample_values
        else:
            print sample_string
            return -1
    except:
        print "Problem"
        pass

3Sigma: Un truc de ce style (copier-coller brut d'une de mes fonctions, je te laisse faire fonctionner ton intelligence pour l'adapter à ton besoin):

Salut, je reviens sur mon post initial. La réponse que tu m'as apportée était en python. J'ai réussi en js. Je balance donc mes données sur port série, elles sont réceptionnées par un raspberry avec serveur nodejs.

Si certains se trouvent un jour dans mon cas, la solution pour par exemple la 4eme variable d'une string citée précédemment était:

socket.on('serialEvent', function (data) {
                console.log(data);              
                var donneesarray = data.split(",");
                $('#variable4').html(donneesarray[3]);
            });