Programme zum Plotten von seriellen Daten


36

Ich muss serielle Daten von Arduino zeichnen.

Ich benötige Unterstützung für:

  1. Verschiedene Datenformate (zB vorzeichenlos, 8 Bit, 16 Bit);
  2. Zeichnet mehrere Daten auf denselben Achsen.
  3. Exportiert / Importiert Dateidaten.

Da das Plotten von seriellen Daten von Arduino eine häufige Anforderung ist, lautet meine Frage: Welche Programme / Dienstprogramme stehen zum Plotten von seriellen Daten von Arduino zur Verfügung, die die oben genannten Anforderungen erfüllen?

Was sind die Vor- / Nachteile der von Ihnen vorgeschlagenen Methode?


Ich habe beschlossen, mit Ihrer letzten Bearbeitung wieder zu öffnen. Wie diese Frage steht, scheint es ein Thema zu sein, weil es spezifisch ist. Ich werde es jedem klar sein (da es nicht viele dieser Arten von Fragen gibt): Wenn dies zu unangebracht wird, muss ich möglicherweise eingreifen. Die Wahrscheinlichkeit, dass dies geschieht, ist jedoch gering. :) @JRobert Wenn GnuPlot die Anforderungen in der Frage erfüllt, poste es.
Anonym Pinguin

1
Die Seite "Interfacing with Other Software" auf dem Arduino Playground zeigt eine Reihe von Möglichkeiten zum Plotten serieller Daten von einem Arduino auf ein iPhone, einen Windows-PC, einen Linux-PC usw.
David Cary

Antworten:


19

Es gibt einige gute Anwendungen zur Visualisierung der seriellen Daten, darunter:

  • MegunoLink (29,95 USD; Lite- frei) - Zeichnen, Protokollieren, Programmieren, Berichterstellen und mehr.

    MegunoLink

  • MakerPlot (39 US-Dollar) - digitales und analoges Plotten, Überwachen, benutzerdefinierte Schnittstellen und mehr.

    MakerPlot

  • ArduinoPlot (kostenlos) - einfaches Plotten.

    ArduinoPlot

  • Arduino-Plotter (kostenlos) - einfaches, leichtes Plotten mit Unterstützung für alle primitiven Typen

    Arduino-Plotter

  • Bridge Control Panel (kostenlos) - Protokollieren, Plotten und mehr.

    Bridge-Systemsteuerung

  • Echtzeit- Plotter (kostenlos) - 6-Kanal-Datenplotter.

    EchtzeitPlotter

  • Serieller Echtzeit-Datenplotter (kostenlos) - CSV-Datenplotten, Protokollieren und mehr.

  • SimPlot (kostenlos) - 4-Kanal-Plotten.

    SimPlot

  • Arduino Serial Plotter (kostenlos) - im Arduino Editor unter Tools> Serial Plotter erstellt .

    Arduino Serial Plotter

(Dies ist ein Community-Wiki. Sie können die Liste erweitern.)


Ich bin verwirrt. Ich habe unten meine eigene Lösung gepostet, bin mir aber nicht sicher, ob es nicht besser wäre, Ihren Beitrag zu bearbeiten, da es sich um ein Wiki handelt. Was denkst du ?
Overdrivr

@Overdrivr Sicher, erweitern Sie dieses Wiki um anderer willen!
Niutech

8

GnuPlot

Vorteile: Es ist sehr flexibel, skriptfähig und frei verfügbar.

Nachteile: Ein bisschen komplex zu lernen (aber ich habe herausgefunden, wie man in ein paar Minuten anfängt und in ein oder zwei Stunden funktioniert), läuft in einem Terminalfenster (wenn Sie das für einen Nachteil halten).

Etwas, das ich als sehr nützlich empfand, war, es per Skript zu erstellen, um die Protokolldatei meines Terminalprogramms regelmäßig neu zu laden, sodass ich im Verlauf meines Experiments ein dynamisches Diagramm erhielt.

Bild von GnuPlot



Bearbeiten: Hier ist das GnuPlot-Skript, das es zeichnet:

#!/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
Das sieht gut aus. Könnten Sie einige Demo-Code hinzufügen?
geometrikal

