折腾单片机的朋友都懂:看传感器数据要开波形工具,发 AT 指令要开串口助手,算 ModBus 校验要开网页小工具,想自动应答协议询问还得自己写脚本。HSS 串口助手就是把这些塞进一个窗口的尝试------本文介绍它的功能与技术实现,文末附下载方式。


一、它长什么样
HSS 串口助手是一个基于 pywebview 的桌面应用:Python 做串口后端,HTML/CSS/JS 做界面,EdgeChromium 内核渲染,安装包只有 13 MB,开箱即用。
界面遵循传统串口助手的布局习惯:顶部串口栏、中间接收区、下方发送区、右侧多命令面板、底部状态栏,上手零成本。
二、功能介绍
1. 串口管理与数据收发(基本功)
-
自动扫描串口并显示设备描述,波特率覆盖 300 ~ 921600,校验位可选

-
数据位/停止位/RTS-CTS 流控/自动重连收纳在「更多设置」里,不占主界面

-
接收区提供字符串 / HEX / 对照 三种视图:HEX 视图支持地址偏移与按 N 字节换行;对照视图同时呈现 hex 与文本,协议抓帧很方便

-
每帧数据带时间戳与收发方向箭头(← / →),发送内容可回显

-
接收超时可自动(按波特率计算帧间隔)或手动指定,帧间自动空行分隔,长时间抓包不糊屏

-
收发字节统计实时显示

2. 波形显示(嵌入式最爱的部分)
接收区内置第 4 个视图「波形」,把收到的字节流按 8/16/32/64 位(小端) 组成数值,绘制成示波器风格的滚动曲线:
- 点击「启动」开始采集,随时启停、切换位宽
- X 轴自适应铺满,Y 轴按可见数据自适应量程
- 滚轮直接以鼠标位置为中心等比缩放,右键拖动平移(允许越界回看,拖回边缘自动恢复跟随),双击复位
- 采样点数不刷屏,适合看 ADC 采样、温度曲线、IMU 数据
场景:单片机每 100ms 上报一个 16 位采样值,切到波形视图选 16 位,曲线立刻出来,不用再导 Excel 画图。
3. 自动应答(收到即回复)
内置的「自动应答」页签可以配置规则:设备上报 A,自动回复 B。
- 匹配方式:字符串包含 / HEX 字节子串 / 正则表达式
- 应答内容支持字符串与 HEX,可设延时(毫秒级)
- 每条规则可单独启停,双击编辑

典型用途:主机轮询 01 03 00 00 00 02 CRC,自动回一帧模拟数据,不上硬件也能把上位机逻辑调通。

4. 规则解析(协议字段直接解码)
这是应对"一帧数据里只想看某个字段"的痛点:配置解析规则后,勾选接收工具栏的「解析」复选框,命中规则的数据帧下方会直接追加一行解析结果。
规则由三部分组成:
| 组成 | 说明 |
|---|---|
| 匹配 | 字符串(如 temp=)或 HEX 字节序列(如 01 03) |
| 提取 | 位置截取(自匹配结束后偏移 N 字节、截取 M 字节,支持负偏移)或 正则表达式(取分组 1) |
| 解析 | 字符串(按接收编码解码)/ 大端整数 / 小端整数(附十六进制) |
举例:设备上报 temp=25.4C,规则「匹配 temp=,截取其后 4 字节,按字符串解析」,接收区立刻显示:
[10:23:45.123] ← temp=25.4C
↳ [解析] 温度: 25.4
再看小端的威力:ModBus 返回帧 01 03 34 12 ...,规则「匹配 HEX 01 03,偏移 0、截取 2 字节、小端」,显示 ↳ [解析] 读数: 4660 (0x3412)------34 12 小端组合正是 0x1234 = 4660,寄存器值一眼即得。


