Programy do szeregowania danych


36

Muszę wykreślić dane szeregowe z Arduino.

Potrzebuję wsparcia dla:

  1. Różne formaty danych (np. Podpisane, niepodpisane, 8 bitów, 16 bitów);
  2. Drukuje kilka danych na tych samych osiach;
  3. Eksportuje / importuje dane pliku.

Ponieważ wykreślanie danych szeregowych z Arduino jest powszechną potrzebą, moje pytanie brzmi: Jakie programy / narzędzia są dostępne do wykreślania danych szeregowych z Arduino, które spełniają powyższe potrzeby?

Jakie są zalety / wady zaproponowanej metody?


Postanowiłem ponownie otworzyć z ostatnią edycją. Jak na to pytanie, wydaje się, że dotyczy tematu, ponieważ jest konkretny. Wyjaśnię to każdemu (ponieważ nie ma zbyt wielu tego typu pytań): jeśli będzie to zbyt trudne, być może będę musiał wkroczyć. Jednak prawdopodobieństwo takiego zdarzenia jest rzadkie. :) @JRobert Jeśli GnuPlot spełnia wymagania zawarte w pytaniu, opublikuj je.
Anonimowy pingwin

1
Strona „Interfejs z innym oprogramowaniem” na placu zabaw Arduino pokazuje wiele sposobów na wydrukowanie danych szeregowych z Arduino na iPhonie, komputerze z systemem Windows, komputerze z systemem Linux itp.
David Cary

Odpowiedzi:


19

Istnieje kilka dobrych aplikacji do wizualizacji danych szeregowych, w tym:

  • MegunoLink (29,95 USD; Lite za darmo) - drukowanie, logowanie, programowanie, raportowanie i więcej.

    MegunoLink

  • MakerPlot (39 USD) - drukowanie cyfrowe i analogowe, monitorowanie, niestandardowe interfejsy i wiele innych.

    MakerPlot

  • ArduinoPlot (bezpłatny) - proste kreślenie.

    ArduinoPlot

  • arduino-plotter (bezpłatny) - łatwe, lekkie drukowanie z obsługą wszystkich prymitywnych typów

    arduino-ploter

  • Bridge Control Panel (bezpłatny) - rejestrowanie, drukowanie i wiele innych.

    Panel sterowania mostem

  • RealtimePlotter (bezpłatny) - wykreślanie danych z 6 kanałów.

    RealtimePlotter

  • Ploter danych szeregowych w czasie rzeczywistym (bezpłatny) - wykreślanie danych CSV, rejestrowanie i więcej.

  • SimPlot (bezpłatny) - kreślenie 4 kanałów.

    SimPlot

  • Ploter szeregowy Arduino (bezpłatny) - wbudowany edytor Arduino w obszarze Narzędzia> Ploter szeregowy .

    Ploter szeregowy Arduino

(To jest wiki społeczności, możesz rozwinąć listę).


Jestem zmieszany. Poniżej zamieściłem własne rozwiązanie, ale teraz nie jestem pewien, czy nie byłoby lepiej edytować posta, ponieważ jest to wiki. Co myślisz ?
Overdrivr

@Overdrivr Jasne, rozszerz tę wiki dla innych!
niutech

8

GnuPlot

Zalety: Jest bardzo elastyczny, skryptowalny i swobodnie dostępny.

Wady: trochę skomplikowane do nauczenia się (ale wymyśliłem, jak zacząć za kilka minut i całkiem funkcjonalne za godzinę lub dwie), działa w oknie terminala (jeśli uważasz, że to wada).

Coś, co uznałem za bardzo przydatne, to okresowe ładowanie pliku dziennika mojego programu terminalowego, więc w miarę postępu eksperymentu otrzymałem dynamiczny wykres.

Zdjęcie GnuPlot



Edycja: Oto skrypt GnuPlot, który go kreśli:

#!/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
To wygląda świetnie. Czy możesz dodać kod demo?
geometrikal

Ale wykreśla dane z pliku Logfile.txt, a nie dane szeregowe w czasie rzeczywistym. Jak podłączyć go do portu szeregowego?
niutech

1
Nie, ten skrypt nie jest „w czasie rzeczywistym” - może być nawet o około 4 sekundy opóźniony. Logfile.txt to wyjście pliku przechwytywania z programu terminalowego. W moim przypadku system gromadzenia danych pobiera próbki i rejestruje co 4 sekundy, a skrypt GnuPlot zastępuje plik dziennika co 4 sekundy. Jest to wystarczająco dynamiczne, jak na to, co robię (monitorowanie temperatur w pomieszczeniu).
JRobert

7

Używam Matplotlib do każdego spisku, który muszę zrobić.

