排查思路
- [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 值
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式