繁体   English   中英

同时将数据传输到多个外围设备

[英]Transfer Data to multiple peripheral simultaneously ios BLE

能够通过蓝牙连接到多个iOS设备,作为1个主设备和4个从设备。

通过以下代码将数据从中央传输到外围设备

[peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithoutResponse];

但是,这可以防止数据丢失,但是速度更快。

然后尝试使用以下代码不丢失数据

[peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithResponse];

尝试同时(同时)将数据传输到多个外围设备

    for (Peripheral * peripheral in self.connectedPeripherals) {
 [peripheral.peripheral writeValue:currentData forCharacteristic:peripheral.characteristic type:CBCharacteristicWriteWithResponse];
}

一旦第一个外设接收到数据,然后第二个外设获取数据并继续进行,数据就好像延迟了一个接一个的传送。

要同时传输数据并同时反映到所有外围设备。

当您传送带有响应的数据时,每次发送数据包时都必须等待其收据的确认。 当您传输数据而没有响应时,不会发送回确认,因此吞吐量更高。 但是,正如您正确指出的那样,当传输数据而没有响应时,可能会丢失数据。 发生此数据丢失的原因是内部iOS缓冲区的溢出,该缓冲区保存在您对- writeValue:forCharacteristic:type:调用与实际调用之间的数据。 如果要防止数据丢失,可以执行以下任一操作。

  1. 不要向缓冲区写入太多数据,因为如果缓冲区溢出,它将被静默丢弃。 我的实验表明,正常情况下此缓冲区的大小约为3kb(iPhone 6,iOS9、1个外围设备)。 对于其他设备,几个连接的外围设备和/或双向传输的大小可能会更小。 因此,如果您有例如1 kb的数据要发送到4个外围设备,并且通过迭代调用- writeValue:forCharacteristic:type: ,则肯定会面临数据丢失的情况。
  2. 在无响应的写入特性的基础上,实现一个协议以请求重新发送丢失的数据包,以防止数据丢失。
  3. 写响应,但将您的数据分成尽可能大的块。 正如我之前说的,确认是在每个数据包之后发送回的,但是这些数据包的大小可以不同。 使用iOS8 / iOS9,您可以期望在单个数据包中发送多达155个字节的有效负载。 因此,如果您需要发送例如300个字节,最好将它们分成2个150字节的块,而不是15个20字节的块。 顺便说一句,当您要编写带有响应并提交超过155个字节的值时,iOS会为您拆分它,但是在这种情况下,您将不会收到回调`
    • 数据交付后,外围设备:didWriteValueForCharacteristic:错误:`。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM