在 BLE 中实现通知
Posted
技术标签:
【中文标题】在 BLE 中实现通知【英文标题】:Implement notification in BLE 【发布时间】:2017-04-19 01:50:58 【问题描述】:如何?
我有一部智能手机,它会每隔一小时向附近的所有 BLE 设备(智能手表、RFduino 等)发送通知以进行时间同步。
其他设备现在是服务器(因为它提供数据),而智能手机是收集数据的客户端。
我可以捎带广告包吗?例如,智能手机总是广播一个广告包来宣布它的存在(这是其他设备可以找到它的方式)。我可以将该数据包修改为时间同步吗?
【问题讨论】:
【参考方案1】:为了发送通知或广告,您的智能手机必须充当服务器,这也意味着为了能够接收通知或扫描广告,您的外围设备必须充当客户端。
这可能有点棘手,因为如果两个设备充当客户端和服务器,它们可能不会同时扮演另一个角色。您需要随时切换角色,这是一个可以解决各种问题的开放领域。
另外,我不相信让智能手机定期通知附近的所有设备真的是最佳选择。每个想要接收通知的设备都必须与设备连接才能接收通知,并且该连接必须在发送通知时已经处于活动状态才能真正获得正确的时间。所以所有这些设备都需要提前连接到预期的通知时间,并保持连接直到通知到来。
只发布当前时间可能会更好,但请记住,您不能在发布广告时将智能手机作为服务器连接,因为链接层可能不会同时处于扫描和广告模式,并且您在投放广告时也可能因类似原因无法连接。
如果您想这样做,您可以在广告数据中包含时间信息。有关广告数据结构的更多信息,请参阅蓝牙核心规范 v6 的补充,A 部分。您可以将其放入制造商特定数据中。
但是,另一种选择是使用写入请求将时间直接写入设备。您可以定义自己的服务和特征。您可以在服务器的广告数据中包含“时间同步必要”的信息,当智能手机评估广告时,它可以连接到相应的设备并直接发送时间。
此过程的优点是,仅当您在设备上确实需要时间时才会更新时间,并且您不必切换客户端/服务器角色,因为处于服务器角色的设备可以正常发布广告,而智能手机可以一直担任客户角色。
【讨论】:
以上是关于在 BLE 中实现通知的主要内容,如果未能解决你的问题,请参考以下文章