外围设备设置为通过一项服务进行广告,其中添加了两个特征。其特点之一是属性通知和权限可读。另一个特点是属性写和权限可写。第二个提到的特性用于从中央到外围的通信,这就是问题所在。
好像有10秒一个周期。在 10 秒的时间范围内,最多只能收到一个预期的包裹。另外,如果中心在发送数据后 10 秒发送数据,而外设立即收到预期的数据包,则不到一秒。
您可以通过调试器的输出明白我的意思。
2017 年 2 月 15 日编辑 * 为了更好地澄清这个问题,我将提供有关调试器输出的更多信息。你在这里看到的是正在调试的中央。措辞“writeValue”表示数据已发送,措辞“didWriteValueFor”表示确认数据已成功到达外设。这个确认是在委托(delegate)方法中调用的:
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?)
*
就好像在最后一次接收数据后,所描述方向的通信被阻塞 10 秒,然后再次打开。是否可以防止这种阻塞?外围设备需要立即收到通知,而不仅仅是每 10 秒收到一次通知。我确信我配置错误或者我忘记了一些重要的东西。
非常感谢您的帮助。
最佳答案
终于,从 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 的值)。 我希望这对其他人也有帮助。
关于ios - 每 10 秒才收到一次来自中央的数据,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42174474/