Windows 10 IoT 蓝牙低功耗技术

6
我遇到了重新连接我的BLE设备的问题。
正常情况: - BLE设备未配对 - Pi启动并启动我的应用程序,找到BLE设备,配对并连接,接收数据 - 启动Pi并启动我的应用程序,它不会配对,因为已经配对,连接良好并接收数据。
异常情况: - BLE设备未配对或已配对,无关紧要 - 如果我的BLE设备由于断电或超出范围而断开连接,并重新上电或返回范围,则Pi将重新连接并抛出: 'System.Exception' in mscorlib.ni.dll 指定登录会话的用户会话密钥不存在。(来自HRESULT的异常:0x80070572)
如果我尝试重新启动Pi,则在执行以下操作时会抛出相同的消息:await _readCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
唯一有效的方法是每次断开连接时取消配对设备。
这个人有相同的问题:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b98d77f2-bf5e-45fc-9495-1c444b54450e/uwpreconnecting-to-a-ble-csac-device-causes-exception?forum=wpdevelop 也许这里有人遇到了相同的问题并解决了它?谢谢。
1个回答

10
您收到此特定错误的原因几乎可以确定是BLE设备本身没有存储在配对过程中协商的绑定信息。要重用现有的BLE配对,设备必须保留与其伙伴的绑定以进行未来的通信会话。
开发人员有时可以通过使PC或移动应用程序删除已经保存的设备配对并每次看到蓝牙设备时协商新的配对来解决此设备缺陷(非Windows情况下)。这是可能的,因为许多蓝牙设备具有静态PIN码,无需交互即可配对,并保持开放配对模式。因此,应用程序在每次通信时创建新的设备配对。Mac BLE API在配对和取消配对时均不需要用户交互。
但是,在Windows BLE API下,这种解决方案行不通,因为与常规蓝牙不同,蓝牙低功耗API在配对和取消配对“仪式”期间都需要用户交互。用户必须同意每个配对并同意每个取消配对。这使得从Windows的UX角度来看,这个解决方案都行不通。我的猜测是BLE设备制造商没有存储绑定信息。
我们开发自己的BLE驱动程序以与我们自己的BLE板进行通信也遇到了这样的情况;因为虽然在Mac OS和Android上使用上述方法可以工作,但Microsoft UWP上可用的BLE API需要用户在配对仪式期间进行交互。这似乎是正确的做法。

1
非常感谢,你的回答真的很有用。我在向HM11蓝牙模块(基于cc2540)发送数据时遇到了问题,并收到了“来自HRESULT 0x80650003”的异常。你的帖子解决了我的问题,我将设置从“不需要PIN码”更改为“认证和绑定”。这是所有网络中唯一有用的答案。 - Vladimir Tsykunov
@VladimirTsykunov 我也遇到了这个问题,你是在电脑上还是在蓝牙设备上将设置从“不需要PIN码”更改为“认证和绑定”?谢谢。 - daniel metlitski
2
是的,我已经将设备上的蓝牙切换到认证和绑定模式,这确实有所帮助。但是Win10仍然存在许多错误和断开连接的问题。使用外部蓝牙适配器可能会有所帮助,此外Win10八月更新中还有一些蓝牙核心方面的更改。@danielmetlitski - Vladimir Tsykunov
@danielmetlitski 是的,这可能是个问题。我在这方面并不是专家,但似乎配对和绑定会增加设备之间传输的数据大小,这可能会对性能较差的BLE芯片(大多数为高通)造成问题。但这不会导致连接设备时出现问题,您只需要重新输入密码即可解决。 - Vladimir Tsykunov
这不正确,用户必须同意并忘记这个噩梦。如果需要,可以撤回您的同意。我们生活在自动化时代,而不是猴子按按钮的时代。 - nim
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接