如何在Windows 10上控制蓝牙LE连接
本文关键字:LE 连接 控制 Windows | 更新日期: 2023-09-27 18:06:44
我需要开发一个通过蓝牙低功耗与设备通信的应用程序。一旦应用程序通过蓝牙连接到设备,它就会使用gatt服务接收和发送数据。
应用程序需要在Windows 10环境中运行。到目前为止,我能够通过使用以下UWP类来开发和尝试应用程序:
DeviceWatcher
BluetoothLEDevice
一旦设备被发现并配对,通信就开始了。我遇到的主要问题是,我无法控制与设备的连接/断开连接,也就是说,一旦设备正确且先前配对,连接就会自动启动,但到目前为止,我还没有找到任何connect()/disconnect()方法。
是否有一种方法来控制与特定蓝牙LE设备的连接?是否有其他api允许在不使用UWP框架的情况下使用蓝牙,并提供对蓝牙的更多控制?
一旦设备配对,只要它在Windows 10机器附近打开,它就会尝试连接。这是蓝牙中定义的行为,因为外设在打开时总是会发出连接请求。
有一个DeviceWatcher后台任务,当你的蓝牙设备连接时,你可以注册它来触发你的应用。你可以在这里找到一些示例代码。
是否有方法控制与特定蓝牙LE设备的连接?
是的。启动连接:当您通过FromBluetoothAddressAsync
或FromIdAsync
创建BluetoothLEDevice
时,系统将尝试启动到该外设的连接,如果它尚未保持连接。
// Connects to a Bluetooth device, given some string deviceId
BluetoothLEDevice bleDevice = await BluetoothLEDevice.FromIdAsync(deviceId);
要处理连接,调用BluetoothLEDevice
上的close
方法。如果你的应用是唯一拥有外设句柄的实体,这将导致系统断开连接。但是,如果另一个应用程序或系统服务有外设的句柄,则连接不会被关闭。
// Will disconnect from the BTLE device, if you hold the only handle
bleDevice.close()
这些都是从这里的BluetoothLEDevice文档中摘取的。
是否有其他api ?
在Windows 10中没有任何其他内置的api提供更多的蓝牙控制。UWP api提供了Windows 10目前提供的最多的控制。你可以使用另一个蓝牙堆栈,但这些堆栈必须单独安装,并且可能会破坏Windows 10上的其他蓝牙行为。