尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
微信小程序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这个连载我才写到第二篇踩的坑一个比一个刁钻后面接着记。
RELATED

相关推荐

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

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

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

📅 2026/10/21 21:04:50
2026年中医AI辅助诊疗系统值得关注的品牌对比

2026年中医AI辅助诊疗系统值得关注的品牌对比

2026年中医AI辅助诊疗系统值得关注的品牌对比与选型指南随着大健康产业的数字化进程加速,传统中医馆的经营模式正面临深刻变革。传统的HIS(医院信息系统)主要侧重于 billing 结算和患者建档,虽然在基础信息化方面发挥了作用&#…

📅 2026/10/21 20:59:48
HarmonyOS 7+ArkTS:精准碰一碰回执幂等判定与确认门禁【鸿蒙心迹】

HarmonyOS 7+ArkTS:精准碰一碰回执幂等判定与确认门禁【鸿蒙心迹】

碰一碰分享完成后,应用界面收到一条“接收成功”的通知,看起来应该立刻把素材加入列表。这里有一个容易忽略的细节:通知抵达和用户确认接收,不一定是同一件事。设备靠近、页面恢复、通信重试可能让业务适配层交出内容相同的回执。…

📅 2026/10/21 20:59:48
MORE NEWS

更多资讯

📰

矿井下目标检测数据集:YOLO/COCO/VOC格式与安全帽自救器识别

做矿下视觉识别项目时,最头疼的往往不是模型结构怎么选,而是数据从哪里来。矿井场景光照差、粉尘多、设备杂,通用数据集训练出来的检测模型,一下井就“水土不服”。我手里这套带标注的矿井下数据集,正好覆盖了安全帽、…

📰

室内移动机器人导航地图模块设计与实践——lingbot-map 架构解析

1. 项目背景与整体设计思路 lingbot-map 这个名字看着像个玩具级模块,实际上是我在做室内移动机器人项目时,把整个导航链路里最核心的一张图单独抽出来搞的子系统。简单说,它负责回答三个问题:环境长什么样、机器人在哪、机器人怎…

📰

海康威视NVR WEB程序原理与调试实战指南

简介:本资源是海康威视DS-8632N-ST型号NVR嵌入式设备的完整WEB前端程序源码包,面向安防系统集成工程师、嵌入式Web开发人员及视频监控二次开发者,解决厂商不公开官方WEB源码导致的定制化开发与界面分析困难问题。压缩包共266个文件&#xff0…

📰

SpringBoot+Vue+MySQL房屋交易管理系统源码解析与部署指南

说句实话,现在网上标着"可直接运行"的管理系统源码不少,但能真正解压后一把跑起来的,真不算多。大多数情况是:数据库脚本缺了、Node版本对不上、后端连库时报时区错误,折腾半天还在环境里打转。这套房屋交易系统源码用的是SpringBoot Vue MySQL的经典三件套,覆盖了…

📰

轻量地图打点与整理工具开发:GeoJSON数据模型与前端实践

前阵子整理手机里的地图收藏夹,发现一个尴尬的事实:我收藏了两百多个地点,但真正要用的时候一个也想不起来。它们分散在不同地图应用、聊天记录和截图里,分类只有“想去”和“收藏”两种状态,至于“为什么想去”“和谁…

📰

Arm DesignStart Cortex-M3 AT421 包拆解与SoC集成实战

简介:Arm Cortex M3 DesignStart Kit AT421-MN-80001-r0p0-00rel0 是 ARM 官方推出的 Cortex-M3 处理器设计套件,面向嵌入式开发工程师、FPGA 原型验证人员及高校相关专业学习者,用于在可编程逻辑平台上快速评估与集成 32 位 RISC 内核&#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