Програми побудови послідовних даних


36

Мені потрібно побудувати серійні дані від Arduino.

Мені потрібна підтримка для:

  1. Різні формати даних (наприклад, підписані, неподписані, 8 біт, 16 біт);
  2. Накресліть кілька даних на одних осях;
  3. Експорт / імпорт даних файлів.

Оскільки побудова серійних даних від Arduino є загальною потребою, моє запитання таке: Які програми / утиліти доступні для побудови серійних даних від Arduino, які відповідають потребам вище?

Які переваги / недоліки запропонованого вами методу?


Я вирішив знову відкрити вашу останню редакцію. Оскільки це питання стоїть, воно, здається, є темою, оскільки воно є конкретним. Мені буде зрозуміло будь-кому (оскільки таких питань не так багато): якщо це занадто поза темою, мені, можливо, доведеться вступити. Однак ймовірність того, що це станеться, є рідкісною. :) @JRobert Якщо GnuPlot відповідає вимогам у запитанні, опублікуйте це.
Анонімний пінгвін

1
На сторінці "Взаємодія з іншим програмним забезпеченням" на майданчику Arduino показано безліч способів побудови послідовних даних з Arduino на iPhone, ПК з Windows, ПК з ПК тощо
Девід Кері

Відповіді:


19

Існує кілька хороших програм для візуалізації серійних даних, зокрема:

  • MegunoLink ($ 29,95; Lite безкоштовно) - побудова, ведення журналу, програмування, складання звітів і багато іншого.

    MegunoLink

  • MakerPlot ($ 39) - цифровий та аналоговий графік, моніторинг, користувацькі інтерфейси тощо.

    MakerPlot

  • ArduinoPlot (безкоштовно) - простий сюжет .

    ArduinoPlot

  • arduino-плотер (безкоштовно) - легкий, легкий графік із підтримкою для всіх примітивних типів

    ардуїно-плотер

  • Панель управління мостом (безкоштовно) - ведення журналів, побудова графіків тощо.

    Панель управління мостом

  • RealtimePlotter (безкоштовно) - графік даних 6 каналів.

    RealtimePlotter

  • Послідовний серійний графік даних у режимі реального часу (безкоштовно) - побудова даних CSV, ведення журналів та багато іншого

  • SimPlot (безкоштовно) - побудова 4-х канальних графіків.

    SimPlot

  • Arduino Serial Plotter (безкоштовно) - вбудований редактор Arduino в розділі Інструменти> Серійний плоттер .

    Серійний плоттер Arduino

(Це вікі спільноти, ви можете розширити список.)


Я збентежений. Я розмістив своє власне рішення нижче, але зараз я не впевнений, чи не було б краще відредагувати вашу публікацію, оскільки це вікі. Як ти гадаєш ?
Overdrivr

@Overdrivr Звичайно, продовжте цю вікі заради інших!
niutech

8

GnuPlot

Переваги: ​​це дуже гнучкий, сценарій і доступний у вільному доступі.

Недоліки: трохи складний у навчанні (але я зрозумів, як розпочати роботу за кілька хвилин, і досить функціональний через годину-дві), працює у вікні терміналу (якщо вважати це недоліком).

Щось мені здалося дуже корисним, це сценарій його, щоб періодично завантажувати файл журналу моєї термінальної програми, щоб у міру проходження експерименту я отримав динамічний графік.

Зображення GnuPlot



Редагувати: Ось сценарій GnuPlot, який описує його:

#!/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
Це виглядає чудово. Чи можете ви додати демо-код?
geometrikal

Але він відображає дані з Logfile.txt, а не серійні дані в реальному часі. Як підключити його до послідовного порту?
niutech

1
Ні, цей сценарій не "в режимі реального часу" - він може відставати приблизно на 4 секунди. Logfile.txt - це файл захоплення з термінальної програми. У моєму випадку система збору даних вибирає та записує журнали кожні 4 секунди, а сценарій GnuPlot повторює файл журналу кожні 4 секунди. Це досить динамічно для того, що я роблю з цим (моніторинг температури в приміщенні).
JRobert

7

Я використовую Matplotlib для будь-якого планування, що мені потрібно зробити.

Це ніяк не специфічно для ардуїно, але це дуже чудовий інструментарій побудови програми Python .

