来自中央的数据仅每10秒收到一次,为什么?

时间:2017-02-11 09:49:26

标签: ios swift core-bluetooth cbperipheral

设置外围设备以通过一个服务进行广告,添加两个特征。一个特征是属性通知和权限可读。另一个特性是属性写入和权限可写。第二个提到的特性用于从中心到外围设备的通信,这就是问题所在。

似乎有10秒的周期。在10秒的时间跨度内,不能超过一个预期的包装被接收一次。此外,如果中心在外围设备发送数据10秒后立即发送数据,则外设立即收到预期的包裹,不到一秒钟。

你可以看到我对调试器输出的意思。

Every 4 seconds data is trying to be sent to peripheral.

2017年2月15日编辑 * 为了更好地澄清这个问题,我将提供有关调试器输出的更多信息。你在这里看到的是被调试的中心。措辞“writeValue”表示数据已发送,措辞“didWriteValueFor”表示数据已成功到达外设的确认。在委托方法中调用此确认:

func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) 

*

好像上次接收数据后,所描述方向的通信被阻止10秒,然后再次打开。是否可以防止这种阻塞?需要立即通知外围设备,而不是每10秒钟通知一次。我确信我正在配置错误或者我忘记了必要的东西。

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

最后,从iOS中心到iOS外围设备的数据传输达到了不错的速度。为实现这一目标,我必须进行两项更改,它们彼此直接相关。在iOS外围设备端和iOS中央端进行了更改。 部分解决方案是iOS外围设备上的CBMutableCharacteristic对象的配置。我已将其属性设置为Writable With Response,但为了尽可能快地进行通信,我现在将其设置为Writable Without Response。 因此,CBMutableCharacteristic对象的实例化如下所示:

let characteristicWritableWithoutResponseCBMutableCharacteristic.init(type: CBUUID.init(string: TRANSFER_CHARACTERISTIC_UUID), properties: CBCharacteristicProperties.writeWithoutResponse, value: nil, permissions: CBAttributePermissions.writeable)

解决方案的另一部分位于中心位置。由于CBMutableCharacteristic对象是用“writeWithoutResponse”实例化的,我不得不将方法writeValue的参数类型从CBCharacteristicWriteType.withResponse更改为 CBCharacteristicWriteType.withoutResponse。现在看起来像这样:

currentPeripheral.writeValue(newPayload, for: writableCharacteristic, type: CBCharacteristicWriteType.withoutResponse)

从中央到外围设备的数据传输时间现在不到一秒钟。虽然我必须提到中央发送非常少的数据(最初是数据类型double的值)。 我希望这也能帮助别人。