微信小程序BLE开发踩坑记02|系统蓝牙可见却搜不到?

发布时间:2026/10/21 21:05:36

微信小程序BLE开发踩坑记02|系统蓝牙可见却搜不到? 背景上一篇刚把安卓搜不到设备那事摆平我还挺得意以为扫描这块算是摸清了。结果一接血压计又懵了同一台手机、同一套扫描代码血氧仪一搜就出来血压计扫半天页面干干净净。更邪门的是这台血压计在手机自带的蓝牙设置里明明看得到点配对也没问题。先说结论不是所有 BLE 设备都会在广播里带名字。我那台血压计的广播包里压根没有设备名字段而我的扫描层写了一句名字为空就丢弃——于是它被我自己筛掉了。一句话记住扫描层的活儿是上报设备认不认得出目标是识别层的事。现象血氧仪扫描页 1~2 秒就列出来了。血压计页面毫无反应等再久也不出来。手机系统蓝牙里这台血压计可见、可配对。两条信息又打架了。不过这回我没慌——上次刚学会对照实验直接套用。排查先看日志。把设备发现回调里的原始数据整条打出来name、localName、advertisData全打。可一开始什么都印不出来。我反应过来是我那句丢弃执行在打印之前设备根本没机会出现在日志里。于是我把丢弃那行先注释掉、只留打印才第一次看到这台设备的广播原貌——name: 、localName: 但advertisData里带着一串非空数据。再用 BLE 调试 App比如 nRF Connect 这类连上它看原始广播确认它广播的只有 Flags、服务 UUID、制造商数据三块没有设备名字段。回头翻协议文档广播包格式那节也对上了——它就是设计成这样。根因BLE 扫描时周围会扫到一堆没名字的杂散设备邻居的耳机、手环、电视。所以很多示例代码里都有一句没名字的丢掉我的扫描层也照抄了// 【踩坑写法】扫描层里名字为空就丢弃if(!device.name!device.localName)return;// 血压计天生无名 → 直接被筛掉所有 BLE 设备都有广播名这个前提本身就不成立。血氧仪的广播里带名字所以一直正常血压计天生无名于是全灭。代码一个字没改变量是设备。解决扫描层只上报识别交给上层扫描层不再做任何认设备的判断来者一律上报是不是目标设备交给设备识别模块综合判断型号码 名字关键词 服务 UUID 一起看// 【修复】扫描层不做识别无名设备也一律上报wx.onBluetoothDeviceFound(function(res){res.devices.forEach(function(device){// 不再按 name 是否为空丢弃直接交给上层识别reportToDeviceManager(device);});});顺带在扫描层开了一条广播 hex 诊断日志无名设备从此有据可查// 把广播原始数据打成 hex形如 AA 4C 41 ...无名设备也能排查if(device.advertisData){console.log([扫描] 无名设备广播:,hexDump(device.advertisData),device.deviceId);}hexDump就是把ArrayBuffer逐字节转成大写十六进制字符串调 BLE 这活儿离不了它。改完把手机拿来再跑一遍血压计和血氧仪都稳稳地出来了。预防 / 复盘要点对接新硬件前先抓一遍它的原始广播包拿工具看一眼别用别的设备都这样去假设它。扫描层负责上报识别层负责过滤。过滤逻辑要放在掌握完整判据名字 / 型号码 / 服务 UUID的那一层扫描层越单纯越好。出现别的设备都正常唯独这台不正常先怀疑这台设备的广播格式特殊而不是扫描代码有 bug。常见问题Q1蓝牙设备在系统设置里能看到小程序就是搜不到一般是什么原因最常见两类一是本文这种设备广播里没有名字字段被无名即丢弃的过滤逻辑筛掉了二是安卓定位权限没给全扫描根本起不来。区分方法很简单——把扫描回调的原始日志打开看有没有这台设备的记录。有记录 被自己筛了没记录 扫描压根没起来。Q2怎么知道我的设备广播里到底有没有名字用 BLE 调试 App 看一眼原始广播最快没有的话就在小程序里把advertisData打成 hex 打出来看。别猜看一眼就有答案。Q3无名设备该怎么确认它是我要连的那台看广播里的其他东西——制造商数据、服务 UUID、广播内容的特征都能当判据。我后面会专门写一篇名字没有、型号也不对时怎么认出设备。最后扫描层和识别层这层分工我后来整理成了那套开源 BLE SDK 的一部分——设备发现一律上报认不认得出来交给识别模块接入方不用自己写过滤逻辑Giteehttps://gitee.com/wanrendi75/jingjin-ble-sdk这个连载我才写到第二篇踩的坑一个比一个刁钻后面接着记。
延伸阅读

