我想从我的ios应用程序(中央设备)向BLE设备(外围设备)发送大型二进制字符串。它的工作正常,小字符串,但当我试图发送大字符串时,它没有收到,连接自动断开连接。我已经读过,我们需要将大数据分成多个块来发送它。但我没有找到任何有效的样本。
请查看代码发送字符串
let myString = "Have a nice day!"
let newString = "haVe A NiCe dAY!"
let stringToSend = "0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000,0001010101010101111111111111000000@"
提前致谢
答案 0 :(得分:0)
某些设备寄存器的大小有限。它们不能包含超过X个字节的处理。 让我们假设所述BLE设备期望以几个短命令的格式执行长命令。 我们还假设所述设备也能够接收短命令。 设备如何知道短命令和部分长命令之间的区别?使用指示命令类型的命令格式。 例如: 命令将包含1个头字节,6个内容字节,1个命令类型字节。 部分长命令将使用11111111作为其命令类型,最后部分为11111110。 短命令将00000000作为其命令类型。
这就是我"定义"用于设备差异命令的简单协议。
我建议您在该设备的开发人员手册中查找该协议
答案 1 :(得分:0)
有些设备最多接受 20 个字节,所以你必须吐出你的字符串。
for strMsgPart in stringToSend.split(by: 20) {
if positionCharacteristic != nil {
self.polarH7HRMPeripheral.writeValue(strMsgPart, forCharacteristic: positionCharacteristic, type: .WithoutResponse)
self.polarH7HRMPeripheral.setNotifyValue(true, forCharacteristic: positionCharacteristic)
}
}