lundi 31 janvier 2022

Visualiser les données d'un microcontrôleur avec Serial Studio

Serial Studio est un logiciel conçu pour afficher en temps réel, à l'écran d'un ordinateur,  les données qui lui sont acheminées par un microcontrôleur via une communication série (UART).  Plusieurs données différentes peuvent être affichées simultanément sous la forme de graphiques cartésiens, de jauges, de diagrammes en bâtons, etc. De plus, toutes les données sont automatiquement archivées sous la forme d'un fichier CSV.

Développé par Alex Spataru, Serial Studio est gratuit, open source et multi-plateforme; je l'ai utilisé sous Linux (Ubuntu), mais il existe également une version pour Windows et pour MacOS. J'ai fait mes tests avec Arduino Uno, mais n'importe quel microcontrôleur fera l'affaire.

Installation et démarrage de Serial Studio

Rendons-nous d'abord sur la page web de Serial Studio.

Le bouton "Install" vous permet de télécharger la version qui correspond à votre système d'exploitation.

La version Linux est un fichier AppImage: après l'avoir téléchargé, il s'agit de rendre le fichier exécutable (clic droit sur l'icône, on choisit "Propriétés" puis on coche "autoriser l'exécution du fichier comme un programme") et votre application est immédiatement fonctionnelle.

Lors du lancement de l'application, on voit très brièvement cet écran de démarrage...
 


...  puis une fenêtre comportant une console série, à gauche, et des réglages (settings) à droite.


À partir d'ici, les choses se compliquent un peu: une configuration est nécessaire avant de pouvoir utiliser Serial Studio.

Création d'un premier projet

Serial Studio a été conçu pour interpréter des données qui lui sont soumises en format JSON (JavaScript Object Notation). Deux options s'offrent à vous: vous pouvez programmer le microcontrôleur pour qu'il envoie les données en format JSON, ou vous pouvez fournir à Serial Studio un fichier JSON qui servira de modèle pour interpréter les données brutes transmises par le microcontrôleur. C'est cette deuxième option que je vous propose ("Parse via JSON project file").

Vous ne connaissez pas très bien le format JSON? Moi non plus!  Et ça n'a aucune importance: Serial Studio comporte un outil qui nous permettra de générer ce fichier d'une façon très conviviale.

Créons un premier projet simple dans lequel le microcontrôleur envoie de façon répétitive une donnée numérique qui devra être affichée en temps réel sous la forme d'un graphique cartésien.

Nous cliquons d'abord sur le bouton "JSON Editor", en haut à droite.

On choisit un tire pour notre premier projet (j'ai choisi "Projet1").

On clique ensuite sur le bouton "Add group". Un groupe peut contenir plusieurs données qu'on désire classer ensemble. Un même projet peut contenir plusieurs groupes, mais un seul groupe sera suffisant pour ce premier projet.

On peut donner un nom à ce groupe (j'ai choisi "Groupe 1"), puis on clique sur le bouton "Add dataset".

On donne un nom à cette donnée. Ici, je l'ai baptisée "Donnée 1" mais dans une application plus concrète, ce serait certainement plus pertinent de l'appeler "température", "luminosité", "vitesse", etc. On peut aussi définir les unités de mesure qui correspondent à cette donnée ("Units").

J'ai ensuite sélectionné "Generate plot" pour que le résultat soit affiché sur un graphique cartésien...

 ... j'ai également choisi le widget "Gauge" pour que le résultat s'affiche également sur une jauge...

 

... j'ai défini la valeur maximale et la valeur minimale que pourront prendre les valeurs (c'est optionnel pour le graphique cartésien, mais nécessaire pour que la jauge fonctionne correctement)...

...et j'ai cliqué sur le bouton "Save" en bas à droite.

On vous propose alors d'enregistrer le fichier JSON comportant ces paramètres à l'intérieur d'un dossier intitulé "Serial Studio", dans le répertoire "Documents". Les fichiers CSV dans lesquelles les données seront archivées seront générés au même endroit.

Si vous le désirez, vous pouvez ouvrir ce fichier JSON au moyen d'un éditeur de texte, afin de voir son contenu.

 

Programmation du microcontrôleur

Programmons maintenant notre microcontrôleur afin qu'il achemine périodiquement une valeur numérique par communication série.

Chaque envoi de donnée doit débuter par l'expression "/*" et se terminer par l'expression "*/" .

Voici un sketch Arduino qui calcule la valeur d'une fonction sinusoïdale variant entre -10 et +10, et qui envoie un résultat deux fois par seconde.

 -

 -

 Voici un échantillon des données générées par ce sketch:

 


Communication entre le microcontrôleur et Serial Studio

Pour établir la communication, il s'agit de sélectionner, dans le volet Setup de Serial Studio, le nom du port série correspondant au microcontrôleur ("COM port").

On choisit le même baud rate que celui qui a été utilisé dans programme du microcontrôleur, puis on clique sur le bouton  "Connect" en haut à droite.

Si les données reçues du microcontrôleur correspondent à la structure enregistrée dans le fichier json, le logiciel bascule en mode "Dashboard" et on peut voir les données s'afficher dans trois zones d'affichage: la valeur numérique, un graphique cartésien et une jauge. On peut rendre invisible n'importe laquelle des 3 zones au moyen des contrôles situés du côté gauche de l'écran. On peut aussi régler l'échelle de l'abscisse du graphique ("Points", soit le nombre de mesures conservées dans le graphique cartésien).

Envoi simultané de plusieurs données différentes

Essayons maintenant un projet un tout petit peu plus ambitieux: l'envoi simultané de 5 données différentes: deux valeurs numériques qui seront représentées sur un même graphique cartésien, une variable booléenne qui sera représentée à l'écran par une LED virtuelle (éteinte ou allumée), une valeur numérique représentée par une jauge et, finalement, une valeur numérique représentée par un diagramme en bâton.

Nous retournons donc à l'éditeur de JSON et créons un nouveau projet (bouton "Create new project".

Celui-là, je l'ai baptisé "Projet 2". J'ai créé un premier groupe ("Groupe 1") qui contiendra deux données qui seront affichées sur un même graphique cartésien. Pour cette raison, j'ai sélectionné, à droite du nom du groupe, l'item "Multiple data plot".

À l'intérieur du groupe 1, j'ai ajouté une première donnée ("Mesure 1")...

 ...puis une deuxième mesure ("Mesure 2"):


Je ne désire pas que les 3 données restantes apparaissent aussi sur le même graphique cartésien. Pour cette raison, je dois les placer dans un groupe distinct. Je créé donc un deuxième groupe ("Groupe 2"), que je laisse cette fois à l'option "Dataset widgets", et je crée, à l'intérieur du groupe 2, la mesure 3. Pour cette mesure, je coche l'option "Display LED" (cette donnée sera un booléen).

Toujours à l'intérieur du groupe 2, j'ajoute la mesure 4: une jauge pouvant varier de 0 à 10...


...puis la mesure 5, un diagramme en bâton pouvant varier de 0 à 20, mais qui sera affiché en rouge si la valeur dépasse 15.

 

Du côté Arduino, notre programme doit générer 5 valeurs séparées par des virgules, et encadrées par les expression "/*" et "*/".

Voici le sketch que j'ai utilisé:

 -

 -

...et voici un échantillon des messages générés:

Finalement, voici ce que ça donne lorsque j'établis la connexion entre Serial Studio et l'Arduino (j'ai masqué l'affichage "Groupe 2", qui était redondant et empêchait que tous les widgets soient visibles en même temps):

 

Conclusion

Pas mal du tout, ce logiciel!


Yves Pelletier (Facebook)