2016-12-27 57 views
0

我是BLE的新手,并希望您能够指引我采用正确的实施方法。通过BLE传输大数据块的最佳方法

我正在研究外围设备(电池供电)持续聚合传感器读数的应用。 在移动端应用程序中会出现一个“同步”按钮,按下按钮后,我想将所有在外设中累积的传感器读数传输到移动应用程序。 同步之间的最大持续时间可能是几天,因此累积的数据可能达到20千字节的大小。

现在,我想知道什么是执行从外设到中央应用程序的数据传输的最佳方法。 我想过创建一个特征数组,其中每个特征将包含固定数量的样本(例如,表示1小时的读数)。

然后,一旦同步,我会:

  1. 阅读特性计数(多少1小时细胞)。
  2. 然后逐个阅读特征(1小时)。

但是,我不知道这是否是一种有效的方法?

  1. 我不确定这是否是最“高效”的方式,我可以 使用。
  2. 我不确定特征读取是否可行,或者我需要使用指示来代替。

这里的任何帮助将不胜感激:)

在此先感谢,莫蒂。

回答

3

我只是简单地使用通知。

使用您写入的某个特性来触发传输开始。

然后有另一个特点,你只需通过发送20个字节的数据流。大多数用于BLE片上系统的SDK都有一些方法来控制数据流,所以你不会发送得太快。通常通过在准备好接受下一个通知时触发回叫。

为了知道数据的大小被发送,例如,您可以让第一个通知包含大小,和他们的其余数据。

这是最花时间和功率高效的方式,因为可以有每个连接的时间间隔,如果你做了很多的比较发送多少条信息,而不是读取通常需要每两个往返。不要使用适应症,因为他们还需要每次适应症基本上两次往返。无论如何,它们也毫无用处。

你可能通过交换更大的MTU(这将导致较低的L2CAP/ATT头开销)增加速度也有些%。

+0

埃米尔嗨, 非常感谢 - 这是非常有帮助的。 我有两个后续问题 - 希望它确定:) 您写道 - “每个连接间隔可以发送多个通知”,是否存在对特征数量的限制读取操作我可以在单个连接间隔? 我只是试图了解通知是否“更快”,仅仅是因为它们不需要应用程序级ACK,或者对于协议固有的READ操作可能存在其他限制。 – MotiC

+0

只限制ACK的应用程序是限制 - 一次只能有一个GATT操作的规则。 – Emil

相关问题