使用corebluetooth从ios app将大型二进制字符串传输到BLE设备

时间:2016-06-08 12:32:41

标签: ios objective-c swift bluetooth-lowenergy

我想从我的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@"

提前致谢

2 个答案:

答案 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)
    }
}