iOS 核心蓝牙从设备获取所有功能描述
iOS Core bluetooth get all features description from device
如何使用 Core Bluetooth 从我的设备获取所有可用功能。
我认为在获取任何信息之前,我们需要通过低功耗蓝牙观察所有设备。
所以第一步是通过 CBCentralManager
扫描所有外围设备 scanForPeripheralsWithServices
。在委托回调中:
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
我们可以保存外设标识符并保存外设以便将来处理它,比如改变一些特性,切换off/on等等
但是我的问题是如何得到这个函数的描述,比如我得到了一些特性,但我不知道如何使用。在哪里可以找到关于这个未来的信息。
让我描述一下情况。例如,我有一些声音播放器,我可以通过蓝牙处理音量。
所以我需要先获取外设,然后检测服务,然后发现特征来找到音量"property",但是我怎么找到它,我应该如何理解哪个是min/max音量在哪里可以找到这些信息。例如,我们可以将 0 作为最小交易量,将 1 作为最大交易量。但它也可以在 0 到 1000 或任何其他范围内。如何检测这些信息?
您可以参考这个演示项目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.
比较你的特点了
您无法确定找到每个特征的 "documentation",例如可能的值是什么等
如果 Services & the Characteristics 遵循蓝牙的文档,并且本身 "documented",它只是遵循文档,它是 here。理论上,这些 "well known" 服务和角色应该有一个像“0x0000”这样的 UUID。
示例:Battery service is 0x180F, Battery Level 是 0x2A19,可能的值具有已定义的协议。
其他习俗services/characteristics,就更难了。每个都有自己的文档,并且 UUID 更长(如果它是按照规则开发的)。
如果已设置,您可以阅读 CBDescriptor
以获取更多信息。
在所有情况下,您都必须参考蓝牙低功耗文档,或者如果它是制造商的自定义文档。不管怎样,都是逆向工程。
如何使用 Core Bluetooth 从我的设备获取所有可用功能。
我认为在获取任何信息之前,我们需要通过低功耗蓝牙观察所有设备。
所以第一步是通过 CBCentralManager
扫描所有外围设备 scanForPeripheralsWithServices
。在委托回调中:
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
我们可以保存外设标识符并保存外设以便将来处理它,比如改变一些特性,切换off/on等等
但是我的问题是如何得到这个函数的描述,比如我得到了一些特性,但我不知道如何使用。在哪里可以找到关于这个未来的信息。
让我描述一下情况。例如,我有一些声音播放器,我可以通过蓝牙处理音量。
所以我需要先获取外设,然后检测服务,然后发现特征来找到音量"property",但是我怎么找到它,我应该如何理解哪个是min/max音量在哪里可以找到这些信息。例如,我们可以将 0 作为最小交易量,将 1 作为最大交易量。但它也可以在 0 到 1000 或任何其他范围内。如何检测这些信息?
您可以参考这个演示项目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.
比较你的特点了您无法确定找到每个特征的 "documentation",例如可能的值是什么等
如果 Services & the Characteristics 遵循蓝牙的文档,并且本身 "documented",它只是遵循文档,它是 here。理论上,这些 "well known" 服务和角色应该有一个像“0x0000”这样的 UUID。
示例:Battery service is 0x180F, Battery Level 是 0x2A19,可能的值具有已定义的协议。
其他习俗services/characteristics,就更难了。每个都有自己的文档,并且 UUID 更长(如果它是按照规则开发的)。
如果已设置,您可以阅读 CBDescriptor
以获取更多信息。
在所有情况下,您都必须参考蓝牙低功耗文档,或者如果它是制造商的自定义文档。不管怎样,都是逆向工程。