Я створив ряд додатків, які будують дані з різних мікроконтролерів у режимі реального часу на графіку, але це було дійсно більше двоступеневим процесом: 1. Отримайте дані з пристрою в комп'ютер, 2. Діаграма даних в режимі реального часу .

Дійсно, я думаю, ви повинні розбити своє питання на дві частини:

  • Як легко отримувати дані з Arduino / будь-якого послідовного пристрою в комп'ютер.
  • Яка хороша побудова бібліотеки, яка проста у використанні.

+1. Чи використовує відео "Arduino сюжет Matlab в реальному часі" [ youtube.com/watch?v=ntHZsLmNkgw] той самий прийом?
Девід Кері

Так. Він використовує виклик, який зчитує дані ардуїно в змінну matlab, а потім виклик, який оновлює графік matlab змінною matlab.
Коннор Вольф

Matplotlib - це пітон, а не матлаб.
DaveP

Я не погоджуюся з вами, це питання не слід розділяти на 2. Є рішення (наприклад, те, яке я розмістив нижче), яке опікується і тим, і іншим, тому що прикро повертати колесо для віддаленого моніторингу та контролю програм arduino, а також тому, що написання пітонного коду для сюжетів у реальному часі насправді дуже далеко від тривіального. Це можна зробити за допомогою matplotlib, але очевидно, що для цього є кращі альтернативи, такі як pyqtgraph.
Overdrivr

Частина 1: отримання даних від Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Габріель

6

SerialPlot (безкоштовно). Це робить все, що вам потрібно, і багато іншого.

Інші особливості:

  • Збільшити дані
  • Клацніть на точки даних, щоб побачити значення
  • Відправте команди назад до Arduino
  • Відкоригуйте загальну кількість нанесених балів
  • Можливість показу кожного каналу у власному автоматичному масштабі
  • Інтерпретує двійкові, ASCII та власні пакети
  • Демо-режим дозволяє грати з функціями

введіть тут опис зображення


1
Хороша відповідь, мені сподобався serialplot, він автоматично знайшов мій порт COM & швидкість передачі, мені просто довелося перейти з бінарного на CSV і збільшити до 3-х каналів (для магнітометра), і це було гарно задумано.
Hamish_Fernsby

Це найновіший і простий у використанні - але я б хотів, щоб був мак Бінарний :)
пройде

5

Відповідаючи на моє власне запитання тут .. Я використовую панель управління мостом, як згадувалося.

Переваги: ​​безліч особливостей.

Недоліки: хитрість у налаштуванні та дуже поганий звіт про синтаксис / помилки.

Для використання: Вам потрібно записувати дані Arduino через послідовний порт по одному байту. Для типу даних int, який виглядатиме так:

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

У Bridge команда для читання даних:

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

RX8 - команда читання [h = 43] означає, що наступний дійсний байт - "C" в ASCII, то високий байт Key1, а потім низький байт Key1

Виглядає так у Bridge:

введіть тут опис зображення

введіть тут опис зображення


5

Ви можете спробувати серійну діаграму . Це досить пряма програма вперед. Це робить саме те, про що ви просили. Єдиним недоліком є ​​те, що він вимагає даних у форматі CSV (не відповідає першій точці).

Знімок екрана зі сторінки проекту:

приклад


Я спробував це і виявив дуже незграбним, щоб працювати, без конфігурації за замовчуванням, не автомасштабує, через півгодини факсиміляції з синтаксисом у мене все ще не було графіку лише прямої лінії, тому я відмовився від використання SerialPlot, який працював протягом декількох хвилин, просто довелося вказати текст ascii та кількість каналів.
Hamish_Fernsby

4

Можливо, вас зацікавить Telemetry See на Github . Це протокол зв'язку, дуже простий у використанні, з чистим інтерфейсом, що дозволяє двосторонній зв'язок з пристроями Arduino / Mbed.

Якщо ви не хочете читати цю довгу публікацію, перегляньте детальну інформацію про всі дивовижні функції в ній

Потужність цієї бібліотеки походить від інтерфейсу командного рядка робочого столу (що не вимагає навичок програмування в python).

Він здатний відкривати високопродуктивні сюжети (набагато вище того, що можна зробити з matplotlib), просто ввівши команду .

