告别杂乱的调试窗口:我用 Python + WebView 写了一个现代化串口助手

折腾单片机的朋友都懂:看传感器数据要开波形工具,发 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,应用内自更新

几个值得一提的实现细节:

  1. 接收线程与帧聚合:pyserial 在独立线程读取,按"字节间隔 ×5"聚合出完整帧再推给前端,避免高速数据被拆得七零八落;间隔按当前波特率、数据位、校验位自动计算。
  2. 增量解码 :多字节编码(GB2312/GBK)的字符可能被串口分帧截断,采用 codecs.getincrementaldecoder 增量解码,跨帧字符不乱码。
  3. 发送管线统一:手动发送、命令按钮、自动应答共用一条管线------转义 → 编码 → 校验 → 帧头帧尾 → 发送,行为完全一致。
  4. 解析在字节层进行:规则解析统一在原始字节流上查找匹配(HEX 按字节、字符串按编码后的字节),截取与大小端重组都在字节层完成,不受显示格式影响。
  5. 自更新的坑 :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 脚本解析、多串口联调都在设想清单里。

觉得有用的话,点个赞/收藏支持一下,这是更新的最大动力 🚀

相关推荐
三水写代码4 小时前
手写一个 Claude Code(1):从 Agent Loop 到工具、权限、Hooks 与任务规划
python·ai编程·claude·ai agent·claudecode
m0_547486664 小时前
《Python高级编程》全套PPT课件2026(北京理工大学)
python·pycharm
Elaine3364 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
EatFan4 小时前
AI Agent 上生产前先加三道闸门:审批、限权、可回放的工程实践
人工智能·python·算法·多智能体·ai agent·mcp·harness
xfan_me5 小时前
维修保养记录精准版 API 对接实战指南
java·大数据·python
海上小飞龙5 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
XiaoMaqqqq5 小时前
目前知名的IP驱动产业新场景新工具有哪些
网络·python·网络协议·tcp/ip
玩大数据的龙威5 小时前
农经权二轮延包—固定比例尺不定图幅的公示图批量生成
python·arcgis·二轮延包公示图
虎虎(_ _)。゜zzZ7 小时前
关于字典中的解包问题
python