iOS Core蓝牙获取设备的所有功能描述

iOS Core蓝牙获取设备的所有功能描述

问题描述:

如何使用Core蓝牙从我的设备获取所有可用功能。iOS Core蓝牙获取设备的所有功能描述

我想在获得任何信息之前,我们需要通过低能量蓝牙观察所有设备。

因此,第一步是通过CBCentralManager扫描所有外围设备scanForPeripheralsWithServices。在委托回调:

- (void)centralManager:(CBCentralManager *)central 
didDiscoverPeripheral:(CBPeripheral *)peripheral 
    advertisementData:(NSDictionary *)advertisementData 
        RSSI:(NSNumber *)RSSI 

我们可以节省外设标识符和保存外围处理它在未来样改变一些特点,开关OFF/ON等

但我的问题是如何获得的描述功能,例如我有一些特点,但我不知道如何使用。哪里可以找到关于这个未来的信息。

让我描述一下情况。例如,我有一些声音播放器,可以通过蓝牙处理音量。

所以我需要得到周围,然后再检测服务,然后发现特征找到卷“财产”,但我怎么能找到它,我应该如何理解这分/体积的最大金额在哪里可以找到此信息。例如,我们可以传递0作为最小音量和1作为最大音量。但它也可能在0到1000或其他范围内。如何检测这些信息?

比较你的特性你不能一定要找到每个特色的“文档”,像什么是可能的值等
如果服务&的特征遵循蓝牙的文档,本身“记录”,它只是按照文档,它是here。理论上,这些“众所周知”的服务和角色应该有一个像“0x0000”这样的UUID。
示例:Battery service为0x180F,Battery Level为0x2A19,可能的值具有已定义的协议。

对于其他定制服务/特性,这是更困难的。每个人都有自己的文档,并且UUID更长(如果它是根据规则开发的)。 如果设置,您可以阅读CBDescriptor以获取更多信息。

在任何情况下,您必须参阅Bluetooth Low Energy文档,或者如果它是制造商定制的。无论是明智的,这都是关于反向征服。

+0

好,据我了解,我应该要求制造商的每个特征的UUID,对不对?因为它们可以指定任何128位的UUID来表示特征。谢谢你的回答! –

+0

当你扫描服务和特性时,如果他们的UUID属于“经典之作”,那么你可以知道该做什么,否则,它是由制造商定制的(可能是任何东西)。 – Larme

您可以参考此演示项目here

通过以下代码片段,您可以获得与任何iOS支持的外设相关的所有特性和服务。

BabyBluetooth *objBluetooth = [BabyBluetooth shareBabyBluetooth]; 
objBluetooth.scanForPeripherals().begin(); 

您可以用这种方式设置委托回叫。

-(void)babyDelegate{ 

    //If any peripheral discovered 
    [objBluetooth setBlockOnDiscoverToPeripherals:^(CBCentralManager *central, CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) { 
     NSLog(@"搜索到了设备:%@",peripheral.name); 
    }]; 


    //Set the filtration criteria for the bluetooth peripherals 
    [objBluetooth setFilterOnDiscoverPeripherals:^BOOL(NSString *peripheralName, NSDictionary *advertisementData, NSNumber *RSSI) { 

     //if ([peripheralName hasPrefix:@"Pxxxx"]) { 
     // return YES; 
     //} 
     //return NO; 
     if (peripheralName.length >1) { 
      return YES; 
     } 
     return NO; 
    }]; 

    //and so on. 
} 

一旦外围过滤,可以从阵列得到它,然后使用此:

objBluetooth.having(peripheralFromArray).then.connectToPeripherals().discoverServices().discoverCharacteristics().begin(); 

[_channelForaD40 setBlockOnDiscoverCharacteristics:^(CBPeripheral *peripheral, CBService *service, NSError *error) { 

//得到你的特点的描述在这里 }]。

[_channelForaD40 setBlockOnReadValueForCharacteristic:^(CBPeripheral *peripheral, CBCharacteristic *characteristics, NSError *error) { 

//在这里阅读您的特征的值 }];

那么,你终于可以与Bluetooth standards.

+0

谢谢,但我在哪里可以找到有关每个特征应该做什么的信息。我知道每个外围设备都包含名称。但特征呢? –

+0

我使用YMSCB库,但无法理解如何获取所有可用的函数进行修改以及在哪些范围内进行修改。 –

+0

查看我的更新回答 – itechnician