同步蓝牙设备同时播放振动模式

synchronized bluetooth devices to play a pattern of vibrations simultaneously

事实: 蓝牙 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) iPhone 不存在,而 ItsyBitsy 板存在。

场景三和场景四很容易实现。困难在于确保场景 1 和场景 2 的同步。在场景 1 中,可以通过 phone 或其中一块板上的按钮来激活设备。在方案 2 中,激活只能通过按下其中一块板上的按钮来完成。

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

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

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

Adafruit Learn: Quick Draw Duo 使用此技术来 同步同样基于 nRF52840 的 Circuit Playground Bluefruit 板。设计页面上有一张图表显示其工作原理。

如果将 BLE 通信的时间间隔考虑在内,则有可能提高准确性。我想即使使用像 CircuitPython 这样的解释型语言,您也可以在几毫秒内完成此操作。

另一个 BLE 选项是使用来自一个节点的广告广播。这种方法看起来很有吸引力,但我会谨慎对待可能会很大的数据包丢失。根据规范还引入了 small, random delay

我发现高速摄像机对于验证同步非常有用,如果您有一些视觉效果,例如简单的 LED 指示标记点。现在很多智能手机和便宜的运动相机都有 240fps 模式。

Nordic 在 Wireless timer synchronization among nRF5 devices 中有一个关于高精度的有趣示例,我认为它是将非蓝牙压缩到无线电流量中以实现:“这些结果表明可以保持在一两个 16 MHz 时钟内理想条件下的同步周期。