Nie jest w żaden sposób specyficzny dla arduino, ale jest to bardzo doskonały zestaw narzędzi do drukowania w Pythonie .

Zbudowałem wiele aplikacji, które wykreślają dane z różnych mikrokontrolerów w czasie rzeczywistym na wykresie, ale tak naprawdę był to raczej dwuetapowy proces: 1. Pobierz dane z urządzenia do komputera, 2. wykreśl dane w czasie rzeczywistym .

Naprawdę myślę, że powinieneś podzielić swoje pytanie na dwie części:

  • Jak łatwo pobrać dane z urządzenia szeregowego Arduino / Any do komputera.
  • Co to jest dobra biblioteka kreślenia, która jest łatwa w użyciu.

+1. Czy film wideo „Arduino w czasie rzeczywistym Matlab” [ youtube.com/watch?v=ntHZsLmNkgw] używa tej samej techniki?
David Cary

Tak. Używa wywołania, które odczytuje dane arduino do zmiennej matlab, a następnie wywołuje aktualizację wykresu matlab zmienną matlab.
Connor Wolf,

Matplotlib to python, a nie matlab.
DaveP

Nie zgadzam się z tobą, to pytanie nie powinno być podzielone na 2. Istnieją rozwiązania (takie jak to, które zamieściłem poniżej), które zajmują się obydwoma, ponieważ denerwujące jest ponowne włączenie koła do zdalnego monitorowania i kontroli aplikacji arduino, a także dlatego, że pisanie kodu Pythona dla wykresów w czasie rzeczywistym jest bardzo dalekie od trywialnych. Można to zrobić za pomocą Matplotliba, ale najwyraźniej istnieją lepsze alternatywy, takie jak pyqtgraph.
Overdrivr

Dla części 1: Pobieranie
Gabriel Staples

6

SerialPlot (bezpłatny). Robi wszystko, czego potrzebujesz i wiele więcej.

Inne funkcje:

  • Powiększ dane
  • Kliknij punkty danych, aby zobaczyć wartości
  • Wyślij polecenia z powrotem do Arduino
  • Dostosuj całkowitą liczbę wykreślonych punktów
  • Możliwość pokazania każdego kanału na jego własnym skalowanym wykresie
  • Interpretuje pakiety binarne, ASCII i niestandardowe
  • Tryb demonstracyjny pozwala grać z funkcjami

wprowadź opis zdjęcia tutaj


1
Dobra odpowiedź, podobało mi się serialplot, znalazłem mój port COM i szybkość transmisji automatycznie, po prostu musiałem zmienić z binarnego na CSV i zwiększyć do 3 kanałów (dla magnetometru) i ładnie działało.
Hamish_Fernsby

Jest to najładniejszy i najłatwiejszy w użyciu - ale szkoda, że ​​nie było mac Binary :)
willwade

5

Odpowiadając na moje własne pytanie tutaj. Używam panelu sterowania mostem, jak wspomniano.

Zalety: wiele funkcji.

Wady: trudna w konfiguracji i bardzo słaba składnia / raportowanie błędów.

Aby użyć: Musisz zapisać dane Arduino przez port szeregowy jeden bajt na raz. Dla typu danych int, który wyglądałby następująco:

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

W programie Bridge polecenie odczytu danych to:

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

RX8 to polecenie odczytu [h = 43] oznacza, że ​​następny poprawny bajt to „C” w ASCII, następnie High Byte of Key1, a następnie Low Byte of Key1

Wygląda to tak w Bridge:

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


5

Możesz wypróbować serialchart . To dość napięty program do przodu. Robi dokładnie to, o co prosiłeś. Jedyną wadą jest to, że wymaga danych w formacie CSV (nie spełnia pierwszego punktu).

Zrzut ekranu ze strony projektu:

przykład


Próbowałem tego i okazało się, że jest bardzo niezręczny, aby działać, brak domyślnej konfiguracji, nie skaluje się automatycznie, po pół godzinie fafingu ze składnią nadal nie miałem wykresu tylko linii prostej, więc zrezygnowałem i użyłem SerialPlot, który działało w ciągu kilku minut, wystarczyło podać tekst ascii i liczbę kanałów.
Hamish_Fernsby

4

Być może zainteresuje Cię Telemetry See on Github . Jest to bardzo prosty w użyciu protokół komunikacyjny z przejrzystym interfejsem, który umożliwia dwukierunkową komunikację z urządzeniami Arduino / Mbed.

Jeśli nie chcesz czytać tego długiego posta, zobacz Omówienie wszystkich niesamowitych funkcji w nim zawartych

Potęga tej biblioteki pochodzi z interfejsu wiersza poleceń na pulpicie (który nie wymaga umiejętności programowania w języku Python).

