我需要从Arduino绘制串行数据。
我需要以下方面的支持:
- 各种数据格式(例如,有符号,无符号,8位,16位);
- 在同一轴上绘制多个数据;
- 导出/导入文件数据。
由于通常需要从Arduino绘制串行数据,因此我的问题是:可以使用哪些程序/实用程序从Arduino绘制串行数据来满足上述需求?
您建议的方法的优点/缺点是什么?
我需要从Arduino绘制串行数据。
我需要以下方面的支持:
由于通常需要从Arduino绘制串行数据,因此我的问题是:可以使用哪些程序/实用程序从Arduino绘制串行数据来满足上述需求?
您建议的方法的优点/缺点是什么?
Answers:
有一些很好的应用程序可以可视化串行数据,包括:
MegunoLink(29.95美元;Lite免费)-绘图,记录,编程,报告等。
MakerPlot($ 39)-数字和模拟绘图,监视,自定义界面等。
ArduinoPlot(免费)-简单的绘图。
arduino-plotter(免费)-轻松轻巧的绘图,支持所有原始类型
桥控制面板(免费)-日志记录,绘图等。
RealtimePlotter(免费)-6通道数据绘图。
实时串行数据绘图仪(免费)-CSV数据绘图,记录等。
SimPlot(免费)-4通道绘图。
Arduino Serial Plotter(免费)-在Arduino编辑器中的Tools> Serial Plotter下构建。
(这是社区Wiki,您可以展开列表。)
优点:它非常灵活,可编写脚本并且可以免费使用。
缺点:学习起来有点复杂(但是我知道如何在几分钟内开始使用,在一两个小时内就可以正常工作)在终端窗口中运行(如果您认为这是一个缺点)。
我发现非常有用的是编写脚本以定期重新加载终端程序的日志文件,因此随着实验的进行,我得到了动态图。
编辑:这是绘制它的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
我将Matplotlib用于需要做的任何绘图。
它不是arduino特有的,但是它是一个非常出色的Python绘图工具包。
我已经建立了许多应用程序,可以将来自各种微控制器的数据实时绘制到图形上,但这实际上是一个两步过程:1.将数据从设备导入计算机,2.绘制实时数据。
确实,我认为您应该将问题分为两个部分:
SerialPlot(免费)。它可以满足您的所有要求,甚至更多。
其它功能:
在这里回答我自己的问题。我使用提到的网桥控制面板。
优点:众多功能。
缺点:设置棘手,语法/错误报告非常差。
使用方法:您需要一次在串行端口上将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中看起来像这样:
您可以尝试serialchart。这是相当严格的程序。它完全符合您的要求。唯一的缺点是它需要CSV格式的数据(不符合第一点)。
项目页面的截图:
您可能对Telemetry
See on Github感兴趣。它是一种易于使用的通信协议,具有干净的接口,可与Arduino / Mbed设备进行双向通信。
如果您不想阅读这篇冗长的文章,请参阅其中所有出色功能的演练
这个库的动力来自于台式机的命令行界面(要求无编程技能在Python)。
只需输入命令,它就能打开高性能绘图(比使用matplotlib可以完成的绘图高得多)。
该协议支持复杂数据结构。目前,可以从嵌入式板发送阵列和稀疏阵列。
从命令行界面打开的图了解数据的类型,对于数组,不是针对每个样本随时间绘制图表,而是针对其自身索引绘制样本。
计划在不久的将来增加对空间坐标(xyz数据)的支持,这将使您可以立即绘制空间数据。这些图将再次说明所有内容,在2D或3D空间中绘制数据,您可以专注于开发应用程序。
我相信这些功能对于此类项目而言是独一无二的。
使用安装后pip
,可以使用以下命令启动命令行
pytlm
然后,您可以connect
,ls
(列出)已接收的主题,print
在主题上接收的数据,pub
(在主题上)发布或plot
在主题上打开以实时显示接收到的数据
PS:我是作者。
我之所以开发它,是因为找不到能够让我执行以下操作的解决方案:
以上所有内容均未使用专有解决方案或过大的GUI。
使用该库,在Arduino和PC之间建立通信的时间通常从半天缩短到5分钟。
没有人提到过具有超级通用性的处理。您不仅可以进行绘图,还可以做很多事情,但是,如果您只想这样做,就可以使用gwoptics库。按照此处的指示连接Arduino和Processing 。
我在python中做了一个等效的工具,可以从ADXL345加速度计打印实时数据。 https://github.com/mba7/SerialPort-RealTime-Data-Plotter
可能会对某人有帮助
只需选择串行通讯和速度,然后以以下格式发送串行数据:
可以轻松地更改此格式
您可以使用MATLAB Student Edition,这也可以节省您进行进一步分析的时间。您只需在MATLAB中打开COM端口并绘制接收到的信号和/或将信号保存在工作区中或其他任何位置即可。MATLAB使一切变得简单!
CSV格式对于任何数据(有符号/无符号,各种大小和精度)最通用。
跨平台(用Java / Scala编写)工具Scsvlog可以从串行端口/套接字接收/解析CSV字符串,显示值和绘制图表(最多8个)。
您可以尝试我为此提案开发的软件。目的是易于使用。请参阅SerialGraphicator-能够使用JSON格式接收的图形值的开源免费串行端口客户端。
虽然我自己还没有使用过,但在PC上运行“ rqt_plot”似乎是一种在PC上绘制数据的流行方法,该PC是通过Arduino运行的包括rosserial_arduino库或ros_arduino_bridge库的草图的串行端口提供的。
我知道您可能正在追求更高级的GUI输出,但是我设法复制了一个通常用示波器完成的任务:
在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/
几乎有用。它需要:
Live Graph是更好的选择,我将其与Tera Term结合使用,后者通过USB /串行链接获取数据(并将其保存到日志文件中,然后Live Graph对其进行轮询)。
缓存数据时,Live Graph有点错误,我还没有找到设置移动窗口以显示结果的方法。另外,显示多个图形需要手动缩放,但是尽管如此,它仍然非常有用。它是用Java编写的,因此您需要JRE。我更喜欢这样做,而不是像其他一些图形绘制程序一样必须安装python。另一个缺点是,它会打开4个不同的窗口,当我想在它和Tera Term之间切换时,这很痛苦。
我还没有找到
?
编辑器中的按钮来查看降价指南。