Es zeichnet jedoch die Daten aus Logfile.txt und nicht die seriellen Echtzeitdaten. Wie verbinde ich es mit einer seriellen Schnittstelle?
Niutech

1
Nein, dieses Skript ist nicht "Echtzeit" - es kann bis zu 4 Sekunden zurückliegen. Logfile.txt ist die Erfassungsdatei, die von einem Terminalprogramm ausgegeben wird. In meinem Fall erfasst und protokolliert das Datenerfassungssystem alle 4 Sekunden und das GnuPlot-Skript erstellt alle 4 Sekunden ein Replot der Protokolldatei. Dies ist dynamisch genug für das, was ich damit mache (Überwachung der Raumtemperaturen).
JRobert

7

Ich benutze Matplotlib für jede Zeichnung, die ich machen muss.

Es ist in keiner Weise arduino-spezifisch, aber es ist ein ausgezeichnetes Python- Plotter-Toolkit.

Ich habe eine Reihe von Anwendungen erstellt, mit denen Daten von verschiedenen Mikrocontrollern in Echtzeit in einem Diagramm dargestellt werden. Dies war jedoch eher ein zweistufiger Prozess: 1. Daten vom Gerät in den Computer übertragen, 2. Echtzeitdaten darstellen .

Wirklich, ich denke, Sie sollten Ihre Frage in zwei Teile aufteilen:

  • Wie können Sie Daten von einem Arduino / einem beliebigen seriellen Gerät auf einfache Weise in einen Computer übertragen?
  • Was ist eine gute Plot-Bibliothek, die einfach zu bedienen ist.

+1. Verwendet das Video "Arduino Real Time Plot Matlab" [ youtube.com/watch?v=ntHZsLmNkgw] dieselbe Technik?
David Cary

Ja. Es verwendet einen Aufruf, der die Arduino-Daten in eine Matlab-Variable liest, und dann einen Aufruf, der das Matlab-Diagramm mit der Matlab-Variablen aktualisiert.
Connor Wolf

Matplotlib ist Python, nicht Matlab.
DaveP

Ich bin mit Ihnen nicht einverstanden, diese Frage sollte nicht in 2 geteilt werden. Es gibt Lösungen (wie die, die ich unten gepostet habe), die sich um beides kümmern, weil es ärgerlich ist, das Rad für die Fernüberwachung und -steuerung von Arduino-Anwendungen neu zu konfigurieren. und auch, weil das Schreiben von Python-Code für Echtzeit-Plots eigentlich alles andere als trivial ist. Dinge können mit matplotlib erledigt werden, aber es gibt eindeutig bessere Alternativen dafür, wie zum Beispiel pyqtgraph.
Overdrivr

Für Teil 1: Abrufen von Daten von Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot (kostenlos). Es macht alles was Sie brauchen und noch viel mehr.

Andere Eigenschaften:

  • Vergrößern Sie die Daten
  • Klicken Sie auf Datenpunkte, um Werte anzuzeigen
  • Senden Sie Befehle zurück an Arduino
  • Passen Sie die Gesamtzahl der gezeichneten Punkte an
  • Möglichkeit, jeden Kanal in einem eigenen Plot mit automatischer Skalierung anzuzeigen
  • Interpretiert Binär-, ASCII- und benutzerdefinierte Pakete
  • Im Demo-Modus können Sie mit Funktionen spielen

Bildbeschreibung hier eingeben


1
Gute Antwort, ich mochte den seriellen Plot, er fand meinen COM-Port und die Baudrate automatisch, ich musste nur von binär auf CSV umsteigen und auf 3 Kanäle (für ein Magnetometer) erhöhen und er plottete gut.
Hamish_Fernsby

Dies ist die sauberste und einfachste - aber ich wünschte, es gäbe einen Mac Binary :)
willwade

5

Hier beantworte ich meine eigene Frage. Ich verwende Bridge Control Panel wie erwähnt.

Vorteile: Viele Funktionen.

Nachteile: Schwieriges Setup und sehr schlechte Syntax- / Fehlerberichterstattung.

