Programmes de traçage de données en série


36

J'ai besoin de tracer des données série d'Arduino.

J'ai besoin d'aide pour:

  1. Différents formats de données (par exemple, signé, non signé, 8 bits, 16 bits);
  2. Trace plusieurs données sur les mêmes axes;
  3. Exporte / Importe les données du fichier.

Comme le traçage de données série à partir d’Arduino est un besoin courant, ma question est la suivante: quels programmes / utilitaires sont disponibles pour le traçage de données série à partir d’Arduino qui répondent aux besoins ci-dessus?

Quels sont les avantages / inconvénients de la méthode que vous avez suggérée?


J'ai décidé de rouvrir avec votre dernière modification. Dans l’état actuel de la question, elle semble porter sur le sujet, car elle est spécifique. Je ne comprendrai personne (puisqu'il n'y a pas beaucoup de ce genre de questions): si cela sort trop du sujet, je devrais peut-être intervenir. Cependant, la probabilité que cela se produise est rare. :) @JRobert Si GnuPlot répond aux exigences de la question, postez-le.
Pingouin anonyme

1
La page "Interfaces avec d'autres logiciels" de la salle de jeux Arduino montre de nombreuses façons de tracer des données série d'un Arduino sur un iPhone, un PC Windows, un PC Linux, etc.
David Cary

Réponses:


19

Il existe de bonnes applications pour visualiser les données en série, notamment:

(Ceci est un wiki de communauté, vous pouvez développer la liste.)


Je suis confus. J'ai posté ma propre solution ci-dessous mais maintenant je ne suis pas sûr qu'il ne serait pas préférable de modifier votre message car c'est un wiki. Qu'est-ce que tu penses ?
Overdrivr

@Overdrivr Bien sûr, allez étendre ce wiki pour le bien des autres!
Niutech

8

GnuPlot

Avantages: Il est très flexible, scriptable et disponible gratuitement.

Inconvénients: Un peu complexe à apprendre (mais j’ai compris comment démarrer en quelques minutes et très fonctionnel en une heure ou deux) s’exécute dans une fenêtre de terminal (si on considère que cela est un inconvénient).

Quelque chose que j'ai trouvé très utile était de le programmer pour recharger périodiquement le fichier journal de mon programme terminal afin d'obtenir un graphique dynamique au fur et à mesure que mon expérience progressait.

Image de GnuPlot



Edit: Voici le script GnuPlot qui le trace:

#!/usr/local/bin/gnuplot -rv
# Note reverse video here ^^^   til I find a way to put it in the script

# gpFanCtl - Plots DiffThermo fan controller data (aloft, alow, Tdiff, fan-state).
# $Id: gpFanCtl,v 1.8 2014-04-28 09:40:51-04 jrobert Exp jrobert $

set terminal x11 1 noraise
set xtics 3600
set mxtics 4
set xdata time

set ytics 1 nomirror
set mytics 2

set y2range [0:3]
set y2tics 1
set my2tics 4

set grid
set ylabel 'Temperature, degC'
set y2label 'Tdiff, degC' textcolor rgb '#00CD63'

cd '/Users/jrobert/Desktop'
plot "Logfile.txt" using ($0*4):1 title "Aloft" with lines lc rgb "red",\
     "Logfile.txt" using ($0*4):2 title "Alow" with lines lc rgb "#3982FF",\
     "Logfile.txt" using ($0*4):3 title "Tdiff" with lines lc rgb "#00CD63" axis x1y2,\
     "Logfile.txt" using ($0*4):4 title "Fan" with lines lc rgb "orange" axis x1y2;
pause 4
refresh
reread

1
Cela a l'air bien. Pourriez-vous ajouter du code de démonstration?
geometrikal

Mais il trace les données de Logfile.txt, pas les données série en temps réel. Comment le connecter à un port série?
niutech

1
Non, ce script n'est pas "en temps réel" - il pourrait prendre jusqu'à 4 secondes de retard. Logfile.txt est le fichier de capture généré par un programme de terminal. Dans mon cas, le système de collecte de données échantillonne et enregistre toutes les 4 secondes et le script GnuPlot réplique le fichier journal toutes les 4 secondes. C'est assez dynamique pour ce que je fais avec ça (surveillance de la température de la pièce).
JRobert

7

J'utilise Matplotlib pour tout tracé que je dois faire.

Ce n'est pas spécifique à Arduino, mais c'est une excellente boîte à outils de traçage Python .

J'ai construit un certain nombre d'applications permettant de tracer en temps réel les données d'une variété de microcontrôleurs vers un graphique, mais il s'agissait en réalité d'un processus en deux étapes: 1. Obtenir les données d'un périphérique dans un ordinateur, 2. Tracer des données en temps réel .

Vraiment, je pense que vous devriez diviser votre question en deux parties:

  • Comment obtenir facilement des données d’un périphérique série Arduino / Any dans un ordinateur?
  • Qu'est-ce qu'une bonne bibliothèque de traçage facile à utiliser?

+1 La vidéo "Matlab du graphe temps réel Arduino" [ youtube.com/watch?v=ntHZsLmNkgw] utilise-t-elle la même technique?
David Cary

Oui. Il utilise un appel qui lit les données arduino dans une variable matlab, puis un appel qui met à jour le graphique matlab avec la variable matlab.
Connor Wolf

Matplotlib est python, pas matlab.
DaveP

Je ne suis pas d’accord avec vous, cette question ne devrait pas être divisée en 2. Il existe des solutions (comme celle que j’ai affichée ci-dessous) qui prennent en charge les deux, car il est agaçant de redonner la roue à la surveillance et au contrôle à distance des applications Arduino, et aussi parce que l'écriture de code python pour les graphiques en temps réel est en réalité très loin d'être triviale. On peut faire quelque chose avec matplotlib mais il existe clairement de meilleures alternatives pour cela, comme pyqtgraph.
Overdrivr

Pour la partie 1: obtenir des données sur Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot (gratuit). Il fait tout ce dont vous avez besoin et bien plus encore.

Autres caractéristiques:

  • Zoom sur les données
  • Cliquez sur les points de données pour voir les valeurs
  • Renvoyer les commandes à Arduino
  • Ajuster le nombre total de points tracés
  • Possibilité d'afficher chaque canal dans son propre tracé auto-échelonné
  • Interprète les paquets binaires, ASCII et personnalisés
  • Le mode démo vous permet de jouer avec des fonctionnalités

entrez la description de l'image ici


1
Bonne réponse, j’ai aimé serialplot, le port COM et le débit en bauds ont été trouvés automatiquement;
Hamish_Fernsby le

C'est le plus simple et facile à utiliser - mais je souhaite qu'il y ait un mac binaire :)
willwade

5

Répondant à ma propre question ici .. J'utilise le Panneau de configuration de pont comme mentionné.

Avantages: Beaucoup de fonctionnalités.

Inconvénients: difficile à installer et très faible rapport de syntaxe / erreur.

Pour utiliser: Vous devez écrire les données Arduino sur le port série, un octet à la fois. Pour un type de données int, cela ressemblerait à ceci:

// RX8 [h=43] @1Key1 @0Key1
Serial.print("C");
Serial.write(data>>8);
Serial.write(data&0xff);

Dans Bridge, la commande pour lire les données est la suivante:

RX8 [h=43] @1Key1 @0Key1

RX8 est la commande de lecture [h = 43] signifie que le prochain octet valide est "C" en ASCII, puis l'octet haut de Key1, puis l'octet bas de Key1.

Cela ressemble à ceci dans Bridge:

entrez la description de l'image ici

entrez la description de l'image ici


5

Vous pouvez essayer serialchart . C'est un programme assez étroit. Il fait exactement ce que vous avez demandé. Le seul inconvénient est qu'il nécessite des données au format CSV (ne correspond pas au premier point).

Capture d'écran de la page du projet:

Exemple


J'ai essayé et trouvé très maladroit de fonctionner, pas de configuration par défaut, pas d'échelle automatique, après une demi-heure d'utilisation de la syntaxe, je n'avais toujours pas d'intrigue, donc j'ai abandonné et utilisé SerialPlot qui fonctionné en quelques minutes, il suffisait de spécifier le texte ascii et le nombre de canaux.
Hamish_Fernsby le

4

Vous pourriez être intéressé par Telemetry Voir sur Github . C’est un protocole de communication très simple à utiliser, avec une interface claire, qui permet une communication bidirectionnelle avec les périphériques Arduino / Mbed.

Si vous ne voulez pas lire ce long post, allez voir une présentation de toutes les fonctionnalités qu'il contient.

La puissance de cette bibliothèque provient de l'interface de ligne de commande du bureau (qui ne nécessite aucune connaissance en programmation en python).

Il est capable d'ouvrir des graphiques hautement performants (beaucoup plus élevés que ce que l'on peut faire avec matplotlib) en tapant simplement une commande .

