接入蓝牙LE设备

本文关键字:设备 LE 接入 | 更新日期: 2023-09-27 18:17:16

我有蓝牙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));
        }
    }

我已经把这个添加到manifest:

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

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

接入蓝牙LE设备

如果没有一个完整的可重现场景(这很难,当等式的一半是您的BLE设备时),就不可能确切地知道代码中存在哪些问题。然而,在我看来,最明显的问题似乎是指定了错误的服务ID。

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

根据蓝牙文档,0x1803的ID甚至不对应于已知的服务。

在Windows RT中,您实际上可以通过名称指定通用访问配置文件,例如<m2:Function Type="name:genericAccess" />。我不知道Windows Phone是否支持同样的功能,但值得一试。否则,您应该指定实际的、正确的0x1800的ID。

还请注意,我不确定Windows Phone是否允许在清单中的短id。如果name:genericAccessserviceId:1800都不能工作,您应该像上面那样指定完整的GUID。