【问题标题】:How to get the characteristic from UUID in objective-C?如何从 Objective-C 中的 UUID 中获取特征?
【发布时间】:2015-02-26 08:01:58
【问题描述】:

我正在为 Objective-C 中的 BLE 开发。

我将 UUID 定义为如下代码:

    static NSString *const LEDStateCharacteristicUUID = @"ffffffff-7777-7uj7-a111-d631d00173f4";

我想通过以下代码向BLE设备写入特征,它需要传递3个参数:1.Data 2.Characteristic 3.type

CBCharacteristic *chara = ??? // how to set the characteristic via above UUID let it can pass to following function?

[peripheral writeValue:data forCharacteristic:chara type:CBCharacteristicWriteWithoutResponse];

如何通过上面的 UUID 设置特征,让它可以传递给writeCharacteristic 函数?

提前致谢。

【问题讨论】:

  • 在这里没有得到你真正想要的东西??
  • @Prince 我有编辑,我想通过 UUID 获取特征参数并将其传递给 writeCharacteristic 函数。
  • 您想创建一个包含字符串的 UUID,然后在接待处检索此信息?
  • 当您连接到外围设备时,您通常会发现其服务和特性 - 将 CBCharacteristic 存储在一个属性中,然后您可以对其进行写入。
  • 类似于这个问题。 stackoverflow.com/questions/28741931/…

标签: ios objective-c bluetooth-lowenergy core-bluetooth


【解决方案1】:

首先你需要知道你想要什么服务 UUID 和这个服务的什么特征 UUID。当您拥有这些 UUID 时,您可以使用以下逻辑来获取正确的特征实例:

- (CBCharacteristic *)characteristicWithUUID:(CBUUID *)characteristicUUID forServiceUUID:(CBUUID *)serviceUUID inPeripheral:(CBPeripheral *)peripheral {

    CBCharacteristic *returnCharacteristic  = nil;
    for (CBService *service in peripheral.services) {

       if ([service.UUID isEqual:serviceUUID]) {
           for (CBCharacteristic *characteristic in service.characteristics) {

                if ([characteristic.UUID isEqual:characteristicUUID]) {

                    returnCharacteristic = characteristic;
                }
            }
        }
    }
    return returnCharacteristic;
}

【讨论】:

    【解决方案2】:

    你需要为外设设置一个委托:

    peripheral.delegate = self;
    

    在 didConnectToPeripheral 中,您会发现外围设备的服务。然后在外围设备的 didDiscoverServices 回调中发现特征。然后在 didDiscoverCharacteristics 中循环遍历每个特征并将它们保存在一个变量中。

    - (void)peripheral:(CBPeripheral *)peripheral
    didDiscoverCharacteristicsForService:(CBService *)service
                 error:(NSError *)error
    {
        if (error) {
            NSLog(@"Error discovering characteristics: %@", error.localizedDescription);
        } else {
            NSLog(@"Discovered characteristics for %@", peripheral);
    
            for (CBCharacteristic *characteristic in service.characteristics) {
    
                if ([characteristic.UUID.UUIDString isEqualToString: LEDStateCharacteristicUUID]) {
                    // Save a reference to it in a property for use later if you want
                    _LEDstateCharacteristic = characteristic;
    
                    [peripheral writeValue:data forCharacteristic: _LEDstateCharacteristic type:CBCharacteristicWriteWithoutResponse];
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2017-04-17
      • 2017-04-30
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      相关资源
      最近更新 更多