如何在Windows 10上控制蓝牙LE连接

本文关键字:LE 连接 控制 Windows | 更新日期: 2023-09-27 18:06:44

我需要开发一个通过蓝牙低功耗与设备通信的应用程序。一旦应用程序通过蓝牙连接到设备,它就会使用gatt服务接收和发送数据。

应用程序需要在Windows 10环境中运行。到目前为止,我能够通过使用以下UWP类来开发和尝试应用程序:

DeviceWatcher

BluetoothLEDevice

一旦设备被发现并配对,通信就开始了。我遇到的主要问题是,我无法控制与设备的连接/断开连接,也就是说,一旦设备正确且先前配对,连接就会自动启动,但到目前为止,我还没有找到任何connect()/disconnect()方法。

是否有一种方法来控制与特定蓝牙LE设备的连接?是否有其他api允许在不使用UWP框架的情况下使用蓝牙,并提供对蓝牙的更多控制?

如何在Windows 10上控制蓝牙LE连接

一旦设备配对,只要它在Windows 10机器附近打开,它就会尝试连接。这是蓝牙中定义的行为,因为外设在打开时总是会发出连接请求。

有一个DeviceWatcher后台任务,当你的蓝牙设备连接时,你可以注册它来触发你的应用。你可以在这里找到一些示例代码。

是否有方法控制与特定蓝牙LE设备的连接?

是的。启动连接:当您通过FromBluetoothAddressAsyncFromIdAsync创建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上的其他蓝牙行为。