读取BLE外设特性并检查其值?

我正在使用Xcode上的Swift编写一个应用程序,该应用程序连接到蓝牙BLE外设。 我build立了一个到设备的连接,并且想从特定的特性(特别是服务UUID FFF0中的FFF1)读取一些数据。

如果我想要查找信息的characteristicxcharacteristicx x,则可以使用以下代码请求读取characteristicx

 peripheral.readValueForCharacteristic(charactericsx) 

我想知道的是:如何检查这个读取的值是我正在寻找的。 我希望能够做一个if语句来检查我的价值与该特征的发现价值。

例如:如果发现的值是X,那么做一些事情,否则如果发现的值是Y,那么做别的事情。

这不是我想要做的很好的解释,但是我希望你能得到这个主意。

任何人都知道如何去做这个?

更新为Swift3

执行该方法后, peripheral(_:didUpdateValueFor:error:)将asynchronous接收peripheral(_:didUpdateValueFor:error:)方法。 在该方法中,您可以查询传递的characteristic参数的valuevalue将是一个NSData ,你可以把字节拉出来。 例如

 // MARK: - CBPeripheralDelegate func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { if let e = error { print("ERROR didUpdateValue \(e)") return } guard let data = characteristic.value else { return } ... } 

value方法实际上在期望的Data周围返回一个Optional value ,所以一个放开的警戒线就是要走的路。

通常情况下,一个特性将有一个简单的值,编码为20字节的Data有效载荷。 例如,也许这是一个简单的UInt16计数器。 至

为了在这些Data glumps和有意义的数字之间进行转换,可以看一下数据往返Swift数字types的答案(我已经包含了我自己的下面的实现)。

所以举个例子,如果你知道感兴趣的特征是一个可以作为UInt16提取的计数器,那么我会用上面的例子填充上面的例子:

 // MARK: - CBPeripheralDelegate func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { if let e = error { print("ERROR didUpdateValue \(e)") return } guard let data = characteristic.value else { return } print("counter is \(UInt16(data:data))") } // Data Extensions: protocol DataConvertible { init(data:Data) var data:Data { get } } extension DataConvertible { init(data:Data) { guard data.count == MemoryLayout<Self>.size else { fatalError("data size (\(data.count)) != type size (\(MemoryLayout<Self>.size))") } self = data.withUnsafeBytes { $0.pointee } } var data:Data { var value = self return Data(buffer: UnsafeBufferPointer(start: &value, count: 1)) } } extension UInt8:DataConvertible {} extension UInt16:DataConvertible {} extension UInt32:DataConvertible {} extension Int32:DataConvertible {} extension Int64:DataConvertible {} extension Double:DataConvertible {} extension Float:DataConvertible {}