如何从同一个ble设备访问两个不同的服务



例如,我的平板电脑上有两个心率监测器。我正在使用这样的代码来获取HRM设备列表:

var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync
(
    GattDeviceService.GetDeviceSelectorFromUuid(GattServiceUuids.HeartRate)
);

然后我在GUI中显示一个列表框,其中包含来自devices[I]. name的设备名称。例如,我选择索引为0的设备。然后我可以访问它人力资源服务和人力资源管理特性:

var service = await GattDeviceService.FromIdAsync(devices[0].Id);
var characteristic = await service.GetCharacteristics(attCharacteristicUuids.HeartRateMeasurement);

除了心率,我还需要电池状态。我如何使用同一(已选定)装置的电池服务?

在我们开始之前的一些信息:

你做必须配对您的蓝牙设备与您的计算机,在你可以扫描他们!

列出您的配对设备:

ListBox1.Items.Clear();
var devices = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));
foreach (var device in devices)
{
    ListBox1.Items.Add(device);
}

如果你想知道蓝牙设备的电池寿命:

连接BLE设备后如何获取电池电量?

要同时访问多个服务,您需要"reconnect"到设备:

设备A只能同时接入设备B上的业务S。设备A可以同时接入设备B、C、D、E等设备上的业务S。

@alanjmcf

来源:同时建立多个蓝牙spp

但是不要与方法GetAllIncludedServices();混淆,因为它确实返回"包含的服务"。正如另一个问题的一个答案所述:

你可能不想要"包含的服务"。包含服务是BLE中的一个特殊概念,我怀疑你是否正在使用它,它用于将一个服务与另一个服务链接起来。

@Emil

最新更新