【问题标题】:How to change order of charateristics ID discovered while scanning peripheral using core bleutooth ios使用核心蓝牙 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,所以有什么办法可以解决。请帮帮我。提前谢谢你。

【问题讨论】:

    标签: ios swift core-bluetooth


    【解决方案1】:

    这些特征将以任意且未定义的顺序被发现,但这不重要。

    您应该存储对已发现特征的引用,以便您可以根据需要对其进行写入。

    你的应用应该经历不同的阶段

    1. 扫描并发现广告特定服务的外围设备
    2. 连接到目标外围设备
    3. 发现服务的特点
    4. 根据需要读取/写入数据 - 根据需要重复此步骤
    5. 断开连接

    例如:

        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描述可能是错误的?是否有任何地方写着我们无法控制订单,因为我必须证明这一点。谢谢
    • 顺序无关紧要。我已经更新了我的答案,以展示一种处理特征的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2021-06-08
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多