如何从 C++ 代码扫描和连接广告 BLE 设备?

Posted

技术标签:

【中文标题】如何从 C++ 代码扫描和连接广告 BLE 设备?【英文标题】:How to scan and connect to advertising BLE devices from C++ code? 【发布时间】:2019-04-04 16:03:48 【问题描述】:

我正在尝试从 C++ 代码搜索并连接到广告低功耗蓝牙设备。 我想要一段代码来使用笔记本电脑的无线芯片来发现并连接到 BLE 设备,而不管它们的 GATT 服务如何。 我希望正常使用 GATT 属性(服务、特征、描述符、通知)。

以编程方式

我有来自 Windows API 的 BluetoothLEAdvertisementWatcher Class 文档。

我试图让this example 工作,但没有好的结果。

我也试过this example,但没有成功。

手动

我想通了使用 Windows 10 操作中心,并使用手动配对来连接设备(因为 Windows 会看到并连接我的设备)。

然后我可以直接使用Windows.Devices.Bluetooth.GenericAttributeProfile Namespace

有没有办法自动实现?

【问题讨论】:

你试过这个样本吗? github.com/Microsoft/Windows-universal-samples/tree/master/… 【参考方案1】:

您好 Raphaël,欢迎来到 ***。当您说“没有好的结果”或“但没有成功”时,您应该详细说明原因(编译错误、运行时错误...)。

我使用了这段代码: Getting BLE Beacons in C++ Windows 10 Desktop Application

它在 Win10 下编译,您发布的第三个链接 (https://github.com/urish/win-ble-cpp) 也应该如此,因为如果您查看此处的包含,它非常相似。请注意,这不是常规的 win32 项目:您必须在 Visual Studio 中创建一个新的“Windows”/“Universal”C++ 项目,否则它们将无法编译。

或者,如果您可以使用 3rd 方库,您可以简单地使用 QtBluetooth,最新版本支持 windows 10。然后您可以轻松地从常规 win32 项目访问 BLE 功能。

【讨论】:

AFAIK,您提供的链接似乎支持这一点,Qt not 在 Windows 上支持 BLE。我很想被证明是错误的。 @DiBosco:我看到它现在可以在 Win10 下运行(在具有 BT LE 的笔记本电脑上)。该设备必须从 Windows 蓝牙管理器对话框配对。然后Qt可以看到它并连接到它。它不是很稳定,但它可以工作。已经填补了一些正在为下一个版本修复的 Qt 错误。 Win10 显然支持 WinRT API,这就是它的工作原理。 @DiBosco:文档说“尽管还没有 Win32 端口,但如果 win32 目标平台支持所需的 WinRT API,则会自动使用 WinRT 后端 最低要求是 Windows 10 版本 1507,服务略有改进从 Windows 10 版本 1607 开始发现。因此排除了 Windows 7 和 8.x 目标。" 谢谢。什么是“Windows 蓝牙管理器对话框”?恐怕我不是 Windows 用户。我想这对我的仅适用于 Linux 的蓝牙扫描仪示例没有帮助? '好,明白了。它已配对,我的扫描仪将获取其可用特征。显然 Qt 5.13 也将能够扫描和连接。非常感谢您的建议。

以上是关于如何从 C++ 代码扫描和连接广告 BLE 设备?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中获取当前连接的 BLE 外围设备

使用基于广告服务 UUID 的扫描过滤器扫描 BLE 外围设备

BLE广告和信标

BLE 设备应无需扫描即可连接

lesimpleble如何开启蓝牙

如何使用标识符连接外围设备/ BLE设备?