5. 多命令发送(把常用指令做成按钮)
右侧面板把常用指令做成可点击的按钮,一次配置长期使用:
- 按页面分组(AT 指令、ModBus 指令分开放),页面可增删重命名
- 每条命令独立选择 字符串/HEX 模式,双击命令可加注释名
- Ctrl+点击多选、按住拖拽排序、批量复制/剪切/粘贴、Delete 批量删除
- 发送按钮宽度自动对齐,排列整齐
- 支持从 SSCOM 配置导入,使用我自制的一个小工具。

6. 发送区进阶能力
- 字符串/HEX 双模式,自动转义
\r\n,可自动追加回车换行 - 循环发送:设定间隔与次数,联调轮询协议时解放双手
- 校验和:ADD8 / ADD16 / XOR8 / ModBusCRC16,可指定参与计算的字节范围,自动插入到指定位置
- 帧头帧尾:发送前自动附加,支持 HEX 或文本格式
- 发送输入框可收起,给接收区腾地方

7. 其他
-
数据导出 :TXT / CSV / HEX 三种格式,可按收/发方向过滤

-
6 套主题:浅白 / 浅蓝 / 浅棕 / 深黑 / 深蓝 / 深棕,深色护眼
-
应用内更新:设置页一键检测新版本、应用内下载并自动重启完成升级,无需手动下载
-
中英文界面切换(英文完善中)、窗口拖拽调布局、配置自动记忆

三、技术栈与实现思路
整个项目就是"Python 后端 + Web 前端"的经典组合:
| 层 | 技术 | 说明 |
|---|---|---|
| 界面 | HTML / CSS / JS | 原生实现,无框架;CSS 变量做 6 套主题 |
| 桥接 | pywebview | js_api 把 Python 对象直接暴露给 JS 调用,前端 50ms 轮询取数据 |
| 串口 | pyserial | 收发线程 + 超时聚合,按波特率自动计算帧间隔 |
| 打包 | PyInstaller | 单文件 exe(13 MB),前端资源随包分发 |
| 更新 | Gitee Release API | 双仓库方案:源码仓库私有,公开仓库只放发行版 exe,应用内自更新 |
几个值得一提的实现细节:
- 接收线程与帧聚合:pyserial 在独立线程读取,按"字节间隔 ×5"聚合出完整帧再推给前端,避免高速数据被拆得七零八落;间隔按当前波特率、数据位、校验位自动计算。
- 增量解码 :多字节编码(GB2312/GBK)的字符可能被串口分帧截断,采用
codecs.getincrementaldecoder增量解码,跨帧字符不乱码。 - 发送管线统一:手动发送、命令按钮、自动应答共用一条管线------转义 → 编码 → 校验 → 帧头帧尾 → 发送,行为完全一致。
- 解析在字节层进行:规则解析统一在原始字节流上查找匹配(HEX 按字节、字符串按编码后的字节),截取与大小端重组都在字节层完成,不受显示格式影响。
- 自更新的坑 :PyInstaller onefile 运行时会把依赖解压到临时目录,更新重启时若继承了
_MEIPASS2等引导环境变量,新进程会依附旧进程的临时目录,旧目录被清理后新进程无声退出------重启前必须清掉这些变量。
四、下载与使用
- Windows 免安装,下载单个 exe 直接运行:
👉 Gitee 发行版(当前 v1.2.4) - 运行需系统自带 EdgeChromium/WebView2 运行时(Win10/11 一般已内置)
bash
# 开发者方式运行
git clone <仓库地址>
pip install pywebview pyserial
python main.py
五、写在最后
这个工具是跟着自己的调试需求一步步长出来的:先有收发,然后嫌切窗口麻烦加了波形,再嫌手算校验麻烦加了校验和,最后连"看协议字段"这个动作也做成了规则解析。如果你也在做嵌入式开发,欢迎试用反馈; ideas welcome------比如协议模板导入、Lua 脚本解析、多串口联调都在设想清单里。
觉得有用的话,点个赞/收藏支持一下,这是更新的最大动力 🚀
