iOS Core蓝牙从设备获取所有function描述
如何使用Core Bluetooth从我的设备获取所有可用function。
我想在得到任何信息之前我们需要通过低能量蓝牙观察所有设备。
因此,第一步是通过CBCentralManager
扫描所有外围设备CBCentralManager
。 在委托回调中:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
我们可以保存外设标识符并保存外设以便将来处理它,比如改变一些特性,关闭/打开等。
但我的问题是如何获得这个function的描述,例如我有一些特点,但我不知道如何使用。 哪里可以找到有关这个未来的信息。
让我来描述一下情况。 例如,我有声音播放器,有一些选项,我可以通过蓝牙处理音量。
所以我需要首先获取外围设备,然后检测服务然后发现特性以找到音量“属性”,但我怎样才能找到它,我应该如何理解哪个是最小/最大音量在哪里可以找到这些信息。 例如,我们可以将0作为最小音量传递,将1作为最大音量传递。 但它也可能在0到1000或任何其他范围内。 如何检测这些信息?
您不能确定为每个特征找到“文档”,例如可能的值等等。
如果服务和特征遵循蓝牙的文档,并且本身“记录”,它只是按照文档,它就在这里 。 理论上,这些“众所周知”的服务和字符应该具有类似“0x0000”的UUID。
示例: 电池服务为0x180F, 电池电量为0x2A19,可能的值具有已定义的协议。
对于其他自定义服务/特性,它更难。 每个人都有自己的文档,UUID更长(如果它是根据规则开发的)。 如果设置,您可以阅读CBDescriptor
以获取更多信息。
在所有情况下,您必须参考蓝牙低能耗文档,或者是否为制造商定制。 无论哪种方式,这都是关于逆向的。
您可以在此处参考此演示项目。
通过以下代码段,您可以获得与任何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. }
外围设备过滤后,您可以从arrays中获取它,然后使用:
objBluetooth.having(peripheralFromArray).then.connectToPeripherals().discoverServices().discoverCharacteristics().begin(); [_channelForaD40 setBlockOnDiscoverCharacteristics:^(CBPeripheral *peripheral, CBService *service, NSError *error) {
//在此处获取您的特征描述}];
[_channelForaD40 setBlockOnReadValueForCharacteristic:^(CBPeripheral *peripheral, CBCharacteristic *characteristics, NSError *error) {
//在这里阅读你的特征值}];
那么,您最终可以将您的特性与蓝牙标准进行比较。