读取BLE外设特性并检查其值?
我正在使用Xcode上的Swift编写一个应用程序,该应用程序连接到蓝牙BLE外设。 我build立了一个到设备的连接,并且想从特定的特性(特别是服务UUID FFF0中的FFF1)读取一些数据。
如果我想要查找信息的characteristicx
是characteristicx
x,则可以使用以下代码请求读取characteristicx
:
peripheral.readValueForCharacteristic(charactericsx)
我想知道的是:如何检查这个读取的值是我正在寻找的。 我希望能够做一个if语句来检查我的价值与该特征的发现价值。
例如:如果发现的值是X,那么做一些事情,否则如果发现的值是Y,那么做别的事情。
这不是我想要做的很好的解释,但是我希望你能得到这个主意。
任何人都知道如何去做这个?
更新为Swift3
执行该方法后, peripheral(_:didUpdateValueFor:error:)
将asynchronous接收peripheral(_:didUpdateValueFor:error:)
方法。 在该方法中,您可以查询传递的characteristic
参数的value
。 value
将是一个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 {}