Verwendung: Sie müssen die Arduino-Daten byteweise über den seriellen Port schreiben. Für einen int-Datentyp würde dies wie folgt aussehen:

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

In Bridge lautet der Befehl zum Lesen von Daten:

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

RX8 ist der Lesebefehl [h = 43] bedeutet, dass das nächste gültige Byte in ASCII "C" ist, dann das High-Byte von Key1 und dann das Low-Byte von Key1

In Bridge sieht es so aus:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben


5

Sie können serialchart versuchen . Es ist ein ziemlich knappes Vorwärtsprogramm. Es macht genau das, was Sie gefragt haben. Der einzige Nachteil ist, dass Daten im CSV-Format benötigt werden (erfüllt nicht den ersten Punkt).

Screenshot von der Projektseite:

Beispiel


Ich habe das ausprobiert und fand es sehr umständlich, mit der Arbeit fertig zu werden, keine Standardkonfiguration, keine automatische Skalierung, nach einer halben Stunde ohne Syntax hatte ich immer noch keinen Plot mit nur einer geraden Linie, also habe ich aufgegeben und SerialPlot verwendet arbeitete innerhalb weniger Minuten, musste nur ASCII-Text und Anzahl der Kanäle angeben.
Hamish_Fernsby

4

Das könnte Sie auch interessieren Telemetry See on Github . Es ist ein einfach zu verwendendes Kommunikationsprotokoll mit einer sauberen Schnittstelle, das eine bidirektionale Kommunikation mit Arduino / Mbed-Geräten ermöglicht.

Wenn Sie diesen langen Beitrag nicht lesen möchten, lesen Sie die exemplarischen Vorgehensweisen zu allen fantastischen Funktionen

Die Leistungsfähigkeit dieser Bibliothek kommt von der Desktop-Befehlszeilenschnittstelle (für die keine Programmierkenntnisse in Python erforderlich sind ).

Es ist in der Lage, Hochleistungsdiagramme (viel höher als mit matplotlib) durch Eingabe eines Befehls zu öffnen .

Das Protokoll unterstützt komplexe Datenstrukturen . Vorerst Arrays und Sparse - Arrays können aus dem Embedded Board gesendet.

Die Diagramme, die über die Befehlszeilenschnittstelle geöffnet werden, verstehen den Datentyp. Bei Arrays wird anstelle der Darstellung der einzelnen Stichproben über der Zeit die Stichprobe anhand ihres eigenen Index dargestellt.

In naher Zukunft ist geplant, die Unterstützung für räumliche Koordinaten (xyz-Daten) hinzuzufügen , damit Sie räumliche Daten sofort zeichnen können. Auch hier werden die Zeichnungen alles herausfinden, Ihre Daten im 2D- oder 3D-Raum darstellen und Sie können sich auf die Entwicklung Ihrer App konzentrieren.

Ich glaube, dass diese Funktionen für ein solches Projekt einfach einzigartig sind .

Pytelemetrie CLI PyPI-Version

Einmal installiert mit pip, kann die Kommandozeile mit gestartet werden

pytlm

Dann können Sie connect, ls(Liste) erhielt Themen, printempfangenen Daten zu einem Thema, pub(veröffentlichen) zu einem Thema, oder öffnen Sie ein plotzu einem Thema in Echtzeit empfangenen Daten angezeigt werden

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Loslegen

Wiki

PS: Ich bin der Autor.

Ich habe es entwickelt, weil ich keine Lösung gefunden habe, die mir Folgendes ermöglicht:

  • Schreiben Sie schnell PC-Skripte, um ein Arduino zu steuern
  • schnell debuggen
  • komplexe Daten darstellen (nicht nur einen zeitlich variierenden Wert)

All dies ohne proprietäre Lösungen oder aufgeblähte GUIs.

Unter Verwendung dieser Bibliothek dauerte das Einrichten einer Kommunikation zwischen Arduino und PC in der Regel einen halben Tag bis zu 5 Minuten.


PS: Die Protokollierung der seriellen Portdaten in den Python-Paketen (Rohdaten und dekodierte Daten) wird ebenfalls vollständig unterstützt. Ich beabsichtige, es zu verwenden, um eine Offline-Wiedergabefunktion zu implementieren (seriellen Datenfluss simulieren)
Overdrivr

