如何在BLE中实现通知?
我有一部智能手机,每小时它都会向附近所有的BLE设备(智能手表、RFduino等)发送通知,以达到时间同步的目的。
其他设备现在是服务器(因为它提供数据),而smartphone是收集数据的客户机。
我能把广告包装进去吗?例如,智能手机总是广播一个广告包来取消它的存在(这是其他设备可以找到的)。我能修改这个包成为时间同步吗?
发布于 2017-04-20 10:06:26
为了发送通知或广告,智能手机必须充当服务器,这也意味着,为了能够接收通知或扫描广告,您的外围设备必须充当客户端。
这可能有点棘手,因为如果两个设备充当客户端和服务器,它们可能不能同时完成另一个角色。您需要随时切换角色,这是解决各种问题的一个开放领域。
此外,我也不相信让智能手机定期通知附近所有设备确实是最佳选择。每个想要接收通知的设备都必须与设备连接,以便接收通知,并且在发送通知时,此连接必须已处于活动状态,以便真正获得正确的时间。因此,所有这些设备都需要提前连接到预期的通知时间,并在通知到来之前暂停连接。
最好只是为当前时间做广告,但请记住,在进行广告时,不能将智能手机作为服务器连接,因为链接层可能不同时处于扫描和广告模式,而且由于类似的原因,广告时也可能没有连接。
如果您想这样做,您可以将时间信息包含在广告数据中。有关广告数据结构的进一步信息,请参阅蓝牙核心规范v6的补充部分A部分。你可以把它放在制造商的特定数据中。
但是,另一种选择是使用写请求将时间直接写入设备。您可以定义您自己的服务和特性。您可以在服务器的广告数据中包含“时间同步”信息,当智能手机评估广告时,它可以连接到相应的设备并直接发送时间。
此过程的优点是,只有在设备上确实需要时才会更新时间,并且不必切换客户端/服务器角色,因为服务器角色中的设备可能会像往常一样做广告,而智能手机可以始终保持客户端角色。
https://stackoverflow.com/questions/43484944
复制相似问题