串行数据绘图程序


36

我需要从Arduino绘制串行数据。

我需要以下方面的支持:

  1. 各种数据格式(例如,有符号,无符号,8位,16位);
  2. 在同一轴上绘制多个数据;
  3. 导出/导入文件数据。

由于通常需要从Arduino绘制串行数据,因此我的问题是:可以使用哪些程序/实用程序从Arduino绘制串行数据来满足上述需求?

您建议的方法的优点/缺点是什么?


我决定重新打开您的上一次编辑。就这个问题而言,它似乎是话题,因为它是特定的。我将对任何人都很清楚(因为这类问题很少):如果这个话题太过分了,我可能不得不介入。但是,这种情况发生的可能性很少。:) @JRobert如果GnuPlot满足问题的要求,请将其发布。
匿名企鹅2014年

1
“与其他软件接口技术”上的Arduino游乐场页面显示一堆的方法来从一个Arduino串行数据绘制到iPhone,Windows PC上,Linux的PC,等等
大卫·卡里

Answers:


19

有一些很好的应用程序可以可视化串行数据,包括:

(这是社区Wiki,您可以展开列表。)


我糊涂了。我在下面发布了自己的解决方案,但是现在我不确定因为它是Wiki,所以编辑您的帖子是否更好。你怎么看 ?
2016年

@Overdrivr当然,请为他人着想扩展此Wiki!
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用于需要做的任何绘图。

它不是arduino特有的,但是它是一个非常出色的Python绘图工具包。

我已经建立了许多应用程序,可以将来自各种微控制器的数据实时绘制到图形上,但这实际上是一个两步过程:1.将数据从设备导入计算机,2.绘制实时数据。

确实,我认为您应该将问题分为两个部分:

  • 您如何轻松地将数据从Arduino / Any串行设备获取到计算机中。
  • 什么是易于使用的好的绘图库。

+1。“ Arduino实时绘图Matlab” [ youtube.com/watch?v=ntHZsLmNkgw]视频是否使用相同的技术?
大卫·卡里

是的 它使用一个调用来将arduino数据读入一个matlab变量,然后使用一个用matlab变量更新matlab图的调用。
康纳·沃尔夫

Matplotlib是python,而不是matlab。
DaveP

我不同意您的意见,这个问题不应一分为二。有些解决方案(例如我在下面发布的解决方案)可以同时解决这两个问题,因为麻烦的是要重新使用arduino应用程序进行远程监视和控制,并且因为编写用于实时绘图的python代码实际上并非易事。使用matplotlib可以完成操作,但是显然有更好的替代方法,例如pyqtgraph。
2016年

对于第1部分:从Arduino获取数据:github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot(免费)。它可以满足您的所有要求,甚至更多。

其它功能:

  • 放大数据
  • 单击数据点以查看值
  • 将命令发送回Arduino
  • 调整绘制的总点数
  • 能够在自己的自动缩放图中显示每个通道
  • 解释二进制,ASCII和自定义数据包
  • 演示模式可让您玩游戏

在此处输入图片说明


1
好的答案,我喜欢serialplot,它自动找到了我的COM端口和波特率,我只需要从二进制更改为CSV,然后增加到3个通道(对于磁力计),就可以绘制出精美的图。
Hamish_Fernsby

这是最简洁且易于使用的-但我确实希望有一个Mac Binary :)
20:39

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]表示下一个有效字节是ASCII中的“ C”,然后是Key1的高字节,然后是Key1的低字节

在Bridge中看起来像这样:

在此处输入图片说明

在此处输入图片说明


5

您可以尝试serialchart。这是相当严格的程序。它完全符合您的要求。唯一的缺点是它需要CSV格式的数据(不符合第一点)。

项目页面的截图:

例


我尝试了一下,发现开始工作很笨拙,没有默认配置,没有自动缩放,在忙了半个小时的语法后,我仍然没有一条直线,所以我放弃了并使用了SerialPlot在几分钟内就可以工作了,只需要指定ascii文字和频道数即可。
Hamish_Fernsby

4

您可能对Telemetry See on Github感兴趣。它是一种易于使用的通信协议,具有干净的接口,可与Arduino / Mbed设备进行双向通信。

如果您不想阅读这篇冗长的文章,请参阅其中所有出色功能的演练

这个库的动力来自于台式机的命令行界面(要求编程技能在Python)。

只需输入命令,它就能打开高性能绘图(比使用matplotlib可以完成的绘图高得多)。

该协议支持复杂数据结构。目前,可以从嵌入式板发送阵列和稀疏阵列。

从命令行界面打开的图了解数据的类型,对于数组,不是针对每个样本随时间绘制图表,而是针对其自身索引绘制样本。

计划在不久的将来增加对空间坐标(xyz数据)的支持,这将使您可以立即绘制空间数据。这些图将再次说明所有内容,在2D或3D空间中绘制数据,您可以专注于开发应用程序。

我相信这些功能对于此类项目而言是独一无二的。

骨密度测定CLI PyPI版本

使用安装后pip,可以使用以下命令启动命令行

