如何使用C#获取蓝牙LE(BLE)设备的所有服务?

时间:2016-07-26 20:07:08

标签: c# bluetooth windows-10 bluetooth-lowenergy

我在Windows 10上使用C#连接到Magicblue蓝牙LE LED灯,并希望能够更改其颜色。

我能够获得GattDeviceService并正确访问其单一特性。但是,我无法弄清楚如何获得该设备的其他两项服​​务。其中一个具有设置RGB颜色的写入特性。

将我的iPhone与LightBlue App和Microsofts BthGATTDump.exe一起使用,我能够看到服务和特性。我想,一旦我得到GattDeviceService,我可以“GetAllIncludeServices()”,但这会返回一个空列表。如果我尝试获得具有Guid的特定服务,它也会失败(见下文):

C:\Program Files (x86)\Windows Kits\10\Tools\x64\Bluetooth\BthGATTDump>bthgattdump
Microsoft Bluetooth GATT database viewer v1.00 Copyright (c) Microsoft Corp.
Please select device
        0 - LEDBLE-CA913BE2
        1 - HID OVER GATT
        2: To quit
0
Selected device - LEDBLE-CA913BE2
Device Address - eb0cca913be2  (STATIC)
[Service] Handle=0x0001 Type=0x1800(GAP)
    [Characteristic] Handle=0x0002 ValueHandle=0x0003 Type=0x2a00(Device Name) Properties=(Read/Write)
        [Value] LEDBLE-CA913BE2
    [Characteristic] Handle=0x0004 ValueHandle=0x0005 Type=0x2a01(Appearance) Properties=(Read)
        [Value] [4000]
    [Characteristic] Handle=0x0006 ValueHandle=0x0007 Type=0x2a04(Peripheral Preferred Connection Parameters) Properties=(Read)
        [Value] [100018000000C800]
[Service] Handle=0x0008 Type=0x1801(GATT)
[Service] Handle=0x0009 Type=0xfff0
[Service] Handle=0x000a Type=0xffe5
    [Characteristic] Handle=0x000b ValueHandle=0x000c Type=0xffe9 Properties=(WriteWithoutResponse)
[Service] Handle=0x000d Type=0xffe0
    [Characteristic] Handle=0x000e ValueHandle=0x000f Type=0xffe4 Properties=(Notify)
        [Descriptor]  Handle=0x0010 Type=0x2902(Client Configuration)
            [Value]  No subscription

C:\Program Files (x86)\Windows Kits\10\Tools\x64\Bluetooth\BthGATTDump>

如果它对任何帮助我的人都有用,下面是LED BLE设备的bthgattdump.exe输出。

{{1}}

我错过了什么愚蠢的事情?

2 个答案:

答案 0 :(得分:1)

您可能不希望获得“包含服务”。包含的服务是BLE中的一个特殊概念,我怀疑您使用的是用于将一个服务链接到另一个服务。

在观察者中,注意BLE设备而不是特定服务。有了这个BLE设备,您就可以获得所有主要服务的列表。

答案 1 :(得分:0)

 var services = service.GetAllIncludedServices();
 var services2 = service.GetIncludedServices(G);

如果您获得的service中包含RGB颜色服务,则可行。否则,它没有。

也许你可以试试这个:

var GatDevices = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(Guid.Parse("0000ffe5-0000-1000-8000-00805f9b34fb")));
var service = await GattDeviceService.FromIdAsync(GatDevices[0].Id);
var characteristics = service.GetAllCharacteristics();

有关FindAllAsync API的详细信息,请点击here