Программы построения последовательных данных

36

Мне нужно построить серийные данные от Arduino.

Мне нужна поддержка для:

  1. Различные форматы данных (например, со знаком, без знака, 8 бит, 16 бит);
  2. Отображает несколько данных по одним и тем же осям;
  3. Экспорт / Импорт данных файла.

Поскольку получение последовательных данных от Arduino является обычной потребностью, мой вопрос: какие программы / утилиты доступны для вывода последовательных данных из Arduino, которые удовлетворяют вышеуказанным потребностям?

Каковы преимущества / недостатки предложенного вами метода?

akellyirl
источник
Я решил открыть с вашим последним редактированием. Поскольку этот вопрос стоит, кажется, что по теме, потому что он конкретен. Я буду понятен всем (поскольку таких вопросов не так много): если это слишком не по теме, мне, возможно, придется вмешаться. Однако вероятность этого случается редко. :) @JRobert Если GnuPlot отвечает требованиям в вопросе, опубликуйте его.
Анонимный Пингвин
1
Страница «Взаимодействие с другим программным обеспечением» на игровой площадке Arduino демонстрирует множество способов передачи последовательных данных с Arduino на iPhone, ПК с Windows, ПК с Linux и т. Д.
Дэвид Кэри,

Ответы:

19

Есть несколько хороших приложений для визуализации последовательных данных, в том числе:

  • MegunoLink ($ 29,95; Lite бесплатно) - черчение, ведение журнала, программирование, отчетность и многое другое.

    MegunoLink

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

    MakerPlot

  • ArduinoPlot (бесплатно) - простая прорисовка.

    ArduinoPlot

  • Arduino-plotter (бесплатно) - легкий, легкий способ построения графиков с поддержкой всех примитивных типов

    Arduino-плоттер

  • Панель управления мостом (бесплатно) - регистрация, построение графиков и многое другое.

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

  • RealtimePlotter (бесплатно) - 6 каналов данных.

    RealtimePlotter

  • Плоттер последовательных данных в реальном времени (бесплатно) - CSV данные, ведение журнала и многое другое.

  • SimPlot (бесплатно) - 4-х канальная прорисовка.

    Simplot

  • Arduino Serial Plotter (бесплатно) - встроенный редактор Arduino в меню «Инструменты»> «Последовательный плоттер» .

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

(Это вики сообщества, вы можете расширить список.)

niutech
источник
Я запутался. Я разместил свое собственное решение ниже, но теперь я не уверен, будет ли лучше редактировать ваше сообщение, так как это вики. Что вы думаете ?
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
JRobert
источник
1
Это выглядит великолепно. Не могли бы вы добавить демо-код?
геометрикал
Но он отображает данные из файла Logfile.txt, а не последовательные данные в реальном времени. Как подключить его к последовательному порту?
niutech
1
Нет, этот сценарий не «в реальном времени» - он может отставать примерно до 4 секунд. Logfile.txt - это файл захвата, выводимый из терминальной программы. В моем случае система сбора данных производит выборку и ведёт журнал каждые 4 секунды, а скрипт GnuPlot перезаписывает файл журнала каждые 4 секунды. Это достаточно динамично для того, что я делаю с ним (мониторинг комнатной температуры).
JRobert
7

Я использую Matplotlib для любых графиков, которые мне нужны.

Это не специфично для Arduino, но это очень хороший инструментарий для построения графиков Python .

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

На самом деле, я думаю, что вы должны разбить свой вопрос на две части:

  • Как вы легко получаете данные с Arduino / любого последовательного устройства на компьютер.
  • Что такое хорошая библиотека для построения графиков, которая проста в использовании.