4

Niemand hatte von einer super vielseitigen Verarbeitung gesprochen. Sie können viel mehr als nur zeichnen, aber wenn das alles ist, was Sie tun möchten, können Sie die gwoptics-Bibliothek verwenden. Schließen Sie Arduino und Processing wie hier beschrieben an .


2

Ich habe ein äquivalentes Tool in Python erstellt, das Echtzeitdaten vom ADXL345-Beschleunigungssensor druckt. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

Vielleicht ist es für jemanden hilfreich

Bildbeschreibung hier eingeben

Wählen Sie einfach die serielle Verbindung und Geschwindigkeit und senden Sie serielle Daten im folgenden Format:

  • 3 Eingänge, jeder Eingang besteht aus 2 Bytes (Zweierkomplement)
  • 6 Bytes durch ein Leerzeichen getrennt
  • Das Paket ist eine Zeichenfolge, die mit '\ n' abgeschlossen ist.

Könnte leicht angepasst werden, um dieses Format zu ändern


Können Sie erklären, wie Sie dies anwenden und welche Vor- und Nachteile dies hat?
Der Mann mit dem Hut

2

Sie können die MATLAB Student Edition verwenden . Dies spart Zeit für weitere Analysen. Sie können einfach den COM-Port in MATLAB öffnen und das empfangene Signal zeichnen und / oder das Signal im Arbeitsbereich oder was auch immer speichern. MATLAB macht alles einfach!


2
Willkommen bei Arduino SE! Können Sie bitte Ihre Antwort bearbeiten, um weitere Informationen hinzuzufügen, die beschreiben, wie sie den Anforderungen des OP entsprechen, und vielleicht ein paar andere Informationen wie einen Link oder ein Foto? Vielen Dank!
Anonymous Penguin

Gute Antwort, hätte nicht gedacht, Matlab zu verwenden, es gibt hier einen SO-Thread darüber stackoverflow.com/questions/19483098/…
Hamish_Fernsby

2

Das CSV-Format ist für alle Daten am vielseitigsten (signiert / unsigniert, verschiedene Größen und Genauigkeiten).

Plattformübergreifendes (in Java / Scala geschriebenes) Tool Scsvlog kann CSV-Zeichenfolgen vom seriellen Port / Socket empfangen / analysieren, Werte anzeigen und Diagramme zeichnen (bis zu 8).


Das Tool kann jetzt leider nicht mehr gefunden werden - der ursprüngliche Link ist nicht mehr vorhanden und ich kann scheinbar keine Kopien finden.
Арсений Пичугин

2

Sie können die Software ausprobieren, die ich dafür entwickelt habe. Es soll einfach zu bedienen sein. Siehe SerialGraphicator - Freier Open Source-Client für serielle Schnittstellen , der Diagrammwerte verarbeiten kann, die im JSON-Format empfangen werden.


1

Während ich es selbst nicht verwendet haben, „rqt_plot“ auf dem PC läuft , scheint auf einem PC ein beliebter Weg , um Plotdaten zu sein , die von einem Arduino läuft eine Skizze über eine serielle Schnittstelle kommt, die das beinhaltet rosserial_arduino Bibliothek oder die ros_arduino_bridge Bibliothek.


1

Ich weiß, dass dies eine sehr alte Frage ist, aber ich habe kürzlich eine Mac-Anwendung erstellt, die dieses Problem sehr gut löst. Weitere Informationen dazu finden Sie auf www.bloonapp.com. Auf der Website befinden sich einige Demovideos, die Sie sich ansehen können.Bildbeschreibung hier eingeben


1
Ab dem 1. August 18 ist diese Website tot.
Dan

1

Ich weiß, dass Sie wahrscheinlich eine fortgeschrittenere GUI-Ausgabe haben, aber ich habe es geschafft, eine Aufgabe zu replizieren, die man normalerweise mit einem Oszilloskop machen würde: Arduino Serial Plotter-Ausgabe