Протокол підтримує комплекси структур даних . Наразі масиви та розріджені масиви можна надсилати із вбудованої дошки.

Діаграми, відкриті з інтерфейсу командного рядка, розуміють тип даних, а для масивів замість побудови кожної вибірки проти часу вибірка буде побудована на основі власного індексу.

Найближчим часом планується додати підтримку просторових координат (даних xyz), що дозволить негайно побудувати просторові дані. Знову сюжети знову розберуть усе, нанесіть ваші дані у 2D або 3D-простір, і ви можете зосередитись на розробці програми.

Я вважаю, що ці функції просто унікальні для такого проекту.

Пітелеметрія CLI Версія PyPI

Після встановлення з pipкомандного рядка можна запустити

pytlm

Тоді ви можете connect, ls(список) , отриманого тим, printдані , отримані по темі, pub(опублікувати) по темі або відкрити plotна тему , щоб відобразити отримані дані в режимі реального часу

введіть тут опис зображення

введіть тут опис зображення

Почати

Wiki

PS: Я автор.

Я розробив це, оскільки не зміг знайти рішення, яке дозволило б мені:

  • швидко писати сценарії на ПК для управління Arduino
  • швидко налагоджувати
  • графік складних даних (не лише значення, що змінюється за часом)

все вищезазначене, не використовуючи власні рішення чи роздуті графічні інтерфейси.

Використовуючи цю бібліотеку, час налагодження зв’язку між Arduino та ПК витрачався зазвичай від півдня до 5 хвилин.


PS: реєстрація даних послідовного порту в пакетах python (необроблені дані та декодовані дані) також повністю підтримується. Я маю намір використовувати його для реалізації функції відтворення в автономному режимі (імітувати потік послідовних даних)
Overdrivr

4

Ніхто не згадав Обробку, яка є надзвичайно багатогранною. Ви можете зробити набагато більше, ніж просто побудувати графік, але якщо це все, що ви хочете зробити, ви можете використовувати бібліотеку gwoptics; підключіть Arduino та обробку, як вказано тут .


2

Я зробив еквівалентний інструмент у python, який друкує дані в реальному часі з акселерометра ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

можливо, це буде корисно для когось

введіть тут опис зображення

Просто виберіть послідовний ком і швидкість і надішлете серійні дані у такому форматі:

  • 3 входи, кожен вхід - 2 байти (два доповнення)
  • 6 байт, відокремлених пробілом
  • пакет - це рядок, що закінчується символом '\ n'

Можна легко адаптувати для зміни цього формату


Чи можете ви пояснити, як це використовувати, і які переваги та недоліки в цьому?
Хлопець із капелюхом

2

Ви можете використовувати MATLAB Student Edition , це також може заощадити ваш час для подальшого аналізу. Ви можете просто відкрити COM-порт в MATLAB і побудувати отриманий сигнал та / або зберегти сигнал у робочій області або будь-якому іншому. MATLAB робить все просто!


2
Ласкаво просимо в Arduino SE! Чи можете ви відредагувати свою відповідь, щоб додати більше інформації, яка описує, як вона відповідає потребам ОП, і, можливо, трохи іншої інформації, наприклад, посилання чи фотографії? Спасибі!
Анонімний пінгвін

Хороший відповідь, не подумав би використовувати Matlab, є SO нитка тут про це stackoverflow.com/questions/19483098 / ...
Hamish_Fernsby

2

Формат CSV найбільш універсальний для будь-яких даних (підписані / непідписані, різного розміру та точності).

Межплатформенний (написаний Java / Scala) інструмент Scsvlog може отримувати / аналізувати рядки CSV з послідовного порту / сокета, показувати значення та малювати діаграми (до 8).


На жаль, інструмент зараз неможливо знайти, на жаль - оригінальне посилання мертве, і я не можу знайти жодної копії.
Арсеній Пичугин

2

Ви можете спробувати програмне забезпечення, яке я розробив для цієї пропозиції. Він спрямований на просту у використанні. Див. Розділ SerialGraphicator - Клієнт безкоштовного послідовного порту з відкритим кодом, здатний отримувати графічні значення, отримані у форматі JSON.


1