Коннор Вольф
источник
+1. Использует ли видео «Arduino сюжет Matlab в реальном времени» [ youtube.com/watch?v=ntHZsLmNkgw] ту же технику?
Дэвид Кэри
Ага. Он использует вызов, который считывает данные arduino в переменную matlab, а затем вызов, который обновляет график matlab с помощью переменной matlab.
Коннор Вольф
Matplotlib - это питон, а не матлаб.
DaveP
Я не согласен с вами, этот вопрос не следует разделять на 2. Существуют решения (например, те, которые я выложил ниже), которые позаботятся о том и другом, потому что раздражает повторное использование колеса для удаленного мониторинга и управления приложениями Arduino, а также потому, что написание кода Python для графиков в реальном времени на самом деле очень далеко от тривиального. Вещи можно сделать с помощью matplotlib, но, очевидно, есть лучшие альтернативы для этого, такие как pyqtgraph.
Overdrivr
Для части 1: получение данных от Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Габриэль Стейплс
6

SerialPlot (бесплатно). Он делает все, что вам нужно и многое другое.

Другие свойства:

  • Увеличить данные
  • Нажмите на точки данных, чтобы увидеть значения
  • Отправить команды обратно в Arduino
  • Отрегулируйте общее количество точек на графике
  • Возможность показывать каждый канал в своем автоматическом масштабе
  • Интерпретирует двоичные, ASCII и пользовательские пакеты
  • Демо-режим позволяет вам играть с функциями

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

Nate
источник
1
Хороший ответ, мне понравился serialplot, он автоматически определил мой COM-порт и скорость в бодах, мне просто нужно было перейти с бинарного на CSV и увеличить до 3 каналов (для магнитометра), и он работал хорошо.
Hamish_Fernsby
Это опрятное и простой в использование - но я хотел был макинтош Binary :)
willwade
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, затем старший байт ключа 1, затем младший байт ключа 1

Похоже, это в Bridge:

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

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

akellyirl
источник
5

Вы можете попробовать серийный график . Это довольно прямолинейная программа. Это именно то, что вы просили. Единственным недостатком является то, что для этого требуются данные в формате CSV (не соответствует первому пункту).

Снимок экрана со страницы проекта:

пример

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

Вы можете быть заинтересованы в Telemetry Смотрите на Github . Это очень простой в использовании протокол связи с чистым интерфейсом, который обеспечивает двустороннюю связь с устройствами Arduino / Mbed.

Если вы не хотите читать этот длинный пост, посмотрите пошаговое руководство по всем удивительным функциям в нем

Сила этой библиотеки поступает из интерфейса командной строки рабочего стола (который не требует не навыков программирования в Python).

Он может открывать высокопроизводительные графики (намного выше, чем то, что можно сделать с помощью matplotlib), просто набрав команду .

Протокол поддерживает сложные структуры данных . На данный момент массивы и разреженные массивы можно отправлять со встроенной платы.

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

В ближайшее время планируется добавить поддержку пространственных координат (данные xyz), что позволит вам сразу же построить пространственные данные. После того, как графики снова разберутся, разместите свои данные в 2D или 3D пространстве, и вы сможете сосредоточиться на разработке своего приложения.

Я считаю, что эти функции просто уникальны для такого проекта.

Pytelemetry CLI Версия PyPI

После установки с pipпомощью командной строки можно запустить с

pytlm

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

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

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

Начать

Wiki

PS: я автор.

Я разработал его, потому что не мог найти решение, которое позволило бы мне:

  • быстро пишите скрипты на ПК для управления Arduino
  • быстро отладить
  • построение сложных данных (не только значение, изменяющееся во времени)

все вышеперечисленное без использования фирменных решений или раздутых графических интерфейсов.

Используя эту библиотеку, время для установки связи между Arduino и ПК обычно составляло от полдня до 5 минут.

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

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

Себастьян Зеки
источник
2

Я сделал эквивалентный инструмент в Python, который печатает данные в реальном времени от акселерометра ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

может быть, это будет полезно для кого-то

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

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

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

Может быть легко адаптирован для изменения этого формата

mba7
источник
Можете ли вы объяснить, как это использовать, и каковы преимущества и недостатки этого?
Парень со шляпой
2

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

