接入蓝牙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不返回任何设备。所以我的问题是,如果有人知道我忘记了什么或做错了(模块也可能是问题,但我不认为我配对/连接它没有问题)。
如果没有一个完整的可重现场景(这很难,当等式的一半是您的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:genericAccess
和serviceId:1800
都不能工作,您应该像上面那样指定完整的GUID。