2016-08-02 3 views
1

Core Bluetoothを使用してデバイスからすべての機能を取得する方法iOS Core bluetoothデバイスからすべての機能の説明を取得

情報を取得する前に、すべてのデバイスを低エネルギーのBluetoothで監視する必要があると私は考えました。

したがって、すべての周辺デバイスscanForPeripheralsWithServicesCBCentralManagerでスキャンします。デリゲートのコールバックで:私たちは、周辺の識別子を保存し、いくつかの特性の変化のような将来的にそれを処理するために、末梢保存することができます

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

、これについての説明を取得する方法など

しかし、私の質問のスイッチをオフ/オンと例えば、私はいくつかの特性を持っていますが、使用方法はわかりません。この未来についての情報を見つける場所。

状況を説明しましょう。たとえば、私はブルートゥースを介して音量を処理できるいくつかのオプションを備えたサウンドプレーヤーを持っています。

私は周辺機器を最初に取得し、次にサービスを検出して特性を見つけてボリューム "プロパティ"を見つける必要がありますが、どのように見つけることができますか? 。たとえば、最小ボリューム量として0を、最大値として1を渡すことができます。しかし、それは0から1000までの範囲内であってもよいし、他の任意のものであってもよい。この情報をどのように検出するのですか?

答えて

1

であなたの特性を比較することができ、など
サービス&の場合特性はBluetoothのドキュメントに従っており、それ自体が「文書化」されており、文書に従うだけです。hereです。理論的には、これらの "よく知られている"サービスと文字には "0x0000"のようなUUIDが必要です。
例:Battery serviceは0x180Fであり、Battery Levelは0x2A19であり、可能な値は定義されたプロトコルを有する。

その他のカスタムサービス/特性については、それはより困難です。それぞれに独自のドキュメントがあり、UUIDはもっと長くなります(ルールに則って開発されている場合)。 設定されている場合は、CBDescriptorを読んで詳しい情報を入手できます。

いずれの場合でも、Bluetooth Low Energy Documentationを参照するか、製造元に慣れている必要があります。いずれにしても、それはすべて逆のエンゲージメントです。

+0

を確認しました。わかったので、メーカーの各特性のUUIDをリクエストする必要があります。 128ビットのUUID特性を指定することができます。ご回答ありがとうございます! –

+0

サービスをスキャンするとき、そして特性のために、UUIDが「古典的なもの」に該当する場合は、何をすべきかを知ることができます。そうでなければ、メーカーによってカスタマイズされます。 – Larme

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.

+0

ありがとうございますが、実際にはどのような特徴があるべきかについての情報はどこにありますか?私は各周辺機器に名前が入っていることを知っていますしかし、特徴はどうですか? –

+0

私はYMSCBライブラリを使用していますが、使用可能なすべての関数をどのように変更するのか、どの範囲で修正するべきかを理解できません。 –

+0

更新された回答 – itechnician

関連する問題