Le protocole prend en charge les structures de données complexes . Pour le moment, les tableaux et les tableaux épars peuvent être envoyés à partir du tableau intégré.

Les tracés ouverts à partir de l'interface de ligne de commande comprennent le type de données. Pour les tableaux, plutôt que de tracer chaque échantillon en fonction du temps, l'échantillon sera tracé par rapport à son propre index.

Dans un proche avenir, il est prévu d'ajouter un support pour les coordonnées spatiales (données xyz), ce qui vous permettra de tracer immédiatement des données spatiales. Une fois de plus, les parcelles vont tout comprendre, tracer vos données dans un espace 2D ou 3D et vous pouvez vous concentrer sur le développement de votre application.

Je crois que ces fonctionnalités sont simplement uniques pour un tel projet.

CLI de pytélémétrie Version PyPI

Une fois installé avec pip, la ligne de commande peut être démarrée avec

pytlm

Ensuite , vous pouvez connect, ls(liste) sujets reçus, les printdonnées reçues sur un sujet, pub(publication) sur un sujet, ou d' ouvrir un plotsur un sujet pour afficher les données reçues en temps réel

entrez la description de l'image ici

entrez la description de l'image ici

Commencer

Wiki

PS: je suis l'auteur.

Je l'ai développé parce que je ne pouvais pas trouver une solution qui me permettrait de:

  • écrire rapidement des scripts PC pour contrôler un Arduino
  • déboguer rapidement
  • tracer des données complexes (pas seulement une valeur variant dans le temps)

tout ce qui précède sans utiliser de solutions propriétaires ni d’interfaces graphiques graphiques gonflées.

En utilisant cette bibliothèque, le temps nécessaire pour établir une communication entre Arduino et un PC est passé généralement d’une demi-journée à 5 minutes.


PS: la journalisation des données du port série dans les packages python (données brutes et données décodées) est également entièrement prise en charge. J'ai l'intention de l'utiliser pour implémenter une fonction de relecture hors ligne (simuler un flux de données série)
Overdrivr

4

Personne n'avait mentionné le traitement qui est super polyvalent. Vous pouvez faire beaucoup plus que simplement tracer, mais si c'est tout ce que vous voulez, vous pouvez utiliser la bibliothèque gwoptics; Connectez Arduino et Processing comme indiqué ici .


2

J'ai créé un outil équivalent en python qui imprimait des données en temps réel à partir de l'accéléromètre ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

peut-être qu'il sera utile pour quelqu'un

entrez la description de l'image ici

Il suffit de choisir le port série et la vitesse et envoyer une série de données sur le format suivant:

  • 3 entrées, chaque entrée est un 2 octets (complément de deux)
  • 6 octets séparés par un espace
  • le paquet est une chaîne terminée par '\ n'

Pourrait être facilement adapté pour changer ce format


Pouvez-vous expliquer comment l’utiliser et quels en sont les avantages et les inconvénients?
Le gars avec le chapeau

2

Vous pouvez utiliser MATLAB Student Edition , ce qui peut vous faire gagner du temps pour une analyse plus approfondie. Vous pouvez simplement ouvrir le port COM dans MATLAB et tracer le signal reçu et / ou enregistrer le signal dans l'espace de travail ou autre. MATLAB rend tout facile!


2
Bienvenue sur Arduino SE! Pouvez-vous modifier votre réponse pour ajouter plus d'informations décrivant comment cela répond aux besoins du PO et peut-être un peu plus d'informations comme un lien ou une photo? Merci!
Pingouin anonyme

Bonne réponse, je n'aurais pas pensé à utiliser Matlab, il y a un fil SO à ce sujet ici stackoverflow.com/questions/19483098/…
Hamish_Fernsby

2

Le format CSV est le plus polyvalent pour toutes les données (signées / non signées, tailles et précision variées).

Outil multiplate -forme (écrit en Java / Scala) Scsvlog peut recevoir / analyser des chaînes CSV à partir d'un port / socket série, afficher des valeurs et dessiner des graphiques (jusqu'à 8).


L'outil ne peut plus être trouvé maintenant, malheureusement - le lien d'origine est mort et je n'arrive pas à trouver de copie.
Арсений Пичугин le

2

Vous pouvez essayer le logiciel que j'ai développé pour cette proposition. Il est destiné à être facile à utiliser. Voir SerialGraphicator - Client à port série libre et à source libre capable de gérer les valeurs de graphique reçues au format JSON.