AhKh
источник
2
Добро пожаловать в Arduino SE! Можете ли вы отредактировать свой ответ, чтобы добавить больше информации, описывающей его соответствие потребностям ОП, и, возможно, немного другой информации, такой как ссылка или фотография? Благодарность!
Анонимный Пингвин,
Хороший ответ, я бы даже не подумал об использовании Matlab, здесь есть SO-поток по этому поводу stackoverflow.com/questions/19483098/…
Hamish_Fernsby
2

Формат CSV наиболее универсален для любых данных (со знаком / без знака, различного размера и точности).

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

ed82484954
источник
К сожалению, инструмент больше не может быть найден сейчас - исходная ссылка устарела, и я не могу найти никаких копий.
Арсений Пичугин
2

Вы можете попробовать программное обеспечение, которое я разработал для этого предложения. Он предназначен для простоты использования. См. SerialGraphicator - свободный клиент последовательного порта с открытым исходным кодом, способный отображать значения графиков в формате JSON.

Ньютона
источник
1

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

Дэвид Кэри
источник
1

Я знаю, что это очень старый вопрос, но я недавно создал приложение для Mac, которое очень хорошо решает эту проблему. Вы можете найти больше информации об этом на www.bloonapp.com. На сайте есть несколько демо-видео, которые вы можете проверить.введите описание изображения здесь

Jazawe
источник
1
По состоянию на 1 августа 1818 года этот сайт мертв.
Дан
1

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

используя последовательный плоттер в Arduino IDE и модуль АЦП, вы можете получить за 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. Примитивные графические элементы управления, такие как зум, скриншот и ... введите описание изображения здесь
Ali80
источник
0

Serial Plotter - это простая программа, которую я создал для Electron, которая получает данные в следующем формате: data1,data2,timestamp;и преобразует их в график в реальном времени.

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

user2298995
источник
0

Практически полезно. Это необходимо:

  1. запись последовательных данных в файл ИЛИ
  2. построение графика из файла и обновление каждые ххх миллисекунд.

Live Graph - лучший вариант, и я использую его вместе с Tera Term, который получает данные через USB / последовательный канал (и сохраняет их в файл журнала, который затем опрашивает Live Graph).

Живой график слегка глючит при кэшировании данных, и я не нашел способа установить движущееся окно для отображения результатов. Кроме того, показ нескольких графиков требует ручного масштабирования, но, несмотря на все это, это все еще очень полезно. Он написан на Java, поэтому вам понадобится JRE. Я предпочитаю это, чем устанавливать Python, как это делают некоторые другие графические программы. Другим недостатком является то, что он открывает 4 разных окна, что является болью, когда я хочу переключиться между ним и Tera Term.

Я еще не нашел программное обеспечение, которое

  1. Исполняемый файл (.EXE), поэтому он не имеет внешней зависимости
  2. Включает эмулятор терминала или регистратор последовательных данных
  3. Регистрирует серийные данные
  4. Графики нескольких элементов из CSV
  5. Позволяет использовать данные в формате CSV и табуляции (которые легче читать при прокрутке и одновременном мониторинге графика).
  6. Позволяет устанавливать различные масштабы для каждого наложенного графика без необходимости масштабировать все до [0..1] или устанавливать множитель, т.е. разрешать установку диапазона [y0..y1] для каждого отображаемого элемента.
Махеш
источник
1
Добро пожаловать в Arduino SE! Ваш ответ является информативным, но не могли бы вы улучшить форматирование ответа, используя руководство по уценке, которое вы можете просмотреть, нажав ?кнопку в редакторе.
Авамандер
0

Я использую processing.org для серийного черчения от Arduino. Это было единственное приложение, которое я смог найти, что позволило мне создавать реальные гистограммы (например, миллион событий в сотне бинов) и отображать различные информационные числа в дополнение к средней сигме для каждого канала. Две основные проблемы: A) оказалось, что он основан на Java без байтов без знака. B) синхронизация с входным обязательным циклическим буфером и маркерами в данных. (высокая скорость, без рукопожатия)

детектор
источник