На этот вопрос в основном отвечает: Windows UWP подключается к BLE устройство после обнаружения
На данный момент я пишу настраиваемую службу и тестирую, используя C # .NET WinForm в Windows 10 для подключения к устройству Bluetooth с низким энергопотреблением (BLE). Я использую Framework 4.6.1. Мы используем оценочную плату TI SmartRF06 с дочерняя карта TI CC2650 BLE. Другой разработчик занимается прошивкой платы.
В настоящее время используются методы, аналогичные справочному ответу выше Я могу подключиться к уже привязанному устройству BLE. Это устройство было привязано вручную, и Windows требовала от меня ввода PIN-кода. Поскольку у устройства нет PIN-кода, просто введите «0», чтобы устройство могло подключиться. Подключившись таким образом, я могу получить доступ ко всем службам GATT и делать то, что мне нужно. Так что у меня нет проблем с поиском и получением рекламного BLE-устройства.
Проблема в том, как мне подключиться к устройству BLE, которое еще не было сопряжено? Я прошел через сеть и нашел много примеров кода BLE, но ничего конкретного, показывающего, как выполняется сопряжение в коде. Не уверен, что мне даже нужно это для сопряжения, но Windows, похоже, показывает мои службы GATT только на сопряженных устройствах.
Когда я делаю это с непарным устройством:
private void BleWatcherOnReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
{
var dev = await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);
// dev.DeviceInformation.Pairing.CanPair is true
// dpr.Status is Failed
DevicePairingResult dpr = await dev.DeviceInformation.Pairing.PairAsync(DevicePairingProtectionLevel.None);
var service = await GattDeviceService.FromIdAsync(dev.DeviceInformation.Id);
}
Результат dpr всегда терпит неудачу, если устройство не было сопряжено вручную. В результате GattDeviceServices
становится пустым. Но я могу получить рекламу и свойства устройства BLE.
Существует также такой метод подключения, но я не могу понять, как его использовать:
var prslt = await device.DeviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds.ProvidePin, DevicePairingProtectionLevel.None,IDevicePairingSettings);
IdeviceParingSettings
— это интерфейс. Не уверен, какой класс использовать с ним. Я думаю, что здесь я могу установить PIN-код «O», который мне может понадобиться?
Удалось ли кому-нибудь подключиться к устройству BLE в Windows с помощью С#, где устройство BLE не имеет защиты. В основном она должна быть широко открыта. Я чувствую, что упускаю что-то простое или это просто невозможно (что я видел в некоторых сообщениях, утверждающих, что это так. Большинству из них было много лет).
Я попробовал методы, описанные в упомянутом посте, без какой-либо разницы в результате.
Любая помощь приветствуется. Если вам нужно больше кода, посмотрите ссылку, которую я предоставил вверху, так как это то, с чего я начал. Я буду рад предоставить весь мой фактический код, если есть, возможно, последовательность, которую я делаю не к месту.