Jest w stanie otwierać wykresy o wysokiej wydajności (znacznie wyższe niż w przypadku matplotlib) po prostu przez wpisanie polecenia .

Protokół obsługuje złożone struktury danych . Na razie tablice i tablice rzadkie mogą być wysyłane z wbudowanej płyty.

Wykresy otwarte z interfejsu wiersza poleceń rozumieją rodzaj danych, a dla tablic, zamiast wykreślania każdej próbki w funkcji czasu, próbka będzie wykreślana na podstawie własnego indeksu.

W najbliższej przyszłości planowane jest dodanie obsługi współrzędnych przestrzennych (danych xyz), co pozwoli na natychmiastowe wykreślanie danych przestrzennych. Raz jeszcze wykresy wszystko wymyślą, wykreśl swoje dane w przestrzeni 2D lub 3D i możesz skupić się na rozwijaniu aplikacji.

Uważam, że te funkcje są po prostu unikalne dla takiego projektu.

Interfejs wiersza poleceń Pytelemetry Wersja PyPI

Po zainstalowaniu za pippomocą wiersza polecenia można uruchomić

pytlm

Następnie można connect, ls(lista) otrzymał tematy, printdane otrzymane na temacie pub(opublikowania) na temat, czy otworzyć plotsię na temacie, aby wyświetlić odebranych danych w czasie rzeczywistym

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Zaczynać

Wiki

PS: Jestem autorem.

Opracowałem go, ponieważ nie mogłem znaleźć rozwiązania, które pozwoliłoby mi:

  • pisz szybko skrypty PC, aby kontrolować Arduino
  • debuguj szybko
  • drukuj złożone dane (nie tylko wartości zmieniające się w czasie)

wszystkie powyższe bez korzystania z zastrzeżonych rozwiązań lub rozdętych GUI.

Korzystając z tej biblioteki, czas na skonfigurowanie komunikacji między Arduino i komputerem PC trwał zwykle od pół dnia do 5 minut.


PS: rejestrowanie danych portu szeregowego w pakietach Pythona (dane surowe i dane zdekodowane) jest również w pełni obsługiwane. Mam zamiar użyć go do wdrożenia funkcji odtwarzania offline (symulacja szeregowego przepływu danych)
Overdrivr

4

Nikt nie wspominał o przetwarzaniu, które jest bardzo wszechstronne. Możesz zrobić znacznie więcej niż tylko kreślenie, ale jeśli to wszystko, co chcesz zrobić, możesz użyć biblioteki gwoptics; podłącz Arduino i przetwarzanie zgodnie z instrukcją tutaj .


2

Zrobiłem równoważne narzędzie w pythonie, które drukuje dane w czasie rzeczywistym z akcelerometru ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

może być pomocne dla kogoś

wprowadź opis zdjęcia tutaj

Wystarczy wybrać port szeregowy i prędkość i wysłać dane szeregowe w następującym formacie:

  • 3 wejścia, każde wejście to 2 bajty (uzupełnienie dwóch)
  • 6 bajtów oddzielonych spacją
  • pakiet jest ciągiem zakończonym przez „\ n”

Można łatwo dostosować, aby zmienić ten format


Czy możesz wyjaśnić, jak z tego korzystać i jakie są jego zalety i wady?
Facet z czapką,

2

Możesz użyć MATLAB Student Edition , dzięki czemu możesz zaoszczędzić czas na dalsze analizy. Możesz po prostu otworzyć port COM w MATLAB i wykreślić odebrany sygnał i / lub zapisać sygnał w obszarze roboczym lub cokolwiek innego. MATLAB ułatwia wszystko!


2
Witamy w Arduino SE! Czy możesz edytować swoją odpowiedź, aby dodać więcej informacji opisujących, jak pasuje do potrzeb PO, a może trochę innych informacji, takich jak link lub zdjęcie? Dzięki!
Anonimowy pingwin

Dobra odpowiedź, nie pomyślałbym o użyciu Matlaba, jest tutaj wątek SO stackoverflow.com/questions/19483098/…
Hamish_Fernsby

2

Format CSV jest najbardziej uniwersalny dla dowolnych danych (podpisany / niepodpisany, różnej wielkości i precyzji).

Narzędzie wieloplatformowe (napisane w Javie / Scali) Scsvlog może odbierać / analizować ciągi CSV z portu / gniazda szeregowego, wyświetlać wartości i rysować wykresy (do 8).


Niestety nie można już znaleźć narzędzia - oryginalny link jest martwy i nie mogę znaleźć żadnych kopii.
Арсений Пичугин

2

Możesz wypróbować oprogramowanie opracowane dla tej propozycji. Ma być łatwy w użyciu. Zobacz SerialGraphicator - klient Open Serial Port Free Open Source zdolny do tworzenia wartości wykresów odbieranych w formacie JSON.


