在Swift中使用BLE发送PNG图像

时间:2017-10-09 17:09:36

标签: swift bluetooth-lowenergy core-bluetooth cbperipheral uiimagepngrepresentation

过去2个小时我一直坚持这个问题,我即将放弃。我用Google搜索了很多,但找不到有用的东西。我使用的是最新版本的XCode。

我想通过Bluetooth Low Energy发送PNG图像,在这种情况下接收器是Bleno。我尝试过的事情包括将图像转换为Base64字符串并将图像转换为UInt8数组并逐个发送数组中的每个条目。

我没有做任何工作,因此唯一的“工作”代码是将图像转换为字节,这就是:

let testImage = UIImage(named: "smallImage")
let imageData = UIImagePNGRepresentation(testImage!)

我已经拥有了BLE的所有连接代码,并且能够成功地向Bleno发送一个简单的短字符串。我也通过“peripheral.maximumWriteValueLength”知道我一次可以发送的最大字节数是512字节,虽然我可以想象使用Low Energy会降低这个最大值。我正在尝试使用peripheral.writeValue发送数据,目前看起来像这样(数组是我试过的UInt8数组):

peripheral.writeValue(Data(bytes:array), for: char, type: CBCharacteristicWriteType.withResponse)

我经常得到的错误是Error Domain=CBATTErrorDomain Code=13 "The value's length is invalid.",我假设这是因为我尝试发送的数据超过512个字节。我尝试用小于512字节的软件包发送数据,但就像我说的那样,我无法让它工作。

简而言之,我的问题是:如何通过BLE发送PNG图像(多个部分)?

编辑:我有一些工作要做,尽管它很慢,因为它没有利用每个数据包的完整20个字节:

let buffer: [UInt8] = Array(UIImagePNGRepresentation(testImage!)!)

            let start = "I:"+String(buffer.count)
            peripheral.writeValue(start.data(using: .utf8)!, for: char, type: CBCharacteristicWriteType.withResponse)

            buffer.forEach{b in
                let data = NSData(bytes: [UInt8(b)], length: MemoryLayout<UInt8>.size)
                peripheral.writeValue(data as Data, for: char, type: CBCharacteristicWriteType.withResponse)
            }

提前致谢!

0 个答案:

没有答案