pytlm

然后,您可以connectls(列出)已接收的主题,print在主题上接收的数据,pub(在主题上)发布或plot在主题上打开以实时显示接收到的数据

在此处输入图片说明

在此处输入图片说明

开始吧

维基

PS:我是作者。

我之所以开发它,是因为找不到能够让我执行以下操作的解决方案:

  • 快速编写PC脚本来控制Arduino
  • 快速调试
  • 绘制复杂数据(不仅仅是随时间变化的值)

以上所有内容均未使用专有解决方案或过大的GUI。

使用该库,在Arduino和PC之间建立通信的时间通常从半天缩短到5分钟。


PS:完全支持在python包中记录串行端口数据(原始数据和解码数据)。我打算用它来实现离线重放功能(模拟串行数据流)
Overdrivr


2

我在python中做了一个等效的工具,可以从ADXL345加速度计打印实时数据。 https://github.com/mba7/SerialPort-RealTime-Data-Plotter

可能会对某人有帮助

在此处输入图片说明

只需选择串行通讯和速度,然后以以下格式发送串行数据:

  • 3个输入,每个输入为2个字节(二进制补码)
  • 6个字节用空格分隔
  • 数据包是一个以“ \ n”结尾的字符串

可以轻松地更改此格式


您能解释一下如何使用它,它的优缺点是什么?
帽子的家伙

2

您可以使用MATLAB Student Edition,这也可以节省您进行进一步分析的时间。您只需在MATLAB中打开COM端口并绘制接收到的信号和/或将信号保存在工作区中或其他任何位置即可。MATLAB使一切变得简单!


2
欢迎使用Arduino SE!您能否编辑答案以添加更多信息,以描述其如何满足OP的需求,也许还提供其他一些信息,例如链接或照片?谢谢!
匿名企鹅2014年

好的答案,不会考虑使用Matlab,这里有一个SO线程stackoverflow.com/questions/19483098/…–
Hamish_Fernsby

2

CSV格式对于任何数据(有符号/无符号,各种大小和精度)最通用。

跨平台(用Java / Scala编写)工具Scsvlog可以从串行端口/套接字接收/解析CSV字符串,显示值和绘制图表(最多8个)。


很遗憾,现在无法再找到该工具-原始链接已死,我似乎找不到任何副本。
АрсенийПичугин

2

您可以尝试我为此提案开发的软件。目的是易于使用。请参阅SerialGraphicator-能够使用JSON格式接收的图形值的开源免费串行端口客户端。



1

我知道这是一个非常老的问题,但是我最近创建了一个Mac应用程序,很好地解决了这个问题。您可以在www.bloonapp.com上找到有关它的更多信息。网站上有一些演示视频,您可以查看。在此处输入图片说明


1
截至18年8月1日,此网站已死。

1

我知道您可能正在追求更高级的GUI输出,但是我设法复制了一个通常用示波器完成的任务: Arduino串行绘图仪输出

在Arduino IDE中使用串行绘图仪和ADC模块,您可以在eBay上以3美元的价格获得。我承认这有点粗糙,但是在您投资于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

串行绘图仪是我用Electron制作的一个简单程序,data1,data2,timestamp;它以以下格式接收数据: 并将其转换为实时图表。

在此处输入图片说明


0

几乎有用。它需要:

  1. 将串行数据记录到文件中或
  2. 从文件绘图并每xxx毫秒更新一次。

Live Graph是更好的选择,我将其与Tera Term结合使用,后者通过USB /串行链接获取数据(并将其保存到日志文件中,然后Live Graph对其进行轮询)。

缓存数据时,Live Graph有点错误,我还没有找到设置移动窗口以显示结果的方法。另外,显示多个图形需要手动缩放,但是尽管如此,它仍然非常有用。它是用Java编写的,因此您需要JRE。我更喜欢这样做,而不是像其他一些图形绘制程序一样必须安装python。另一个缺点是,它会打开4个不同的窗口,当我想在它和Tera Term之间切换时,这很痛苦。

我还没有找到

  1. 可执行文件(.EXE),因此没有外部依赖
  2. 包括终端仿真器或串行数据记录器
  3. 记录串行数据
  4. 从CSV图形化多个项目
  5. 允许CSV和制表符分隔的数据(在滚动同时监视图形的同时,更易于阅读。
  6. 允许为每个重叠图形设置不同的比例,而不必将所有比例缩放为[0..1]或设置乘数,即允许为每个图形项设置[y0..y1]范围。

1
欢迎使用Arduino SE!您的答案很有帮助,但您可以使用降价指南来改善答案的格式,您可以通过按?编辑器中的按钮来查看降价指南。
Avamander '16

0

我正在使用processing.org从Arduino进行串行绘图。这是我能找到的唯一一款使我能够制作真实的直方图(例如,一百个装箱中的一百万个事件)并显示各种信息编号以及每个通道的平均sigma的应用程序。两个主要问题:A)事实证明它是基于Java的,没有无符号字节。B)与输入同步的循环缓冲区和数据中的标记。(高速,无握手)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.