0

事实: 蓝牙 5.2 引入了同步通道 (ISOC) 功能。在 BLE 的上下文中,这意味着支持 (1) 对时间敏感的数据传输和 (2) 这些数据流在多个接收器之间的同步渲染。

我购买了两个 ItsyBitsy Adafruit,每个都带有一个 nRF52840 微处理器。nRF52840 支持蓝牙 5 但不支持 5.2。另外它不支持 Piconet 和 Scatternet 支持。

目标: 我的目标是将每个 nRF52840 连接到一个触头,然后两个触头同时播放一种振动模式。

用户体验:可以通过 iPhone 应用程序或通过每个 ItsyBitsy 板上的按钮来激活模式。有四种情况可以发挥模式: 1) iPhone 存在并且对两个从 ItsyBitsy 板起主导作用。2) iPhone 不存在,因此一台设备充当主机角色,另一台设备充当从机角色。3) 存在 iPhone 以及 ItsyBitsy 板之一。4) 在存在 ItsyBitsy 板的情况下不存在 iPhone。

场景 3 和 4 很容易实现。困难在于确保场景 1 和 2 的同步。在场景 1 中,可以通过电话或通过其中一个板上的按钮来激活设备。在场景 2 中,只能通过按下其中一个板上的按钮来完成激活。

潜在的解决方案在主设备和从设备之间发送一个周期性的时间状态包。奴隶将永远符合主人的时间。当按下手机应用程序或板上的按钮时,它会发送命令以在未来某个时间播放模式。如果所有设备都同步,那么它们将同时播放。那是前提。

这个解决方案的可行性如何?权衡我应该关注追求这个选项?有没有其他选择?

4

1 回答 1

0

对此可能有一个简单的蓝牙低功耗 (4) 解决方案。一块板可以连接到另一块板,并且该连接可用于同步板上的代码或时间(偏移量)。通过简单的往返时间计算,可以使这一点更加准确。

Adafruit Learn:Quick Draw Duo使用这种技术来同步同样基于 nRF52840 的 Circuit Playground Bluefruit 板。设计页面上有一个图表显示它是如何工作的。

如果您将 BLE 通信中的间隔考虑在内,则有可能获得更高的准确性。我猜你可以在几毫秒内得到这个,即使你使用像 CircuitPython 这样的解释语言。

另一种 BLE 选项是使用来自一个节点的广告广播。这种方法看起来很有吸引力,但我会谨慎对待可能非常严重的数据包丢失。根据规范还引入了一个小的随机延迟。

我发现高速摄像机对于验证同步非常有用,如果你有像简单的 LED 这样的视觉来指示标记点。如今,许多智能手机和廉价运动相机都有 240fps 模式。

Nordic在 nRF5 设备之间的无线定时器同步中提供了一个有趣的例子,以实现高精度,我认为这是将非蓝牙压缩到无线电流量中以实现:“这些结果表明,在同步的情况下,一个或两个 16 MHz 时钟周期可以保持在理想条件”。

于 2020-06-14T13:38:30.660 回答