使用核心蓝牙 ios 扫描外围设备时如何更改特征顺序
Posted
技术标签:
【中文标题】使用核心蓝牙 ios 扫描外围设备时如何更改特征顺序【英文标题】:How to change order of charateristics ID discovered while scanning peripheral using core bleutooth ios 【发布时间】:2014-10-18 06:08:10 【问题描述】:我在 ios 中使用核心蓝牙框架并扫描并发现 2 个特征 ID,但我希望它们的顺序与我得到的不同,所以是否可以通过编程方式更改它们的顺序或任何东西?
代码
if (service.UUID.isEqual(CBUUID.UUIDWithString("F4F2-BC76-3206341A")))
println(service.characteristics.count)
for aChar:CBCharacteristic in service.characteristics as [CBCharacteristic]
println(aChar)
println(aChar.UUID)
/* Write data*/
if aChar.UUID.isEqual(CBUUID.UUIDWithString("D0F0AECD-6405-0B040047"))
var str:NSString = "heyaa..!!"
data = str.dataUsingEncoding(NSUTF8StringEncoding)!
peripheral.writeValue(data, forCharacteristic: aChar, type: CBCharacteristicWriteType.WithResponse)
println("Write performed")
/* read data */
if aChar.UUID.isEqual(CBUUID.UUIDWithString("C8853E-A248-C6F0B1"))
peripheral.readValueForCharacteristic(aChar)
println("Read performed")
在这个读取数据的特征 ID 被首先调用,但我想先调用写入数据特征 ID,所以有什么办法可以解决。请帮帮我。提前谢谢你。
【问题讨论】:
【参考方案1】:这些特征将以任意且未定义的顺序被发现,但这不重要。
您应该存储对已发现特征的引用,以便您可以根据需要对其进行写入。
你的应用应该经历不同的阶段
-
扫描并发现广告特定服务的外围设备
连接到目标外围设备
发现服务的特点
根据需要读取/写入数据 - 根据需要重复此步骤
断开连接
例如:
var writeCharacteristic : CBCharacteristic?
var readCharacteristic : CBCharacteristic?
optional func peripheral(_ peripheral: CBPeripheral!, didDiscoverCharacteristicsForService service: CBService!,error error: NSError!)
if (service.UUID.isEqual(CBUUID.UUIDWithString("F4F2-BC76-3206341A")))
println(service.characteristics.count)
for aChar:CBCharacteristic in service.characteristics as [CBCharacteristic]
println(aChar)
println(aChar.UUID)
/* Write data*/
if aChar.UUID.isEqual(CBUUID.UUIDWithString("D0F0AECD-6405-0B040047"))
self.writeCharacteristic=aChar
else if aChar.UUID.isEqual(CBUUID.UUIDWithString("C8853E-A248-C6F0B1"))
self.readCharacteristic=aChar
if (self.writeCharacteristic != nil && self.readCharacteristic != nil)
var str:NSString = "heyaa..!!"
data = str.dataUsingEncoding(NSUTF8StringEncoding)!
peripheral.writeValue(data, forCharacteristic: self.writeCharacteristic!, type: CBCharacteristicWriteType.WithResponse)
println("Write performed")
optional func peripheral(_ peripheral: CBPeripheral!,didWriteValueForCharacteristic characteristic: CBCharacteristic!,error error: NSError!)
peripheral.readValueForCharacteristic(self.readCharacteristic!)
println("Read performed")
【讨论】:
我怀疑硬件的特征 ID 是否按字母顺序扫描?比如先是“C882”,然后是“D889”。它不是以任意方式找到它有固定的顺序。 我想先发现 ID“D889”,然后再发现其他 ID“C882”,我该怎么办?请帮帮我。 您无法控制发现特征的顺序,这也不重要。您需要对代码进行结构化,以便顺序无关紧要。 如果硬件团队说它是 ID "C882" 用于读取操作,但读取操作不会给我输出,除非我执行写入操作,所以首先我必须执行写入操作才能读取值。 ID描述可能是错误的?是否有任何地方写着我们无法控制订单,因为我必须证明这一点。谢谢 顺序无关紧要。我已经更新了我的答案,以展示一种处理特征的方法。以上是关于使用核心蓝牙 ios 扫描外围设备时如何更改特征顺序的主要内容,如果未能解决你的问题,请参考以下文章
我们可以使用蓝牙重新连接断开的外围设备而无需再次扫描 ios