我在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}}
我错过了什么愚蠢的事情?
答案 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。