Программы построения последовательных данных
Мне нужно вывести последовательные данные из Arduino.
Мне нужна поддержка для:
- Различные форматы данных (например, со знаком, без знака, 8 бит, 16 бит);
- Наносит несколько данных на одни и те же оси;
- Экспорт/импорт данных файла.
Поскольку вывод последовательных данных из Arduino является обычной необходимостью, мой вопрос: Какие программы/утилиты доступны для построения последовательных данных с Arduino, отвечающих вышеуказанным требованиям?
Каковы преимущества/недостатки предложенного вами метода?
@akellyirl, 👍48
Обсуждение21 ответ
Отвечая на мой собственный вопрос здесь. Я использую панель управления Bridge, как уже упоминалось.
Преимущества: множество функций.
Недостатки: сложность настройки и очень плохой синтаксис/сообщения об ошибках.
Для использования: Вам нужно записывать данные 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 это выглядит так:
Я использую Matplotlib для любого графика, который мне нужно сделать.
Это никоим образом не связано с Arduino, но это отличный набор инструментов Python для построения графиков.
Я создал несколько приложений, отображающих данные от различных микроконтроллеров в режиме реального времени в виде графика, но на самом деле это был двухэтапный процесс: 1. Передача данных с устройства на компьютер, 2. отображать данные в реальном времени.
Действительно, я думаю, вам следует разбить свой вопрос на две части:
- Как легко передать данные с Arduino/любого последовательного устройства на компьютер.
- Какая хорошая библиотека для построения графиков проста в использовании.
+1. Использует ли видео «Arduino в реальном времени Matlab» [https://www.youtube.com/watch?v=ntHZsLmNkgw] ту же технику?, @David Cary
Ага. Он использует вызов, который считывает данные Arduino в переменную Matlab, а затем вызов, который обновляет график Matlab с помощью переменной Matlab., @Connor Wolf
Matplotlib - это Python, а не Matlab., @DaveP
Я с вами не согласен, этот вопрос не следует делить на 2. Есть решения (например, то, что я разместил ниже), которые заботятся о обоих, потому что раздражает изобретать колесо для удаленного мониторинга и управления приложениями Arduino, а также потому, что написание кода на Python для графиков в реальном времени на самом деле очень далеко не тривиально. Что-то можно сделать с помощью matplotlib, но очевидно, что для этого есть лучшие альтернативы, такие как pyqtgraph., @Overdrivr
Для части 1: получение данных от Arduino: https://github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm, @Gabriel Staples
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
Это выглядит великолепно. Не могли бы вы добавить демо-код?, @geometrikal
Но он отображает данные из Logfile.txt, а не серийные данные в реальном времени. Как подключить его к последовательному порту?, @niutech
Нет, этот сценарий не работает в режиме реального времени — он может отставать примерно на 4 секунды. Logfile.txt — это файл захвата, выводимый программой терминала. В моем случае система сбора данных производит выборку и журнал каждые 4 секунды, а скрипт GnuPlot обновляет файл журнала каждые 4 секунды. Это достаточно динамично для того, что я с ним делаю (мониторинг комнатной температуры)., @JRobert
Вы можете использовать MATLAB Student Edition, это также может сэкономить ваше время для дальнейшего анализа. Вы можете просто открыть COM-порт в MATLAB и построить полученный сигнал и/или сохранить сигнал в рабочей области или где-то еще. MATLAB делает все проще!
Добро пожаловать в Ардуино SE! Не могли бы вы отредактировать свой ответ, чтобы добавить больше информации, описывающей, как он соответствует потребностям ОП, и, возможно, немного другой информации, такой как ссылка или фотография? Спасибо!, @Anonymous Penguin
Хороший ответ, я бы не подумал об использовании Matlab, здесь есть поток SO об этом https://stackoverflow.com/questions/19483098/using-matlab-to-display-streaming-serial-data, @Hamish_Fernsby
Я сделал аналогичный инструмент на Python, который печатает данные в реальном времени с акселерометра ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter
может кому пригодится
Просто выберите COM порт и скорость и отправьте последовательные данные в следующем формате:
- 3 входа, каждый вход представляет собой 2 байта (дополнение до двух)
- 6 байтов, разделенных пробелом
- пакет представляет собой строку, оканчивающуюся символом '\n'
Можно легко адаптировать для изменения этого формата
Можете ли вы объяснить, как это использовать, и каковы преимущества и недостатки этого?, @The Guy with The Hat
Вы можете попробовать serialchart. Это довольно прямолинейная программа. Он делает именно то, что вы просили. Единственный недостаток — требуются данные в формате CSV (не соответствует первому пункту).
Скриншот со страницы проекта:
Я попробовал это и обнаружил, что это очень неуклюже, чтобы работать, нет конфигурации по умолчанию, не автомасштабируется, после получаса возни с синтаксисом у меня все еще не было графика, только прямая линия, поэтому я сдался и использовал SerialPlot, который работал в течение нескольких минут, просто нужно было указать текст ascii и количество каналов., @Hamish_Fernsby
Хотя я сам не использовал его, "rqt_plot", запущенный на ПК, кажется популярным способом построения графика данных. на ПК, подключенном к последовательному порту от Arduino, на котором запущен скетч, включающий библиотеку rosserial_arduino или библиотека ros_arduino_bridge.
- Учебное пособие по осциллографу Arduino
- российский arduino
- визуализировать все, используя rqt_plot... мой первый проект arduino micro ros
- "24 июля: теперь, когда я настроил Arduino с помощью Kessel, я могу лучше визуализировать данные с помощью инструментов ROS"
- и т. д.
Есть несколько хороших приложений для визуализации серийных данных, в том числе:
MegunoLink (39,95$; Lite бесплатно) — построение графиков, ведение журналов, программирование, создание отчетов и многое другое.
Electric UI (80$; бесплатно для учащихся) – кросс-платформенная, полнофункциональная платформа графического интерфейса пользователя на основе кода для аппаратного обеспечения.
MakerPlot (59 долл.) – цифровая версия. аналоговые графики, мониторинг, настраиваемые интерфейсы и многое другое.
ArduinoPlot (бесплатно) — простой график.
arduino-plotter (бесплатно) – простая и легкая прорисовка с поддержкой всех типов примитивов
Панель управления мостом (бесплатно) - ведение журнала, построение графиков и многое другое.
RealtimePlotter (бесплатно) – 6-канальная прорисовка данных.
SimPlot (бесплатно) – 4-канальный график.
Последовательный плоттер Arduino (бесплатно) — встроен в редактор Arduino в разделе Инструменты > Серийный плоттер.
(Это вики сообщества, вы можете расширить список.)
Я в замешательстве. Я разместил свое собственное решение ниже, но теперь я не уверен, что было бы лучше отредактировать ваш пост, поскольку это вики. Что вы думаете ?, @Overdrivr
@Overdrivr Конечно, расширяйте эту вики ради других!, @niutech
Формат CSV наиболее универсален для любых данных (со знаком/без знака, разного размера и точности).
Кроссплатформенный (написанный на Java/Scala) инструмент Scsvlog может получать/анализировать строки CSV из последовательного порта/сокета, показывать значения и рисовать диаграммы (до 8).
Инструмент уже не найти, к сожалению - исходная ссылка мертва, и я не могу найти никаких копий., @Арсений Пичугин
Вы можете попробовать программное обеспечение, которое я разработал для этого предложения. Он призван быть простым в использовании. См. раздел SerialGraphicator — бесплатный клиент последовательного порта с открытым исходным кодом, поддерживающий графические значения, полученные в формате JSON.
Почти полезно. Требуется:
- запись серийных данных в файл ИЛИ
- создание графика из файла и обновление каждые xxx миллисекунд.
Live Graph — лучший вариант, и я использую его в сочетании с Tera Term, который получает данные через USB/последовательный канал (и сохраняет их в файл журнала, который затем опрашивает Live Graph).
Live Graph содержит небольшие ошибки при кэшировании данных, и я не нашел способа установить движущееся окно для отображения результатов. Кроме того, отображение нескольких графиков требует ручного масштабирования, но, несмотря на все это, это все равно очень полезно. Он написан на Java, поэтому вам понадобится JRE. Я предпочитаю это установке Python, как это делают некоторые другие графические программы. Еще одним недостатком является то, что он открывает 4 разных окна, что очень неудобно, когда я хочу переключаться между ним и Tera Term.
Я еще не нашел ПО, которое
- Исполняемый файл (.EXE), поэтому он не зависит от внешних источников
- Включает в себя эмулятор терминала или регистратор последовательных данных.
- Записывает серийные данные.
- Отображает несколько элементов из файла CSV.
- Допускает данные в формате CSV И с разделителями табуляцией (что гораздо легче читать при прокрутке и одновременном отслеживании графика).
- Позволяет устанавливать разные масштабы для каждого наложенного графика без необходимости масштабировать все до [0..1] или устанавливать множитель, т.е. позволяет устанавливать диапазон [y0..y1] для каждого элемента графика.
Добро пожаловать в Ардуино SE! Ваш ответ является информативным, но не могли бы вы улучшить форматирование ответа, используя руководство по уценке, которое вы можете просмотреть, нажав кнопку «?» в редакторе., @Avamander
Никто не упомянул Обработку, которая очень универсальна. Вы можете делать гораздо больше, чем просто рисовать, но если это все, что вам нужно, вы можете использовать библиотеку gwoptics; подключите Arduino и Processing, как указано здесь.
Вас может заинтересовать телеметрия
см. на Github . Это очень простой в использовании протокол связи с понятным интерфейсом, который обеспечивает двунаправленную связь с устройствами Arduino/Mbed.
Если вы не хотите читать этот длинный пост, см. Пошаговое руководство по всем потрясающие возможности
Мощь этой библиотеки заключается в интерфейсе командной строки рабочего стола (который не требует никаких навыков программирования на Python).
Он может открывать высокопроизводительные графики (намного выше, чем то, что можно сделать с помощью matplotlib) просто набрав команду.
Протокол поддерживает сложные структуры данных. На данный момент массивы и разреженные массивы можно отправлять со встроенной платы.
Диаграммы, открытые из интерфейса командной строки, понимают тип данных, а для массивов, вместо того, чтобы отображать каждую выборку в зависимости от времени, выборка будет построена по своему собственному индексу.
В ближайшем будущем планируется добавить поддержку пространственных координат (данные xyz), что позволит вам отображать сразу пространственные данные. Еще раз, графики все поймут, отобразят ваши данные в 2D или 3D-пространстве, и вы сможете сосредоточиться на разработке своего приложения.
Я считаю, что эти функции просто уникальны для такого проекта.
CLI Pytelemetry
После установки с помощью pip
командную строку можно запустить с помощью
pytlm
Затем вы можете подключить
, ls
(список) полученных тем, распечатать
данные, полученные по теме, опубликовать
(опубликовать) в теме или открыть график
в теме для отображения полученных данных в режиме реального времени
Начать
Вики
PS : я автор.
Я разработал его, потому что не смог найти решение, которое позволило бы мне:
- быстро писать скрипты для ПК для управления Arduino
- быстрая отладка
- отображать сложные данные (а не только изменяющееся во времени значение)
все вышеперечисленное без использования проприетарных решений или раздутых графических интерфейсов.
При использовании этой библиотеки время для настройки связи между Arduino и ПК сократилось обычно с полдня до 5 минут.
PS: регистрация данных последовательного порта в пакетах python (необработанные данные и декодированные данные) также полностью поддерживается. Я намерен использовать его для реализации функции воспроизведения в автономном режиме (имитировать последовательный поток данных), @Overdrivr
Я знаю, что это очень старый вопрос, но недавно я создал приложение для Mac, которое очень хорошо решает эту проблему. Вы можете найти больше информации об этом на www.bloonapp.com. На веб-сайте есть несколько демонстрационных видеороликов, которые вы можете посмотреть.
По состоянию на 1 августа 2018 года этот сайт не работает., @Dan
Я знаю, что вам, вероятно, нужен более продвинутый графический интерфейс, но мне удалось воспроизвести задачу, которую обычно выполняют с помощью осциллографа:
используя последовательный плоттер в среде разработки Arduino IDE и модуль АЦП, который можно приобрести на eBay за 3 доллара. Я признаю, что это немного грубо, но, возможно, стоит немного поиграть с этим инструментом, прежде чем инвестировать в решения уровня Python/Matlab/ect. Он был чрезвычайно прост в использовании. Не составит большого труда добавить в процесс запись на SD-карту.
См.: https: //edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/
SerialPlot (бесплатно). Он делает все, что вам нужно, и даже больше.
Другие функции:
- Увеличить данные
- Нажмите на точки данных, чтобы увидеть значения
- Отправить команды обратно в Arduino
- Настроить общее количество нанесенных точек
- Возможность отображать каждый канал на отдельном графике с автоматическим масштабированием.
- Интерпретирует двоичные, ASCII и пользовательские пакеты
- В демонстрационном режиме можно экспериментировать с функциями.
Хороший ответ, мне понравился серийный график, он автоматически нашел мой COM-порт и скорость передачи данных, мне просто нужно было перейти с двоичного на CSV и увеличить до 3 каналов (для магнитометра), и он хорошо рисовал., @Hamish_Fernsby
Это самый аккуратный и простой в использовании, но я бы хотел, чтобы был Mac Binary :), @willwade
AppImage доступен => сверхбыстрая установка!, @doom
Но кажется, что значок SerialPlot не виден в Ubuntu (AppImage)., @doom
Хотел бы попробовать этот инструмент, но не могу найти документацию о том, как форматировать данные, отправляемые на последовательный порт., @kregus
Просмотр телеметрии
Преимущества:
- Простой в использовании
- Интуитивно понятный и гибкий пользовательский интерфейс.
- Открытый исходный код и бесплатно
- Различные типы графиков
- Очень высокая скорость обновления графика.
Недостатки:
- Остановка разработки
- Двоичный формат данных еще не завершен.
- Примитивные элементы управления графиком, такие как масштабирование, снимок экрана и...
SVisual Мониторинг и запись сигналов для Arduino и не только.
Пример видео
Загрузить (бесплатно)
Serial Plotter — это простая программа, которую я создал с помощью Electron и которая получает данные в следующем формате:
data1,data2,timestamp;
и преобразует их в диаграмму в реальном времени.
Я использую processing.org для последовательного построения графиков с Arduino. Это было единственное приложение, которое я смог найти, которое позволяло мне делать настоящие гистограммы (например, миллион событий в сотне бинов) и отображать различные информационные числа в дополнение к среднему сигме для каждого канала. Две основные проблемы: А) он оказался основан на Java без беззнаковых байтов Б) синхронизация с вводом необходимого циклического буфера и маркеров в данных. (высокая скорость, без рукопожатия)
HITIPanel Построение и запись последовательных данных. Вы можете увеличивать/уменьшать масштаб, панорамировать, экспортировать данные в текст или файл Excel или импортировать внешние данные из текстовых файлов. Поставляется с пользовательским интерфейсом для управления и мониторинга оборудования.
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды
- Использовать все контакты как цифровые входы/выходы
Я решил снова открыть ваше последнее редактирование. В нынешнем виде этот вопрос кажется по теме, потому что он *конкретный*. Я буду понятен любому (поскольку вопросов такого типа не так много): если это слишком не по теме, мне, возможно, придется вмешаться. Однако вероятность того, что это произойдет, очень мала. :) @JRobert Если GnuPlot соответствует требованиям вопроса, опубликуйте его., @Anonymous Penguin
На странице ["Взаимодействие с другим программным обеспечением"](http://playground.arduino.cc/Main/InterfacingWithSoftware) на площадке Arduino Playground показано множество способов передачи последовательных данных с Arduino на iPhone, ПК с Windows, ПК с Linux и т. д., @David Cary