1

Bien que je ne l'utilise pas moi-même, "rqt_plot" sur le PC semble être un moyen populaire de tracer des données sur un PC qui passe sur un port série d'un Arduino qui exécute une esquisse incluant la bibliothèque rosserial_arduino ou la bibliothèque ros_arduino_bridge .


1

Je sais que la question est très ancienne, mais j’ai récemment créé une application Mac qui résout très bien ce problème. Vous pouvez trouver plus d'informations à ce sujet sur www.bloonapp.com. Vous pouvez consulter des vidéos de démonstration sur le site Web.entrez la description de l'image ici


1
Depuis le 1er août 18, ce site est mort.
Dan

1

Je sais que vous recherchiez probablement une interface graphique plus avancée, mais j’ai réussi à reproduire une tâche que l’on ferait normalement avec un oscilloscope: Sortie du traceur série Arduino

En utilisant le traceur série dans l'IDE Arduino et un module ADC, vous pouvez obtenir 3 dollars sur eBay. J'admets que c'est un peu brutal, mais il vaut peut-être la peine de jouer avec l'outil pendant un moment avant d'investir dans des solutions au niveau Python / Matlab / ect. C'était extrêmement facile à utiliser. Il ne faudrait pas beaucoup ajouter l’enregistrement sur carte SD au processus.

Voir: https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/


0

Télémétrie Viewer

Avantages:

  1. Facile à utiliser
  2. Interface utilisateur intuitive et flexible
  3. Open Source et gratuit
  4. Différents types de graphes
  5. Taux de mise à jour graphique très rapide

Désavantages:

  1. Développement arrêté
  2. Le format de données binaire n'est pas encore complet.
  3. Contrôles graphiques primitifs tels que zoom, capture d'écran et ... entrez la description de l'image ici

0

Serial Plotter est un programme simple créé avec Electron qui reçoit les données au format suivant: data1,data2,timestamp;et les convertit en un graphique en temps réel.

entrez la description de l'image ici


0

Presque utile. Il faut:

  1. enregistrement de données série dans un fichier OU
  2. représentation graphique à partir d'un fichier et mise à jour toutes les xxx millisecondes.

Live Graph est une meilleure option et je l’utilise en conjonction avec Tera Term, qui récupère les données via le lien USB / série (et les enregistre dans un fichier journal qui est ensuite interrogé par Live Graph).

Live Graph est légèrement bogué lors de la mise en cache des données et je n'ai pas trouvé le moyen de définir une fenêtre mobile pour afficher les résultats. De plus, l'affichage de plusieurs graphiques nécessite une mise à l'échelle manuelle, mais malgré tout cela reste très utile. C'est écrit en java, vous aurez donc besoin du JRE. Je préfère ceci plutôt que d’avoir à installer python comme le font certains des autres programmes graphiques. Un autre inconvénient est qu'il ouvre 4 fenêtres différentes, ce qui est pénible lorsque je veux basculer entre elle et Tera Term.

Je n'ai pas encore trouvé de logiciel

  1. Un exécutable (.exe) pour qu'il n'ait pas de dépendance externe
  2. Inclut un émulateur de terminal ou un enregistreur de données série
  3. Enregistre les données série
  4. Représente graphiquement plusieurs éléments d'un CSV
  5. Autorise les données CSV ET délimitées par des tabulations (ce qui est beaucoup plus facile à lire car elles défilent tout en surveillant simultanément le graphique.
  6. Permet de définir différentes échelles pour chaque graphique superposé sans avoir à tout redimensionner à [0..1] ou à définir un multiplicateur, c.-à-d. Permettant de définir une plage [y0..y1] pour chaque élément graphique.

1
Bienvenue sur Arduino SE! Votre réponse est informative, mais pourriez-vous s'il vous plaît améliorer la mise en forme de la réponse à l'aide du guide de démarquage que vous pouvez visualiser en appuyant sur le ?bouton dans l'éditeur.
Avamander

0

J'utilise processing.org pour le traçage en série d'Arduino. C'était la seule application que je pouvais trouver qui me permettait de créer de vrais histogrammes (par exemple, un million d'événements dans une centaine de bacs) et d'afficher divers numéros d'information en plus de sigma pour chaque canal. Deux problèmes majeurs: A) il s’est avéré être basé sur Java sans octets non signés B) synch ig avec le tampon circulaire et les marqueurs d’entrée requis dans les données. (haute vitesse, pas de poignée de main)


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.