Home Articles

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

Asked
Viewed 1664 times
0

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

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

您可以看到我对调试器输出的含义 .

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

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

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

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

非常感谢帮助 .

1 Answer

  • 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的值) . 我希望这也能帮助别人 .

Related