Programmi di tracciamento dati seriali


36

Devo tracciare dati seriali da Arduino.

Ho bisogno di supporto per:

  1. Vari formati di dati (ad es. Con segno, senza segno, 8 bit, 16 bit);
  2. Traccia diversi dati sugli stessi assi;
  3. Esporta / importa i dati del file.

Poiché la stampa di dati seriali da Arduino è un'esigenza comune, la mia domanda è: quali programmi / utilità sono disponibili per la stampa di dati seriali da Arduino che soddisfano le esigenze di cui sopra?

Quali sono i vantaggi / gli svantaggi del metodo che hai suggerito?


Ho deciso di riaprire con l'ultima modifica. Allo stato attuale di questa domanda, sembra essere in argomento perché è specifico. Sarò chiaro a chiunque (dal momento che non ci sono molti di questi tipi di domande): se questo si discosta troppo dall'argomento, potrei dover intervenire. Tuttavia, la probabilità che ciò accada è rara. :) @JRobert Se GnuPlot soddisfa i requisiti della domanda, pubblicalo.
Pinguino anonimo

1
La pagina "Interfaccia con altri software" nel parco giochi di Arduino mostra un sacco di modi per tracciare dati seriali da un Arduino a un iPhone, un PC Windows, un PC Linux, ecc.
David Cary

Risposte:


19

Esistono alcune buone applicazioni per visualizzare i dati seriali, tra cui:

(Questa è una wiki della comunità, è possibile espandere l'elenco.)


Non ho capito bene. Di seguito ho pubblicato la mia soluzione, ma ora non sono sicuro che non sarebbe meglio modificare il tuo post poiché è un wiki. Cosa pensi ?
Overdrivr

@Overdrivr Certo, vai a estendere questa wiki per il bene degli altri!
Niutech

8

gnuplot

Vantaggi: è molto flessibile, utilizzabile tramite script e disponibile gratuitamente.

Svantaggi: un po 'complesso da imparare (ma ho capito come iniziare in pochi minuti e abbastanza funzionale in un'ora o due), viene eseguito in una finestra del terminale (se lo consideri uno svantaggio).

Qualcosa che ho trovato molto utile è stato copiarlo per ricaricare periodicamente il file di registro del mio programma terminale in modo da ottenere un grafico dinamico mentre il mio esperimento procedeva.

Immagine di GnuPlot



Modifica: ecco lo script GnuPlot che lo traccia:

#!/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
Questo sembra fantastico. Potresti aggiungere del codice demo?
geometrikal,

Ma traccia i dati da Logfile.txt, non i dati seriali in tempo reale. Come collegarlo a una porta seriale?
Niutech,

1
No, questo script non è "in tempo reale", potrebbe essere indietro di circa 4 secondi. Logfile.txt è l'output del file di acquisizione da un programma terminale. Nel mio caso, il sistema di raccolta dati campiona e registra ogni 4 secondi e lo script GnuPlot sostituisce il file di registro ogni 4 secondi. Questo è abbastanza dinamico per quello che sto facendo (monitoraggio della temperatura della stanza).
JRobert,

7

Uso Matplotlib per qualsiasi disegno che devo fare.

Non è in alcun modo specifico per Arduino, ma è un eccellente toolkit per la stampa di Python .

Ho creato una serie di applicazioni che tracciano i dati da una varietà di microcontrollori in tempo reale a un grafico, ma si trattava in realtà di una procedura in due passaggi: 1. Trasferisci i dati dal dispositivo al computer, 2. Traccia i dati in tempo reale .

Davvero, penso che dovresti dividere la tua domanda in due parti:

  • Come ottenere facilmente i dati da un Arduino / Qualsiasi dispositivo seriale in un computer.
  • Che cos'è una buona libreria per la stampa facile da usare.

+1. Il video "Arduino real time plot Matlab" [ youtube.com/watch?v=ntHZsLmNkgw] utilizza la stessa tecnica?
David Cary,

Sì. Utilizza una chiamata che legge i dati arduino in una variabile matlab, quindi una chiamata che aggiorna il grafico matlab con la variabile matlab.
Connor Wolf,

