回答

2

現在,Windows只能成爲GATT客戶端;但是,它仍然可以讀取和寫入GATT服務器的BLE設備。有幾個步驟來連​​接到BLE設備在Windows 10

權限

首先,請確保您有正確的功能設置。轉到Package.appxmanifest,Capabilities選項卡,然後打開藍牙。

Package.appxmanifest > Capabilities > Turn on Bluetooth

找到一個BLE裝置

的重要注意事項。目前,Windows 10不支持連接到 未配對的BLE設備。您必須在設置頁面 中配對設備,或使用應用內配對API。

瞭解設備已配對,有幾種方法可以找到BLE設備。您可以通過外觀,BluetoothAddress,ConnectionStatus,DeviceName或PairingState查找。一旦你找到你正在尋找的設備,你使用它的ID來連接它。以下是通過名稱查找設備的示例:

string deviceSelector = BluetoothLEDevice.GetDeviceSelectorFromDeviceName("SOME_NAME"); 
var devices = await DeviceInformation.FindAllAsync(deviceSelector); 

// Choose which device you want, name it yourDevice 

BluetoothLEDevice device = await BluetoothLEDevice.FromIdAsync(yourDevice.Id); 

FromIdAsync方法是Windows將連接到BLE設備的位置。

溝通

您可以讀取和寫入的特性通過以下的設備上。

// First get the characteristic you're interested in  
var characteristicId = new Guid("SOME_GUID"); 
var serviceId = new Guid("SOME_GUID"); 
var service = device.GetGattService(serviceId); 
var characterstic = service.GetCharacteristics(characteristicId)[0]; 

// Read from the characteristic 
GattReadResult result = await characterstic.ReadValueAsync(BluetoothCacheMode.Uncached); 
byte[] data = (result.Value.ToArray()); 

// Write to the characteristic 
DataWriter writer = new DataWriter(); 
byte[] data = SOME_DATA; 
writer.WriteBytes(data); 
GattCommunicationStatus status = await characteristic.WriteValueAsync(writer.DetachBuffer()); 
+0

如果GATT服務不可用,您應該配對設備並使用DeviceWatcher api。微軟的人正在研究更好的API,但現在這是做到這一點的方法。更多信息可以在這裏找到:http://stackoverflow.com/questions/35420940/windows-uwp-connect-to-ble-device-after-discovery/39040812#39040812 – LanderV