在Windows 10上连接到BLE外围设备

时间:2016-08-01 16:26:10

标签: windows bluetooth

我尝试连接到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 个答案:

答案 0 :(得分:4)

这个问题的答案很简单 - 不要在Windows 10上使用BLE.API不起作用或行为随机,完全没有文档记录。我喜欢所有人都在谈论IoT是下一次工业革命,微软在6年BLE存在后没有工作BLE API。

答案 1 :(得分:0)

如果您希望能够连接到以前未配对的BLE设备,请参阅https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/DeviceEnumerationAndPairing中的示例8和9,即使用带有蓝牙LE选择器的DeviceWatcher。

否则,您需要先在系统的蓝牙配对设置中配对它,然后才能从FromBluetoothAddressAsync检索BluetoothLEDevice。

答案 2 :(得分:0)

您可以在WatcherOnReceived()中查看设备信息,以确保设备是您要连接的设备。这样做:

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

使用您自己的BLE设备名称而不是“SensorTag”。

注意:您需要事先配对您的BLE设备(以编程方式,如DeviceEnumerationAndPairing示例或PC的设置应用程序,如下图所示。enter image description here)。