Matplotlib è Python, non Matlab.
DaveP,

Non sono d'accordo con te, questa domanda non dovrebbe essere divisa in 2. Ci sono soluzioni (come quella che ho pubblicato di seguito) che si occupano di entrambi, perché è fastidioso reinventare la ruota per il monitoraggio remoto e il controllo delle applicazioni Arduino, e anche perché la scrittura di codice Python per grafici in tempo reale è in realtà molto lontana dall'essere banale. Le cose possono essere fatte con matplotlib ma chiaramente ci sono alternative migliori per questo come pyqtgraph.
Overdrivr

Per la parte 1: ottenere dati da Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot (gratuito). Fa tutto ciò di cui hai bisogno e molto altro.

Altre caratteristiche:

  • Ingrandisci i dati
  • Fare clic sui punti dati per vedere i valori
  • Invia comandi di nuovo ad Arduino
  • Regola il numero totale di punti tracciati
  • Possibilità di mostrare ciascun canale nel proprio diagramma scalato automaticamente
  • Interpreta i pacchetti binari, ASCII e personalizzati
  • La modalità demo ti consente di giocare con le funzionalità

inserisci qui la descrizione dell'immagine


1
Buona risposta, mi è piaciuto il serialplot, ha trovato automaticamente la mia porta COM e baud rate, dovevo solo passare da binario a CSV e aumentare a 3 canali (per un magnetometro) e stava pianificando bene.
Hamish_Ferns dal

Questo è il più pulito e facile da usare - ma vorrei che ci fosse un Mac Binary :)
Willwade

5

Rispondendo alla mia domanda qui .. Uso Bridge Control Panel come detto.

Vantaggi: molte caratteristiche.

Svantaggi: difficile da configurare e segnalazione di sintassi / errori molto scarsa.

Per utilizzare: è necessario scrivere i dati Arduino sulla porta seriale un byte alla volta. Per un tipo di dati int che apparirebbe come segue:

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

In Bridge il comando per leggere i dati è:

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

RX8 è il comando di lettura [h = 43] significa che il successivo byte valido è "C" in ASCII, quindi il byte alto della chiave1 quindi il byte basso della chiave1

Sembra così in Bridge:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


5

Puoi provare il diagramma seriale . È un programma piuttosto stretto. Fa esattamente quello che hai chiesto. L'unico svantaggio è che richiede dati in formato CSV (non soddisfa il primo punto).

Schermata dalla pagina del progetto:

esempio


Ho provato questo e ho trovato molto goffo funzionare, nessuna configurazione di default, non scala automaticamente, dopo mezz'ora sfavillando con la sintassi non avevo ancora un diagramma solo una linea retta, quindi ho rinunciato e usato SerialPlot che ha funzionato in pochi minuti, dovevo solo specificare testo ASCII e numero di canali.
Hamish_Ferns dal

4

Potresti essere interessato a Telemetry Vedere su Github . È un protocollo di comunicazione, estremamente semplice da usare, con un'interfaccia pulita, che consente la comunicazione bidirezionale con i dispositivi Arduino / Mbed.

Se non vuoi leggere questo lungo post, vedi Una panoramica di tutte le fantastiche funzionalità in esso contenute

La potenza di questa libreria proviene dall'interfaccia della riga di comando desktop (che non richiede competenze di programmazione in Python).

È in grado di aprire grafici ad alte prestazioni (molto superiori a ciò che si può fare con matplotlib) semplicemente digitando un comando .

Il protocollo supporta strutture di dati complessi . Per ora matrici e matrici sparse possono essere inviate dalla scheda integrata.

I grafici aperti dall'interfaccia della riga di comando comprendono il tipo di dati e, per gli array, anziché tracciare ogni campione nel tempo, il campione verrà tracciato rispetto al proprio indice.

In un prossimo futuro, si prevede di aggiungere il supporto per le coordinate spaziali (dati xyz), che consentiranno di tracciare immediatamente i dati spaziali. Ancora una volta, i grafici scopriranno tutto, tracciano i tuoi dati nello spazio 2D o 3D e puoi concentrarti sullo sviluppo della tua app.