1

Chociaż sam go nie używałem, „rqt_plot” działający na komputerze PC wydaje się być popularnym sposobem drukowania danych na komputerze PC przesyłanym przez port szeregowy z Arduino z uruchomionym szkicem zawierającym bibliotekę rosserial_arduino lub bibliotekę ros_arduino_bridge .


1

Wiem, że to bardzo stare pytanie, ale niedawno stworzyłem aplikację Mac, która bardzo dobrze rozwiązuje ten problem. Możesz znaleźć więcej informacji na ten temat na www.bloonapp.com. Na stronie znajduje się kilka filmów demonstracyjnych, które możesz sprawdzić.wprowadź opis zdjęcia tutaj


1
Od 1 sierpnia 18 ta strona jest martwa.
Dan

1

Wiem, że prawdopodobnie chciałeś bardziej zaawansowanego wyjścia GUI, ale udało mi się zreplikować zadanie, które normalnie można wykonać za pomocą oscyloskopu: Wyjście plotera szeregowego Arduino

za pomocą plotera szeregowego w Arduino IDE i modułu ADC można uzyskać za 3 USD w serwisie eBay. Przyznaję, że jest to trochę prymitywne, ale warto zainwestować w to narzędzie jeszcze przez chwilę, zanim zainwestujesz w rozwiązania na poziomie Python / Matlab / ect. Był niezwykle łatwy w użyciu. Dodanie nagrania z karty SD do procesu nie zajmie wiele.

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


0

Przeglądarka telemetrii

Zalety:

  1. Łatwy w użyciu
  2. Intuicyjny i elastyczny interfejs użytkownika
  3. Open Source i za darmo
  4. Różne typy wykresów
  5. Bardzo szybka aktualizacja wykresów

Niedogodności:

  1. Zatrzymano rozwój
  2. Format danych binarnych nie jest jeszcze kompletny.
  3. Prymitywne elementy sterujące wykresów, takie jak powiększenie, zrzut ekranu i ... wprowadź opis zdjęcia tutaj


0

Prawie przydatne. To potrzebuje:

  1. logowanie danych szeregowych do pliku LUB
  2. tworzenie wykresów z pliku i aktualizowanie co xxx milisekund.

Live Graph to lepsza opcja i używam jej w połączeniu z Tera Term który pobiera dane przez łącze USB / szeregowe (i zapisuje je w pliku dziennika, który następnie sonduje Live Graph).

Wykres Live jest nieco wadliwy podczas buforowania danych i nie znalazłem sposobu, aby ustawić ruchome okno do wyświetlania wyników. Ponadto wyświetlanie wielu wykresów wymaga ręcznego skalowania, ale mimo to jest nadal bardzo przydatne. Jest napisany w Javie, więc będziesz potrzebować JRE. Wolę to niż instalowanie Pythona, tak jak niektóre inne programy graficzne. Kolejnym minusem jest to, że otwiera 4 różne okna, co jest bólem, gdy chcę przełączyć między nim a Tera Term.

Muszę jeszcze znaleźć oprogramowanie, które

  1. Plik wykonywalny (.EXE), więc nie jest zależny z zewnątrz
  2. Zawiera emulator terminala lub rejestrator danych szeregowych
  3. Rejestruje dane szeregowe
  4. Wykresy wielu elementów z pliku CSV
  5. Pozwala na CSV ORAZ dane rozdzielane tabulatorami (co jest o wiele łatwiejsze do odczytania, gdy przewija się wzdłuż, jednocześnie monitorując wykres.
  6. Umożliwia ustawienie różnych skal dla każdego nakładanego wykresu bez konieczności skalowania wszystkiego do [0..1] lub ustawienia mnożnika, tj. Pozwala na ustawienie zakresu [y0..y1] dla każdego wykreślanego elementu.

1
Witamy w Arduino SE! Twoja odpowiedź ma charakter informacyjny, ale czy możesz poprawić formatowanie odpowiedzi, korzystając z przewodnika po przecenach, który możesz wyświetlić, naciskając ?przycisk w edytorze.
Avamander

0

Korzystam z processing.org do seryjnego drukowania z Arduino. To była jedyna aplikacja, jaką mogłem znaleźć, która pozwoliła mi tworzyć prawdziwe histogramy (np. Milion zdarzeń w stu pojemnikach) i wyświetlać różne numery informacyjne oprócz średniej sigma dla każdego kanału. Dwa główne problemy: A) okazało się, że jest oparty na Javie bez bajtów bez znaku B) zsynchronizuje ig z wymaganym okrągłym buforem i znacznikami w danych. (wysoka prędkość, bez uzgadniania)


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.