调试串口被乱码劝退?SerialPlot 让数据流一分钟变波形
【免费下载链接】serialplotSmall and simple software for plotting data from serial port in realtime.项目地址: https://gitcode.com/gh_mirrors/se/serialplot
SerialPlot 是一个基于 Qt 的轻量级串口数据可视化工具,它的任务只有一个:把串口收到的字节流实时画成一条条波形。它面向嵌入式开发者、硬件调试人员和传感器数据采集场景,解决的是"明明有数据,却看不懂数据"这个最磨人的问题。下面我用一次真实的调试经历带你把玩它。
先说说那个让我盯着十六进制发呆的晚上
有一次我调试一块温湿度传感器板子,串口助手开着,屏幕上滚过几百行7F 81 0A 3C...。波特率对、接线对、数据也在持续输出,但我愣是没法判断"湿度到底稳不稳定"——除非把每一帧换算成十进制再手动画个图。
折腾到半夜我意识到:问题的关键不是没有数据,而是数据到人脑之间缺了一个"翻译"。SerialPlot 干的就是这个翻译的活:它替你把字节流解析成数值,然后直接画在坐标轴上。你能用眼睛"看"出信号的趋势、毛刺和异常,而不是用脑子去"算"。
SerialPlot 到底是什么
一句话:小而简单的实时串口绘图软件(项目描述就是 "Small and simple software for plotting data from serial port in realtime")。
它支持三种数据解析方式,覆盖了绝大多数嵌入式场景:
- ASCII 文本:逗号/空格/Tab 分隔的数值,比如 Arduino 打印的
12.3, 45.6, 78.9 - 二进制流:uint8/int8、uint16/int16、uint32/int32、float,可选大端/小端
- 自定义帧格式:带帧头、长度字段和校验和,抗干扰能力强
主界面底部是七个功能标签页——Port(串口参数)、Data Format(数据格式)、Plot(波形外观)、Commands(命令发送)、Record(数据记录)、Text View(原始文本)、Log(日志),功能划分得很清楚,基本不用翻文档就能找到想用的东西。
五步上手,先别急着买硬件
第一步:装起来
如果你用 Ubuntu/Debian,装依赖然后从源码编译:
sudo apt install qt6-base-dev qt6-serialport-dev qt6-svg-dev git cmake build-essential git clone https://gitcode.com/gh_mirrors/se/serialplot cd serialplot mkdir build && cd build cmake .. -DBUILD_QWT=ON make -j$(nproc)重点说一下-DBUILD_QWT=ON:Qwt 是它的绘图库,如果系统里没装,CMake 会帮你自动下载编译,省掉最麻烦的一步。编译完直接运行./serialplot即可。
第二步:不接任何硬件,先看波形
点开软件后,在工具栏把数据源切到Demo。你会发现立刻有三条正弦波在屏幕上滚动(截图里那条醒目的 "DEMO RUNNING" 就是干这个用的)。这一步能让你先确认软件本身没问题,再把锅甩给硬件。
第三步:接入你的真实设备
- 在 Port 标签里选择串口(Linux 下通常是
/dev/ttyUSB0或/dev/ttyACM0) - 设置波特率、数据位、停止位、校验位、流控,和你的设备保持一致
- 在 Data Format 标签里选对解析方式(ASCII 还是二进制)
- 点Open,波形就来了
三个让我愿意留着它的理由
理由一:自定义帧格式,抗噪是认真的
这是 SerialPlot 最独特的地方。无线环境、电机启停、劣质线缆都会让串口数据里掺入杂字节,直接按流解析很容易错位。帧格式解析可以解决这个问题:你定义帧头(比如0xAA 0xBB)、payload 长度(固定长度或 1/2 字节长度字段)、数据类型、字节序,还能启用校验和(帧尾一个字节)。解析器会先找帧头、再按规则取数,配了校验和的话,坏帧直接丢弃,波形不会花。
理由二:多通道同屏,谁在乱动一目了然
一次最多支持 64 路通道同步显示,每路可以独立设置颜色和线型。调试三轴加速度计的时候,X/Y/Z 三条曲线叠在同一时间轴上,哪个轴在抖、哪个轴有毛刺,一眼就能看出来,比翻三组独立数据高效得多。
理由三:能收也能发,数据还留得下来
很多串口工具只能看,SerialPlot 的 Commands 面板能主动向设备发命令(ASCII 或二进制都行,还支持定时自动重发),配合接收端可以做简单的双向联调。另外 Snapshot 可以把当前波形连同数据导出成 CSV,Record 面板能把整段接收数据落盘,实验做完数据还在,可以拿去复盘或写报告。
实战:没有开发板,用假串口跑通全流程
项目仓库的misc/目录里藏着一个好东西:pseudo_device.py。它会用 Linux 的伪终端虚拟出一个"串口设备",不停往外吐测试数据,没有硬件也能完整演练。
python3 misc/pseudo_device.py脚本会打印出类似这样的两行:
Master terminal: /dev/pts/4 Slave terminal: /dev/pts/5接下来在 SerialPlot 的 Port 面板里,把端口填成Slave terminal那一行的名字(即/dev/pts/5),波特率保持默认 9600 就行(伪终端不关心波特率)。Data Format 选 ASCII、分隔符选逗号、通道数设 4 或 Auto,点 Open——你会看到四条稳步上升的直线。到这里,一条"虚拟传感器 → 串口 → 波形"的完整链路就跑通了。
想测试帧格式也不难:把脚本里注释掉的frame_test(master)放开,然后在 Data Format 里选 Framed,帧头填AA BB,数据类型选 uint32、小端,勾上校验和。它发的数据是0xAA 0xBB开头、带 1 字节校验和的标准帧,正好用来验证你的配置对不对。
五个常见的坑,我先帮你踩过了
- 波特率对不上:这是乱码的第一大来源。两侧都确认一遍,尤其是设备端固件里写死的值。
- ASCII 模式通道数设错:设备发 3 个值你配了 4 通道,波形会错位。不确定时先用 Auto 让它自动识别。
- 帧格式的小细节:帧头写错一个字节、校验和没勾、大端小端搞反,都会导致解析不出数据。逐项核对,别嫌麻烦。
- Linux 下打开串口报权限错误:
/dev/ttyUSB0默认只有 dialout 组可读写,把当前用户加进组或者临时用 sudo 跑。端口被别的程序占用也会提示打不开,先关掉串口助手再试。 - 编译时找不到 Qwt:记住
cmake .. -DBUILD_QWT=ON,让构建脚本自己处理,这是最省心的路径。
再往前走一步,你会感谢现在的自己
如果你已经跑通了上面所有流程,下一步可以做两件小事:一是把常用设备的波特率、数据格式、帧结构整理成自己的配置模板,换设备时直接套用;二是试试 Plot 面板里的缩放、滚动和柱状图显示模式,调试脉冲类信号时它们比普通曲线更直观。仓库的tests/目录里还有一整套用 Catch2 写的单元测试,想改代码、加功能的话,跑一遍测试能让你改得安心。
现在就打开终端跑一次 Demo,或者接上你手边那块吃灰的开发板——你离"波形自由"只差一个 Open 按钮的距离。
相关资源
- 官方说明文档:
README.md(含依赖清单和编译选项) - 核心源码目录:
src/(reader、plot、panel 各模块按文件拆分,命名很直白) - 测试数据脚本:
misc/pseudo_device.py(伪终端模拟设备,Linux/macOS 可用) - 单元测试:
tests/(readers、recorder、stream 三大块)
【免费下载链接】serialplotSmall and simple software for plotting data from serial port in realtime.项目地址: https://gitcode.com/gh_mirrors/se/serialplot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考