Credo che quelle caratteristiche siano semplicemente uniche per un tale progetto.

CLI Pytelemetry Versione PyPI

Una volta installato con pip, la riga di comando può essere avviata con

pytlm

Quindi è possibile connect, ls(elencare) argomenti ricevuti, printdati ricevuti su un argomento, pub(pubblicare) su un argomento o aprire un plotsu un argomento per visualizzare i dati ricevuti in tempo reale

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Iniziare

wiki

PS: sono l'autore.

L'ho sviluppato perché non sono riuscito a trovare una soluzione che mi permettesse di:

  • scrivere rapidamente script per PC per controllare un Arduino
  • eseguire il debug rapidamente
  • tracciare dati complessi (non solo un valore variabile nel tempo)

tutto quanto sopra senza utilizzare soluzioni proprietarie o GUI gonfiate.

Usando questa libreria, il tempo per impostare una comunicazione tra Arduino e PC è passato da una mezza giornata a 5 minuti.


PS: anche la registrazione dei dati della porta seriale nei pacchetti python (dati grezzi e dati decodificati) è completamente supportata. Ho intenzione di usarlo per implementare una funzione di riproduzione offline (simulare il flusso di dati seriali)
Overdrivr

4

Nessuno aveva menzionato Elaborazione che è super versatile. Puoi fare molto di più della semplice trama, ma se è tutto ciò che vuoi fare puoi usare la libreria gwoptics; collegare Arduino ed Processing come indicato qui .


2

Ho creato uno strumento equivalente in Python che stampa i dati in tempo reale dall'accelerometro ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

potrebbe essere utile per qualcuno

inserisci qui la descrizione dell'immagine

Basta scegliere la seriale e la velocità e inviare i dati seriali nel seguente formato:

  • 3 ingressi, ogni ingresso è di 2 byte (complemento a due)
  • 6 byte separati da uno spazio
  • il pacchetto è una stringa terminata da '\ n'

Potrebbe essere facilmente adattato per cambiare questo formato


Puoi spiegarci come usarlo e quali sono i vantaggi e gli svantaggi di questo?
The Guy with The Hat,

2

Puoi utilizzare MATLAB Student Edition , questo può farti risparmiare tempo anche per ulteriori analisi. Puoi semplicemente aprire la porta COM in MATLAB e tracciare il segnale ricevuto e / o salvare il segnale nell'area di lavoro o altro. MATLAB rende tutto facile!


2
Benvenuti in Arduino SE! Puoi modificare la tua risposta per aggiungere ulteriori informazioni che descrivono come si adatta alle esigenze del PO e forse un po 'di altre informazioni come un link o una foto? Grazie!
Pinguino anonimo

Buona risposta, non avrebbe mai pensato di usare Matlab, c'è un filo ecco su di esso stackoverflow.com/questions/19483098/...~~V~~singular~~3rd
Hamish_Fernsby

2

Il formato CSV è il più versatile per qualsiasi dato (firmato / non firmato, varie dimensioni e precisione).

Lo strumento multipiattaforma (scritto in Java / Scala) Scsvlog può ricevere / analizzare stringhe CSV dalla porta / socket seriale, mostrare valori e disegnare grafici (fino a 8).


Purtroppo non è più possibile trovare lo strumento, purtroppo: il link originale è morto e non riesco a trovare alcuna copia.
Арсений Пичугин il

2

Puoi provare il software che ho sviluppato per quella proposta. Ha lo scopo di essere facile da usare. Vedere SerialGraphicator - Client di porte seriali gratuito open source in grado di valori grafici ricevuti in formato JSON.


1

Anche se non l'ho usato da solo, "rqt_plot" in esecuzione sul PC sembra essere un modo popolare per tracciare dati su un PC che arriva su una porta seriale da un Arduino che esegue uno schizzo che include la libreria rosserial_arduino o la libreria ros_arduino_bridge .


