访问蓝牙LE设备

时间:2015-10-12 21:04:34

标签: c# windows-phone-8.1 bluetooth-lowenergy

我有蓝牙LE模块rn4020 http://www.microchip.com/wwwproducts/Devices.aspx?product=RN4020,我成功配对并连接到我的WP8.1,但我无法通过以下代码找到它:

private async void ScanDevices()
    {
        lstDevices.Items.Clear();
        string genericUUID = GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.GenericAccess);

        foreach (DeviceInformation di in await DeviceInformation.FindAllAsync(genericUUID))
        {
            BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(di.Id);
            lstDevices.Items.Add(new MyBluetoothLEDevice(bleDevice));
        }
    }

我已经把这个附加物显示出来了:

<Capabilities>
<m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
  <m2:Device Id="any">
    <m2:Function Type="serviceId:1803" />
  </m2:Device>
</m2:DeviceCapability>

Foreach不会返回任何设备。所以我的问题是,如果有人知道我忘记了什么或做错了什么(模块也可能有问题,但我不认为我配对/连接没有问题)。

1 个答案:

答案 0 :(得分:0)

如果没有完全可重现的场景(这很难,当你的BLE设备的一半是等式时),就不可能确定你的代码中存在哪些问题。但是,最明显的问题似乎是错误的服务ID的规范。

在您的代码中,您正在搜索GattServiceUuids.GenericAccess。这对应于GUID {00001800-0000-1000-8000-00805f9b34fb},或0x1800的短格式GATT UUID。但是在您的清单中,您指定的是serviceId:1803

根据the Bluetooth documentation,ID为0x1803甚至不对应于已知服务。

在Windows RT中,您实际上可以specify the Generic Access profile by name,例如<m2:Function Type="name:genericAccess" />。我不知道Windows Phone是否支持相同,但值得一试。否则,您应指定0x1800的实际ID值。

另请注意,我不确定Windows Phone是否允许清单中包含短ID。如果name:genericAccessserviceId:1800都不起作用,则应指定完整的GUID,如上所示。