蓝牙网关未收到蓝牙设备数据的问题定位

更新日期: 2022-12-06 阅读次数: 2501 字数: 488 分类: 物联网

排查思路

  • [X] 先确定蓝牙设备是否有问题。手机连接蓝牙设备,查看是否能收到推送数据。
    • [X] 关闭蓝牙网关
    • [X] Android APP 工具 “BLE调试助手”。确实可以收到数据,需要订阅。
  • [X] 蓝牙网关调试助手,通过 UDP 接收蓝牙数据,方便调试
    • [X] 查看蓝牙网关实用手册。了解如何自动配对。果然里面的蓝牙通信测试工具里需要填写服务和特性的 UUID,以及 handle 和 cccd。
    • [X] 可以建立连接,但是无法收到数据。

最终还是咨询官方技术支持得到了解决。

原因是,我只填写了服务的 UUID,而没有修改默认的特性 UUID,导致获取的是无效的 handle 及 cccd 值,即 ffff。

在获取了有效的 handle 及 cccd 之后,填入测试工具,就能收到真实的蓝牙数据了。

CCCD 是什么

CCCD 全称是 Client Characteristic Configuration Descriptor。

Characteristic 我倒是知道,一个 Service 有 N 个 Characteristic。 但是 Descriptor 是啥呢?

一个 characteristic 包含三种条目:

  • characteristic declaration: 用来作为 characteristic 的分界符号
  • characteristic value: 这个好理解,就是读到的值
  • characteristic descriptor: 可以多个描述符,CCCD 就是其中一种 descriptor

有时候 client 不想监听 characteristic notify 或者 indicate 过来的数据,那么就可以使用 CCCD 来关闭 characteristic 的 notify 或者 indicate 功能,如果 client 又需要监听 characteristic 的 notify 或者 indicate,俺么它可以重新使能 CCCD 来打开相关操作,总结一下,当 characteristic 具有 notify 或者 indicate 操作功能时,那么必须添加 CCCD,以方便 client 来使能或者禁止 notify 功能

参考:

  • https://blog.csdn.net/nanjoh/article/details/93062114
  • https://devzone.nordicsemi.com/f/nordic-q-a/8427/why-do-we-need-cccd

这里的“使能”是 enable 的意思。。。

handle 是什么

前面提到的 characteristic descriptor, value, declaration 每个都是一个 attribute。 而每个 attribute 的唯一标识就是一个 attribute handle。

继续阅读 Android API 无法获取蓝牙 BLE Attribute Handle 值

tags: 蓝牙网关

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式