Хоча я сам цього не використовував, "rqt_plot", що працює на ПК, здається, є популярним способом побудови даних на ПК, який надходить через послідовний порт від Arduino, який виконує ескіз, що включає бібліотеку rosserial_arduino або бібліотеку ros_arduino_bridge .


1

Я знаю, що це дуже давнє запитання, але я нещодавно створив mac-додаток, який дуже добре вирішує цю проблему. Ви можете знайти більше інформації про це на www.bloonapp.com. На веб-сайті є кілька демонстраційних відео, які ви можете переглянути.введіть тут опис зображення


1
Станом на 1 серпня 18 року цей веб-сайт загинув.
Дан

1

Я знаю, що ви, ймовірно, після більш вдосконаленого інтерфейсу GUI, але мені вдалося повторити завдання, яке зазвичай робиться за допомогою осцилографа: Вихідний серійний плоттер Arduino

використовуючи серійний плотер в IDE Arduino та модуль ADC, ви можете отримати за $ 3 на eBay. Я визнаю, що це трохи сильно, але, можливо, варто пограти з інструментом деякий час, перш ніж інвестувати в рішення на рівні Python / Matlab / ect. Це було надзвичайно просто у використанні. Додавання запису на SD-карту до процесу не займе багато.

Дивіться: https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/


0

Телеметричний переглядач

Переваги:

  1. Простий у використанні
  2. Інтуїтивно зрозумілий та гнучкий інтерфейс користувача
  3. З відкритим кодом та безкоштовно
  4. Різні типи графіків
  5. Дуже швидка швидкість оновлення графіка

Недоліки:

  1. Зупинений розвиток
  2. Формат бінарних даних ще не завершений.
  3. Примітивні елементи керування графіком, такі як масштабування, скріншот та ... введіть тут опис зображення

0

Serial Plotter - це проста програма, яку я створив із Electron, який отримує дані у такому форматі: data1,data2,timestamp;і перетворює їх у графік реального часу.

введіть тут опис зображення


0

Майже корисно. Для цього потрібно:

  1. реєстрація послідовних даних у файл АБО
  2. графік з файлу та оновлення кожні xxx мілісекунд.

Живий графік - це кращий варіант, і я використовую його разом із Tera Term який отримує дані за допомогою USB / послідовного посилання (і зберігає їх у лог-файл, який потім опитує Live Graph).

Графік в реальному часі незначно під час кешування даних, і я не знайшов способу встановити рухоме вікно для відображення результатів. Також показ декількох графіків вимагає масштабування вручну, але, незважаючи на все це, він все ще дуже корисний. Це написано на Java, тож вам знадобиться JRE. Я вважаю за краще це над тим, щоб встановлювати python, як це роблять деякі інші графічні програми. Ще один недолік полягає в тому, що він відкриває 4 різні вікна, що є болем, коли я хочу перейти між ним і терміном Tera.

Мені ще потрібно знайти таке програмне забезпечення

  1. Виконаний файл (.EXE), тому він не має зовнішньої залежності
  2. Включає емулятор терміналу або реєстратор послідовних даних
  3. Журнали серійних даних
  4. Графікує декілька елементів із CSV
  5. Дозволяє для даних, обмежених CSV AND, обмеженими вкладками (що легше читати, коли вони прокручуються, одночасно контролюючи графік.
  6. Дозволяє встановлювати різні масштаби для кожного накладеного графіка, не потребуючи масштабування всього до [0..1] або встановлення множника, тобто дозволяючи встановити діапазон [y0..y1] для кожного елемента, що хапається.

1
Ласкаво просимо в Arduino SE! Ваша відповідь інформативна, але чи можете ви покращити форматування відповіді, використовуючи посібник із розмітки, який ви можете переглянути, натиснувши ?кнопку в редакторі.
Avamander

0

Я використовую обработку.org для серійного змови від Arduino. Це єдиний додаток, який я міг знайти, що дозволив мені створити реальні гістограми (наприклад, мільйон подій у сто бін) та відображати різні інформаційні номери на додаток до середніх сигм для кожного каналу. Дві основні проблеми: А) виявилося, що вона базується на Java без неподписаних байтів В) синхроніг із введенням необхідних кругових буферів і маркерів у дані. (висока швидкість, відсутність рукостискань)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.