2016-08-01 34 views
1

BLE周辺機器に接続しようとしています。まず、私は、広告を監視:Windows 10のBLE周辺機器に接続

watcher = new BluetoothLEAdvertisementWatcher { ScanningMode = BluetoothLEScanningMode.Active }; 
watcher.Received += WatcherOnReceived; 
watcher.Start(); 

とWatcherOnReceivedコールバックで私はBluetoothLEDevice

public async void WatcherOnReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs btAdv) 
{ 
    BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); 
} 

を作成しようしかし、私は常にWatcherOnReceivedコールバックでbleDevice == nullのを取得します。なぜ、どのようにそれを修正するには? UWPアプリケーションでBLEデバイスを作成する適切な方法は何ですか?そのデバイスに接続し、GATTのサービスと特性を発見し、その一部の通知を有効にし、それらの一部を読み書きする必要があります。

答えて

3

この質問に対する回答は簡単です.Windows 10でBLEを使用しないでください。APIは動作しないか、ランダムに動作し、完全に文書化されていません。私は誰もが次の産業革命であることを話すのが好きで、MicrosoftはBLEが存在する6年後にBLE APIを使用していない。

+0

私は確かにすべてが無作為で、文書化されていないことに同意します。最も厄介なのは、1つのコンパクトで完全なBLE APIを持たず、他のWindowsデバイス(デバイスマネージャー)と統合し、各GATTサービスをデバイスとして公開すること+ 5つの異なるAPIあなたが望むものすべてを手に入れる。 – Emil

0

以前にペアになっていないBLEデバイスに接続する、つまりBluetooth LEセレクタ付きDeviceWatcherを使用する場合は、例8と9をhttps://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/DeviceEnumerationAndPairingで参照してください。

それ以外の場合は、システムのBluetoothペア設定で最初にペアリングしてから、BluetoothデバイスをFromBluetoothAddressAsyncから取得する必要があります。

+0

ありがとうございました。私は、そのサンプルのシナリオ9​​で私のBLEデバイスをペアにしました。さて、IsPairedフラグはそのデバイスでtrueを示します。しかし、私はまだ私のアプリでbleDevice == nullを取得します。 .FromBluetoothAddressAsync呼び出しで例外0x80070490を取得した後。 –

+0

広告ウォッチャにフィルタがないようです。あなたが接続しようとしているデバイスが、あなたが興味のあるBLEデバイスであることは確かですか?一部のBLEデバイスは、広告のみを受信できる場所では接続できません。 – Carter

+0

Bluetooth接続はBluetoothLEDeviceによって開始されます。bleDevice = BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress)を待機します。 ?そして、はい、私はそれが私の近接の唯一のBLEデバイスであるので、私が接続したいデバイスであると確信しています。 –

0

WatcherOnReceived()でデバイス情報を確認して、デバイスが接続したいデバイスであることを確認できます。

public async void WatcherOnReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs btAdv) 
{ 
    if (btAdv.Advertisement.LocalName == "SensorTag") 
    { 
     BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromBluetoothAddressAsync(btAdv.BluetoothAddress); 
    }  
} 

"SensorTag"の代わりに独自のBLEデバイス名を使用してください。

注:BLEデバイスは、あらかじめDeviceEnumerationAndPairingサンプルまたはPCの設定アプリのようにプログラムしてください(enter image description here)。

+0

私のBLEデバイスは、PCがデバイスを検索している場合でも、設定 - >デバイス - > Bluetoothには表示されません。しかし、Windowsプラットフォームサンプル、シナリオ8またはシナリオ9​​を実行すると、デバイスが表示されます。このデバイスはペアになっています。 WatcherOnReceivedコールバックでデバイスを見ることもできます。しかし、FromBluetoothAddressAsyncは常にデバイスに対してnullを返します。 –

+0

@MartinDusek 'Scenario8_PairDevice'の' PairButton_Click() 'に' UpdatePairingButtons();の前に次のコードを追加してください。 'if(dpr.Status == DevicePairingResultStatus.Paired) { BluetoothLEDevice bleDevice = BluetoothLEDevice.FromIdAsync(deviceInfoDisp.DeviceInformation.Id);を待ちます。 } '次にシナリオ8を実行し、選択したデバイスをペアにして接続状態をチェックします。注:デバイスとの接続にはしばらく時間が必要です。ペアリング後に 'bleDevice'を直ちにチェックすると、 'null'かもしれません。 –

+0

あなたの提案をありがとう。まだbleDeviceは、FromIdAsync()呼び出し後にnullと評価されます。しかし、BLEデバイスが広告を停止するため、ペアボタンをクリックした後のシナリオ8(変更なしで、または変更しても)がBLEデバイスに接続されている可能性があることに気付きました。ペアリングをクリックすると広告が再開されます。ペアリング/ペアリングの手順でデバイスへの接続/切断が行われていることを意味しますか?その動作のためのドキュメントはありますか? Windows上のBLEは私にとって本当の魔法に思えます... –

0

私はconnectBlueのBLEセンサーモジュールを使用していますが、正常に動作します。

  1. DeviceWatcherを作成します。
  2. デバイス
  3. がBLEAdvertisingを使用しないでください、あなたのセンサードライバー

を構築ペアdeviceWatcher.AddedとdeviceWatcher.EnumerationCompleted

  • イベントを追加! BLEはペアにする必要があります!

  • 関連する問題