【发布时间】:2014-09-29 11:39:41
【问题描述】:
我正在尝试从 iOS 上的蓝牙 4.0 LE 秤读取值。如何将作为 NSData 接收的蓝牙特性测量值转换为专用的 Swift 对象?
作为一个规范,我知道......
Bit 0 到 Bit 12 → 重量(0 到 5000 g)
Bit 15 → 正/负重量值
func peripheral(peripheral: CBPeripheral!, didUpdateValueForCharacteristic characteristic: CBCharacteristic!, error: NSError!) {
let value:NSData = characteristic.value
let weight:Double = … ?
let negative:Bool = … ?
还有一条信息——查看
value.length
看起来我总是从设备获取 1 或 2 个字节 (?) 的数据。但是我仍然不确定如何提取我正在寻找的数据/值。我会很感激任何建议。
到目前为止,有点...
var bin16:UInt16 = 0
characteristic.value.getBytes(&bin16, range: NSRange(location: 0,length: 1))
println("Bytes \(characteristic.value.bytes) Length \(characteristic.value.length)")
println("Value \(bin16)")
– 这样做我设法得到一些体重读数。除非该值大于 255 或负数,否则它似乎有效。下面是一些例子:
75 克
字节 0x1655e458 长度 1 值 75
367 克
字节 0x1765cbc8 长度 2 价值 161
-6 克
字节 0x17670f18 长度 2 值 32
此外,这在两者之间传输的频率更高——在这种情况下,它不代表 160 克。也许是某种错误代码?!
字节 0x146528b8 长度 2 价值 160
【问题讨论】:
-
我只是添加了更多示例。看起来我只得到超过 1 个字节当需要时,这意味着当重量超过 255 克或负数时。然而,在那些 2 字节的情况下,我的基本值提取停止工作。
-
哦,我以为characteristic.value.length给了我使用的字节数,不是吗?在我的示例 1 或 2 中输出。
-
感谢您的澄清。要获得十六进制值,我只需使用代码示例中所写的“characteristic.value.bytes”
-
任何示例项目都可用,所以我可以连接我的体重秤??
标签: ios bluetooth swift nsdata core-bluetooth