Mit dem seriellen Plotter in der Arduino IDE und einem ADC-Modul können Sie für 3 US-Dollar bei eBay kaufen. Ich gebe zu, es ist etwas grob, aber es könnte sich lohnen, eine Weile mit dem Tool zu spielen, bevor Sie in Python / Matlab / ect-Level-Lösungen investieren. Es war außerordentlich einfach zu bedienen. Das Hinzufügen einer SD-Kartenaufzeichnung zum Prozess würde nicht viel kosten.

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


0

Telemetrie-Viewer

Vorteile:

  1. Einfach zu verwenden
  2. Intuitive und flexible Benutzeroberfläche
  3. Open Source und kostenlos
  4. Verschiedene Arten von Diagrammen
  5. Sehr schnelle Grafikaktualisierungsrate

Nachteile:

  1. Entwicklung gestoppt
  2. Binärdatenformat ist noch nicht vollständig.
  3. Primitive Grafik-Steuerelemente wie Zoom, Screenshot und ... Bildbeschreibung hier eingeben

0

Serial Plotter ist ein einfaches Programm, das ich mit Electron erstellt habe und das Daten in folgendem Format empfängt: data1,data2,timestamp;und in ein Echtzeitdiagramm konvertiert.

Bildbeschreibung hier eingeben


0

Fast nützlich. Es braucht:

  1. Protokollierung von seriellen Daten in eine Datei ODER
  2. grafische Darstellung aus einer Datei und Aktualisierung alle xxx Millisekunden.

Live Graph ist eine bessere Option, und ich verwende es in Verbindung mit Tera Term, das die Daten über die USB- / serielle Verbindung abruft (und sie in einer Protokolldatei speichert, die dann Live Graph abruft).

Live Graph ist beim Zwischenspeichern von Daten leicht fehlerhaft, und ich habe keine Möglichkeit gefunden, ein sich bewegendes Fenster für die Anzeige von Ergebnissen festzulegen. Das Anzeigen mehrerer Diagramme erfordert auch eine manuelle Skalierung, ist aber trotzdem sehr nützlich. Es ist in Java geschrieben, daher benötigen Sie die JRE. Ich bevorzuge es, Python zu installieren, wie es einige andere Grafikprogramme tun. Ein weiterer Nachteil ist, dass es 4 verschiedene Fenster öffnet, was ein Schmerz ist, wenn ich zwischen dem Fenster und Tera Term wechseln möchte.

Ich habe noch keine Software gefunden, die das kann

  1. Eine ausführbare Datei (.EXE), daher keine externe Abhängigkeit
  2. Beinhaltet einen Terminalemulator oder einen seriellen Datenlogger
  3. Protokolliert serielle Daten
  4. Zeichnet mehrere Elemente aus einer CSV
  5. Ermöglicht CSV UND tabulatorgetrennte Daten (die beim Scrollen und gleichzeitigen Überwachen des Diagramms viel einfacher zu lesen sind) .
  6. Ermöglicht die Einstellung verschiedener Maßstäbe für jedes überlagerte Diagramm, ohne dass alles auf [0..1] skaliert werden muss oder ein Multiplikator festgelegt werden muss, dh es kann ein [y0..y1] -Bereich für jedes grafisch dargestellte Element festgelegt werden.

1
Willkommen bei Arduino SE! Ihre Antwort ist informativ, aber können Sie bitte die Formatierung der Antwort mithilfe der Markdown-Anleitung verbessern, die Sie anzeigen können, indem Sie auf die ?Schaltfläche im Editor klicken.
Avamander

0

Ich verwende processing.org für das serielle Plotten von Arduino. Es war die einzige App, die ich finden konnte, die es mir ermöglichte, echte Histogramme (z. B. eine Million Ereignisse in hundert Behältern) zu erstellen und für jeden Kanal verschiedene Infonummern sowie das mittlere Sigma anzuzeigen. Zwei Hauptprobleme: A) Es stellte sich heraus, dass es auf Java ohne vorzeichenlose Bytes basiert. B) Die Synchronisierung mit der Eingabe erfordert einen Ringpuffer und Markierungen in den Daten. (hohe Geschwindigkeit, kein Handshake)


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.