*数据每10秒钟才会收到一次,为什么?

问题描述:

外设设置为通过一项服务进行宣传,添加两项特征。一个特点是属性通知和权限可读。另一个特征是属性写和权限可写。第二个提到的特征被用于从*到外围的通信,这就是问题所在。*数据每10秒钟才会收到一次,为什么?

似乎有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秒钟一次。我确定我配置了错误的东西,或者我忘记了一些必要的东西。

非常感谢帮助。

+0

从描述中可以不清楚你是连接到外设还是仅仅依靠广告事件。广告事件是低占空比,10.25秒是最大周期时间。大多数外设以接近此最大值的速率进行广告宣传以节省功耗。 – CuriousRabbit

+0

它们已连接。我没有提到外设和*设备是连接的,因为我不知道*设备在没有连接时可以将数据传送到外设。感谢您提供有关广告10秒低占空比的信息。 – BCI

+0

什么是您的设备的连接间隔?这将决定您可以多久与设备进行通信。 (我不知道有什么方法可以通过CoreBluetooth获得;通过知道你如何在外设上配置固件来获得它,它可能通过IOBluetooth获得,但我从未在iOS上试过。) –

最后,从iOS*到iOS外围设备的数据传输达到了相当的速度。为了实现这个目标,我必须做出两个改变,它们直接相互关联。在iOS外围一侧,在iOS*一侧进行了更改。 解决方案的一部分是iOS外围设备上CBMutableCharacteristic对象的配置。我已经将它的属性设置为Writable With 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) 

对于从*到外围设备的数据传输的时间是远低于一秒。尽管我必须提到*发送的数据非常少(最初是数据类型的双倍值)。 我希望这也能帮助别人。