如何使用C#在WinForm中手动绑定到低功耗蓝牙设备?这个问题的主要答案是:发现后WindowsUWP连接到BLE设备我正在编写自定义服务和测试,目前,在Windows10上使用C#.NETWinForm连接到低功耗蓝牙(BLE)设备。我正在使用Framework4.6.1。我们使用TISmartRF06评估板和TICC2650BLE子卡。另一位开发人员正在开发开发板的固件。目前使用类似于上述参考答案的方法,我能够连接到已经绑定的BLE设备。此设备是手动绑定的,Windows确实要求我提供PIN。由于设备没有PIN,只需输入“0”即可连接设备。连接后,通过这种方式,我可以获得所有GATT服务并执行我需要的操作。所以我很容易找到并获得广告BLE设备。问题是如何连接尚未配对的BLE设备?我浏览了网络并找到了许多BLE代码示例,但没有关于如何在代码中完成配对的具体说明。不确定我什至需要配对它,但Windows似乎只在配对设备上向我显示GATT服务。当我使用未配对的设备执行此操作时:privatevoidBleWatcherOnReceived(BluetoothLEAdvertisementWatchersender,BluetoothLEAdvertisementReceivedEventArgsargs){//dev.PairingAddress.CanpringInformation.Status失败DevicePairingResultdpr=awaitdev.DeviceInformation.Pairing.PairAsync(DevicePairingProtectionLevel.None);varservice=awaitGattDeviceService.FromIdAsync(dev.DeviceInformation.Id);当设备未手动配对时,dpr的结果总是失败。这导致GattDeviceServices为空。但我能够获得BLE设备的广告和属性。还有这种连接方法,但我不知道如何使用它:IdeviceParingSettings是一个接口。不确定要使用哪个类。我想这是我可以为我可能需要的“O”设置密码的地方?是否有人使用C#在Windows中与BLE设备配对,其中BLE设备没有安全性。基本上它应该是敞开的。我觉得我错过了一些简单的东西,或者这根本不可能(我看到一些帖子声称是这种情况。大多数都是岁)。我确实尝试了上面帖子中描述的方法,没有任何区别。任何帮助表示赞赏。如果您需要更多代码,请查看我在顶部提供的链接,因为这是我开始的地方。我很乐意提供我所有的实际代码,如果有我正在做的不适合的顺序。我想到了。我在正确的轨道上。使用后连接:vardev=awaitBluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);您需要进行自定义配对:varprslt=awaitdevice.DeviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds.ProvidePin,DevicePairingProtectionLevel.None);但这只会给你一个错误。您还必须创建一个device.DeviceInformation.Pairing.Custom.PairingRequested事件处理程序。所以我创建了这个处理程序privatevoidhandlerPairingReq(DeviceInformationCustomPairingCP,DevicePairingRequestedEventArgsDPR){//所以我们来到这里进行自定义配对请求。//这是你的别针所在的神奇地方。//我的设备实际上不需要pin但是//windows至少需要一个“0”。所以这解决了//它。这也不会调出Windows用户界面。DPR.接受(“0”);在PairAsync调用之前将其连接起来,例如:device.DeviceInformation.Pairing.Custom.PairingRequested+=handlerPairingRequested;连接的BlueToothAdvertisementWatcher代码的示例代码:privateBluetoothLEAdvertisementWatcherBTTatch=newBluetoothLEAdvertisementWatcher();privatevoidInits(){BTTatch.Received+;=AddentRWatcher(E).Start();}privateasyncvoidBtAddRx(BluetoothLEAdvertisementWatcherbw,BluetoothLEAdvertisementReceivedEventArgsargs){GattCommunicationStatussrslt;GattReadResultrslt;bw.Stop();//在inside.device=awaitBluetoothBleDevice时停止。uetoothAddressAsync(args.BluetoothAddress);if(device.DeviceInformation.Pairing.IsPaired==false){/*下面可选-一些示例说使用FromIdAsync获取设备。我认为这不重要。*/vardid=device.DeviceInformation.Id;//我重用了以后重新加载。设备.Dispose();设备=空;device=awaitBluetoothLEDevice.FromIdAsync(did);/*结束可选*/varhandlerPairingRequested=newTypedEventHandler(handlerPairingReq);device.DeviceInformation.Pairing.Custom.PairingRequested+=handlerPairingRequested;log("正在与设备配对......");varprslt=awaitdevice.DeviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds.ProvidePin,DevicePairingProtectionLevel.None);log("自定义PAIR完成状态:"+prslt.Status.ToString()+"连接状态:"+device.ConnectionStatus.ToString());device.DeviceInformation.Pairing.Custom.PairingRequested-=handlerPairingRequested;//一旦配对就不再需要它了。如果(prslt.Status!=DevicePairingResultStatus.Paired){//这不应该发生。如果是这样,我们退出再试一次。log("prsltexiting.prslt.status="+prslt.Status.ToString());//所以状态可能已经更新。让我们离开这里,重新获得设备。第二次应该配对吗?bw.Start();//重启这个观察者。返回;}else{//配对需要一些时间才能完成。如果您不等待,您可能会遇到问题。5秒似乎可以解决问题。系统.Threading.Thread.Sleep(5000);//尝试5秒lay.device.Dispose();//重新加载设备,以便GATT服务在那里。这就是我们等待的原因。device=awaitBluetoothLEDevice.FromIdAsync(did);}varservices=device.GattServices;//然后更多的代码来完成它。如果要断开连接,请使用:awaitdevice.DeviceInformation.Pairing.UnpairAsync();抱歉代码混乱如果有人觉得这有用或有疑问,请告诉我。我在任何地方都找不到任何WinForm示例代码。实际上我找不到任何代码来展示如何在没有UI的情况下与PIN配对。所以我希望这可以帮助任何可能被卡住的人。以上是C#学习教程:如何在WinForm中使用C#手动绑定蓝牙低功耗设备?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
