Arduino串口数据可视化方法
系统:win10 64bits
Arduino IDE: 1.8.5
Arduino开发板:UNO
Arduino可以方便地操作传感器获得传感器数据,获取数据之后我们比较关心的是数据可视化Arduino自带有串口监视器和串口绘图器,我还找到了其他3种适合于arduino串口数据绘图的工具,这篇博客也当做个记录,分别介绍这4种绘图方法,传感器数据是上一篇博客介绍的K型热电偶采集的温度。
(1)IDE自带的串口绘图器
程序1
#include <MAX6675_Thermocouple.h>
#define SCK_PIN 3 // 模块上的SCK口连接到 pin3
#define CS_PIN 4 // 模块上的CS口连接到 pin4
#define SO_PIN 5 // 模块上的SO口连接到 pin5
// 不要忘了模块上的5v和GND要连接到arduino开发板
MAX6675_Thermocouple* thermocouple = NULL;
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(9600); //设置串口波特率9600
thermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
}
// the loop function runs over and over again forever
void loop() {
double celsius = thermocouple->readCelsius(); // 摄氏度
Serial.println(celsius); // println打印会自动添加'\r\n',可以在串口绘图器显示
delay(500);// 延时500ms
}
程序执行之后打开即可,注意程序里面串口输出要使用Serial.println ,这个函数官方介绍如下
最后绘图器显示的绘图如下
下面的3个绘图工具均可在IDE上的工具栏选择【项目】-【加载库】-【管理库】,然后搜索安装得到
(2)Plotter
项目地址:https://github.com/devinaconley/arduino-plotter
所需额外绘图工具:Listener 软件在链接里面找,根据自己系统选择对应版本,注意,这个需要JRE环境,JRE下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
程序2
#include <MAX6675_Thermocouple.h>
#include "Plotter.h"
double x;
Plotter p;
#define SCK_PIN 3 // 模块上的SCK口连接到 pin3
#define CS_PIN 4 // 模块上的CS口连接到 pin4
#define SO_PIN 5 // 模块上的SO口连接到 pin5
// 不要忘了模块上的5v和GND要连接到arduino开发板
MAX6675_Thermocouple* thermocouple = NULL;
// the setup function runs once when you press reset or power the board
void setup() {
p.Begin(); // 创建一个plotter
p.AddTimeGraph( "Temperature of K-type thermalcouple", 100, "temperature", x ); // 添加时间图表
// 不需要设置波特率
thermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
}
// the loop function runs over and over again forever
void loop() {
double celsius = thermocouple->readCelsius(); // 摄氏度
x = celsius;
p.Plot();
// Serial.println(celsius); // println打印会自动添加'\r\n',可以在串口绘图器显示
delay(500);// 延时500ms
}
打开listener,得到结果如下
使用这个绘图每隔一段数据就会刷新重新绘图,对这个不了解不知如何设置。
(3)FlexiPlot
项目地址:https://github.com/xcoder123/FlexiPlot_Arduino
所需额外绘图工具:https://github.com/xcoder123/FlexiPlot/releases
使用此绘图工具获取不到图像
(3)PlotPlus,兼容SimPlot
项目地址:https://github.com/rlogiacco/PlotPlus
所需额外绘图工具:SimPlot (推荐) , Sloeber(一个eclipse的插件)
程序
#include <MAX6675_Thermocouple.h>
#include <PlotPlus.h>
#define SCK_PIN 3 // 模块上的SCK口连接到 pin3
#define CS_PIN 4 // 模块上的CS口连接到 pin4
#define SO_PIN 5 // 模块上的SO口连接到 pin5
// 不要忘了模块上的5v和GND要连接到arduino开发板
MAX6675_Thermocouple* thermocouple = NULL;
// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(9600); //设置串口波特率9600
thermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
}
// the loop function runs over and over again forever
void loop() {
double celsius = thermocouple->readCelsius(); // 摄氏度
// double fahrenheit = thermocouple->readFahrenheit();
plot(celsius);
// Serial.println(celsius); // println打印会自动添加'\r\n',可以在串口绘图器显示
delay(500);// 延时500ms
}
打开simplot,设置串口和波特率,然后连接,结果如下
结论:
感觉另外的三种都不及IDE自带的,特别是FlexiPlot,连自带的例子运行之后再用提供的软件显示不了绘图,要使串口数据发送到电脑进行处理或者可视化,终极办法还是自己写个上位机(本科大三做过基于Qt+Qwt的上位机,获取stm32发送到电脑的数据并且显示/保存),现在已经没那么多时间玩电子类的东西了,只有放假的时候偶尔练练手,也不想将学过的知识就这样抛弃了,又不想去折腾51或者STM32,所以选择了arduino,发现arduino真的可以方便快捷构建自己想要的电路,而且网上还有丰富的库,常见传感器随便一搜就有,用它来做一些小东西非常方便。
原文作者:落叶_小唱