如何使用Core Bluetooth从我的设备获取所有可用功能。
我认为在获取任何信息之前,我们需要通过低能量蓝牙观察所有设备。
因此,第一步是通过CBCentralManager
扫描所有外围设备- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
。在委托回调中:
<!doctype html>
<html ng-app="app">
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-animate.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.13.4.js"></script>
<script src="example.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div ng-controller="DateCtrl" style="padding:40px">
<label>Begin Date</label>
<div class='input-group date'>
<input ng-model="dt" class="form-control" onkeydown="return false" datepicker-popup="MM/dd/yyyy" show-weeks="false" is-open="BeginDateOpen" ng-focus="BeginDateOpen=true" ng-click="BeginDateOpen=true" min-date="Main.MinDate" required/>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</body>
</html>
我们可以保存外设标识符并保存外设以便将来处理它,如更改某些特性,关闭/打开等等。
但我的问题是如何获得这个功能的描述,例如我有一些特点,但我不知道如何使用。哪里可以找到有关这个未来的信息。
让我来描述一下情况。例如,我有声音播放器,有一些选项,我可以通过蓝牙处理音量。
所以我需要首先获取外围设备,然后检测服务,然后发现特性以找到音量“属性”,但我怎样才能找到它,我应该如何理解哪个是最小/最大音量在哪里可以找到这些信息。例如,我们可以将0作为最小音量,将1作为最大值。但它也可能在0到1000或任何其他范围内。如何检测这些信息?
答案 0 :(得分:1)
您无法确定找到&#34;文档&#34;对于每个特征,例如可能的值等等
如果服务&amp;特征遵循蓝牙的文档,并且本身&#34;记录&#34;,它只是遵循文档,它的here。从理论上讲,这些着名的知识&#34;服务和字符应该有一个UUID,如&#34; 0x0000&#34;。
示例:Battery service为0x180F,Battery Level为0x2A19,可能的值具有已定义的协议。
对于其他定制服务/特征,它更难。每个人都有自己的文档,UUID更长(如果它是根据规则开发的)。
如果设置,您可以阅读CBDescriptor
以获取更多信息。
在所有情况下,您必须参考蓝牙低能耗文档,或者是否为制造商定制。无论哪种方式,它都是关于逆向的。
答案 1 :(得分:0)
您可以参考此演示项目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.
进行比较