我想构建一个通过 BLE 从手机或笔记本电脑获取本地时间的设备。我理想的交互流程是:
- 按下设备上的“设置时间”按钮以使其开始广告
- 打开手机/电脑上的蓝牙设置或控制面板,找到设备并点击连接
- 设备使用当前时间服务向手机请求时间,然后断开连接并停止广告
交互的总范围只是获取本地时间,无需手动调整,也无需添加WiFi等更复杂的连接来使用NTP。
这种交互流程是否可以与 BLE 一起使用?外围设备可以自己从中央读取当前时间服务吗?如果没有,手机上的配套应用程序是否需要写入外设上的当前时间服务特性?
我想构建一个通过 BLE 从手机或笔记本电脑获取本地时间的设备。我理想的交互流程是:
交互的总范围只是获取本地时间,无需手动调整,也无需添加WiFi等更复杂的连接来使用NTP。
这种交互流程是否可以与 BLE 一起使用?外围设备可以自己从中央读取当前时间服务吗?如果没有,手机上的配套应用程序是否需要写入外设上的当前时间服务特性?
由于您不打算与合作伙伴设备进一步通信,我想设置时间的精度在几秒钟的精度范围内对您来说是可以的。如果您想获得更精确的结果,则必须考虑更多因素(延迟、延迟、较低级别的协议等)。
一般来说,BLE 是一种通信协议,您可以访问终端设备提供的所有功能。因此,如果您有一台允许 NTP 请求的计算机/电话,您可以通过 BLE 发出 NTP 请求。这当然需要某种配置或附加程序。
您可以使用扫描请求和扫描响应来传递广告过程中的时间。当然,要做到这一点,您必须提供一个最小的 BLE 副本。优点是您甚至不必进行完整的配对。这当然需要对两侧的 BLE 行为有一定的访问权限,如果您从 Pi 或其他一些可能工作的更可控的实例中获取时间,那么您在智能手机上可能没有这些行为。
如果您不害怕生根 Android,您也可以使用Cheepsync,他们正是这样做的。这是在 Github 上。
这种交互流程是否可以与 BLE 一起使用?
是的。
外围设备可以自己从中央读取当前时间服务吗?
仅当中央正在运行当前时间服务时。
如果没有,手机上的配套应用程序是否需要写入外设上的当前时间服务特性?
取决于中心是否已经在运行当前时间服务。例如 iOS 有一个内置的,它会每分钟写入外围设备上的当前时间特性。
如果没有内置当前时间服务,您可以添加一个或以其他方式提供当前时间(例如,通用应用程序和自定义协议,或网站和Web 蓝牙)。