1

So che questa è una domanda molto vecchia, ma di recente ho creato un'applicazione mac che risolve molto bene questo problema. Puoi trovare maggiori informazioni a riguardo su www.bloonapp.com. Ci sono alcuni video dimostrativi sul sito web che puoi vedere.inserisci qui la descrizione dell'immagine


1
Dal 1 agosto 18 questo sito è morto.
Dan

1

So che probabilmente stavi cercando un output GUI più avanzato, ma sono riuscito a replicare un'attività che normalmente si farebbe con un oscilloscopio: Uscita del plotter seriale Arduino

utilizzando il plotter seriale nell'IDE Arduino e un modulo ADC è possibile ottenere $ 3 su eBay. Ammetto che è un po 'rozzo, ma potrebbe valere la pena giocare con lo strumento per un po', prima di investire in soluzioni di livello Python / Matlab / ect. È stato estremamente facile da usare. Non ci vorrebbe molto per aggiungere la registrazione della scheda SD al processo.

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


0

Visualizzatore di telemetria

vantaggi:

  1. Facile da usare
  2. UI intuitiva e flessibile
  3. Open Source e gratuito
  4. Diversi tipi di grafici
  5. Velocità di aggiornamento del grafico molto veloce

svantaggi:

  1. Sviluppo interrotto
  2. Il formato dei dati binari non è ancora completo.
  3. Controlli grafici primitivi come zoom, screenshot e ... inserisci qui la descrizione dell'immagine

0

Serial Plotter è un semplice programma che ho realizzato con Electron che riceve i dati nel seguente formato: data1,data2,timestamp;e li converte in un grafico in tempo reale.

inserisci qui la descrizione dell'immagine


0

Quasi utile Ha bisogno:

  1. registrazione dei dati seriali in un file OPPURE
  2. rappresentazione grafica da un file e aggiornamento ogni xxx millisecondi.

Live Graph è un'opzione migliore e lo uso insieme a Tera Term che ottiene i dati tramite il collegamento USB / seriale (e li salva in un file di registro che poi esegue il polling di Live Graph).

Il grafico live è leggermente danneggiato durante la memorizzazione nella cache dei dati e non ho trovato il modo di impostare una finestra mobile per visualizzare i risultati. Inoltre, mostrare più grafici richiede un ridimensionamento manuale, ma nonostante tutto, è ancora molto utile. È scritto in Java, quindi avrai bisogno di JRE. Preferisco questo piuttosto che dover installare Python come fanno alcuni altri programmi di grafica. un altro aspetto negativo è che apre 4 finestre diverse, il che è un dolore quando voglio capovolgere tra esso e Tera Term.

Devo ancora trovare software che sia

  1. Un eseguibile (.EXE) quindi non ha dipendenza esterna
  2. Include un emulatore di terminale o un registratore di dati seriale
  3. Registra i dati seriali
  4. Rappresenta graficamente più elementi da un CSV
  5. Consente dati CSV AND delimitati da tabulazioni (che è molto più facile da leggere mentre scorre lungo mentre monitora simultaneamente il grafico.
  6. Consente di impostare scale diverse per ciascun grafico sovrapposto senza dover ridimensionare tutto su [0..1] o impostare un moltiplicatore, ovvero consentire l'impostazione di un intervallo [y0..y1] per ciascun elemento rappresentato.

1
Benvenuti in Arduino SE! La tua risposta è informativa ma potresti migliorare la formattazione della risposta usando la guida per il markdown che puoi visualizzare premendo il ?pulsante nell'editor.
Avamandro,

0

Sto usando processing.org per la stampa seriale da Arduino. È stata l'unica app che ho potuto trovare che mi ha permesso di creare istogrammi reali (ad esempio un milione di eventi in un centinaio di bin) e visualizzare vari numeri di informazioni oltre a significare sigma per ciascun canale. Due problemi principali: A) si è rivelato basato su Java senza byte senza segno B) sincronizzare ig con input richiesto buffer circolare e marcatori nei dati. (alta velocità, nessuna stretta di mano)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.