更多相关文章

2026/10/21 21:05:36

C# WinForm 嵌入外部 EXE 窗口:SetParent 实战与避坑指南

简介:这份资源面向具备一定C#基础的WinForm开发者,聚焦于将外部EXE程序嵌入窗体这一常见但实现路径多样的技术需求。包内共25个文件,以cs源码、exe可执行程序、resx资源文件、csproj工程文件及sln解决方案为主,另含pdb调试符号与m…

2026/10/21 21:05:36

服务器磁盘选型与Linux磁盘管理实战:从RAID配置到故障排查

服务器选型最容易翻车的环节,往往不是 CPU 和内存,而是磁盘。CPU 不够可以堆核,内存不够可以加条,但磁盘的接口类型、RAID 级别、文件系统布局一旦定错,后期改造成本非常高。尤其在高并发业务、数据库场景、日志采集场…

2026/10/21 21:05:36

青蛙游戏开发实战:从手感调优到本地化发布的独立游戏完整链路

如果你刷到过这条帖子,大概会觉得它只是一个轻松的求助:一位美国独立开发者做好了青蛙游戏,请大家帮忙取一个中文名。事情看起来很小,但站在技术开发者的角度看,这个举动释放的信号比“取名字”本身重要得多——它意味…

2026/10/21 22:26:32

个人技能管理指南:盘点、量化、学习与迭代的完整方法

“skills”这个词,我在电脑上敲下来的时候,突然想到一个问题:有多少人能在一分钟之内,清清楚楚写出自己最核心的10项技能,并且每一项都能说清楚在什么场景下用过、熟练到什么程度、能解决什么问题?我见过很…

2026/10/21 22:26:32

LangChain+百度搜索API搭建RAG人物知识库:从公开资料到数字分身

把LangChain和百度搜索API串起来,给一位公众人物做数字分身,听起来像是营销噱头,但拆开看,它就是一个非常典型的RAG项目:先搜资料、再建知识库、最后让大模型带着人设去回答问题。我最近用这套框架完整跑通了一遍&…

2026/10/21 22:26:32

lingbot-map:对话空间实时映射与状态可视化调试工具

项目标题: lingbot-map项目正文: 一个在聊天机器人开发调试过程中积累的“对话空间实时映射”小工具,把混乱的对话流程、上下文状态和知识命中路径变成一张可视化的地图。关键词: 对话映射, 状态可视化, 调试工具, 聊天机器人, 知识检索链路摘要描述: lingbot-map 是…

2026/10/21 22:21:30

基于ASP.NET和SQL Server的三层架构酒店管理系统开发实战

1. 项目背景与需求梳理1.1 为什么要做酒店管理系统作为一名开发,我前阵子接手了一个模拟项目X,要做一套酒店管理系统。需求方给的信息就一句话:“基于asp.net,sqlserver开发的酒店管理系统,三层架构。”听起来简单&…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/21 0:00:35

交通流仿真实战:IDM跟驰与MOBIL换道模型参数调优与避坑指南

简介:这份资源是面向交通工程学习者与Python开发者的微观交通流仿真项目,核心实现智能驾驶模型(IDM)下的车辆跟驰与换道行为,可用于理解速度、密度与流量之间的动态关系,适合具备Python基础、希望深入交通模…

2026/10/21 0:00:35

揭穿智能体表面顺从:用追踪代码重建任务执行确定性

1. 表面顺从不是智能体的“礼貌”,而是任务执行链路上的隐性断点最近在调试一个跨平台长周期任务调度系统时,我反复遇到一种令人困惑的现象:智能体在用户指令发出后,几乎秒级响应“已收到”“正在处理”“请稍候”,UI上…

2026/10/21 0:00:35

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