← 博客列表 · DevLog_工位日志$ cat posts/sbqscope.md
# 蓝牙硬件2026-08-26阅读 12 分钟系列: SBQScope 迭代实录

SBQScope:把两块蓝牙电压模块做成双通道示波器

起因很朴素:产线上要做低压共地端子的通畅性测量,手头的台式示波器又大又贵,还得两个人抬。我手上有两块 PW05 蓝牙模拟电压采集模块,就想——能不能让它们变成一台随身携带的双通道示波器?这篇记录 SBQScope 从 v1 到 v5 的完整迭代过程。

通信假设:先让数据流起来

PW05 的输出协议非常朴素:一行一个十进制电压值。比如 0.125\n0.138\n。APP 侧要兼容两种单位:小数形式按 V 处理(如 1.500),较大的整数形式按 mV 自动换算(如 15001.500 V)。这个假设定下来,后面的解析层就不用反复改。

五版迭代

v1-label
模拟波形显示 + 蓝牙 SPP 连接已配对设备,手动选目标模块
v2-refrecord
基准电压记录:自动尝试 SPP、FFE0、FFF0 三种服务 UUID
v3-thresholds
峰峰值和 RMS 基础计算、阈值判定、CSV 保存
v4-persist
时间轴/幅度独立缩放、双指缩放、单指拖动、自动适配、暂停、单次采集、游标测量
v5-refdiff
A/B 双通道:实时差值波形、RMS 差值、波形相似度、CSV 导出

双通道连接:BLE 与经典蓝牙的双模回退

A/B 两台采集模块要分别建立连接。实际联调发现,不同批次模块的蓝牙协议栈行为不一致,所以连接策略做成了逐级回退:

踩坑记录:部分模块 BLE 通知使能成功但收不到数据,表现为"连接正常但波形不动"。排查思路是先在 nRF Connect 里手动订阅确认,再回到 APP 侧调整 CCCD 写入时序。

波形对比:A-B 差值与相似度

v5 的核心是把两路波形做实时对比。A、B 两路分别缓存后,逐点计算 A-B 差值序列,同时输出两端 RMS 及其差值;再用归一化互相关粗算波形相似度,作为端子通畅性的判定依据。导出走系统文件选择器,CSV 直接落盘,后续用 Python 脚本做离线对比分析。

交互:双指缩放是刚需

产线工人不看说明书,交互必须符合直觉:双指捏合缩放时间轴和幅度、单指左右拖动回看、一键自动适配全屏、暂停/单次采集切换、游标测量读数。这些看起来琐碎,但占了整个开发量的一半。

当前状态

最新全量包是 SBQScope-debug.apk,源码入口在 MainActivity.javaOscilloscopeView.java。下一步计划:固化判定阈值到配置文件、增加端子编号自动标注、把离线对比脚本合并进 APP。

← 返回博客列表