Windows系统Ble蓝牙通信


实际应用

之前做的一个项目需求就是,windows系统的pc连接双模的蓝牙设备,根据已经连接的edr蓝牙去跟对应的ble蓝牙进行通信。
我的基本思路是,双模蓝牙设备的edr和ble的mac地址要一致或者要有对应关系,使用windows的api枚举出已经连接的edr设备并获取到mac地址,再根据mac地址去发现对应ble设备的实例地址。


方案

目前我了解到的,在windows上开发ble蓝牙有两种方案:

  1. 使用windows的api,有集成的开源库,这里提供连接:https://github.com/DerekGn/WinBle
  2. 使用uwp平台的api,有官方提供的demo,这里提供连接:https://learn.microsoft.com/zh-cn/windows/uwp/devices-sensors/gatt-client

我是选择的uwp平台的api,因为毕竟是官方的。
下面就按照上面提到的思路来一步步实现。

实现步骤

一、获取已经连接的Edr蓝牙设备的Mac地址

直接使用windows提供的api就可以实现了,贴代码。

#include <devguid.h>
#include <setupapi.h>
#include <comdef.h>

#pragma comment(lib, "Bthprops.lib")
#pragma comment(lib, "Setupapi.lib")

std::vector<BLUETOOTH_DEVICE_INFO> getConnectDevice()
{
	BLUETOOTH_DEVICE_SEARCH_PARAMS searchParams = { sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS) };
	BLUETOOTH_DEVICE_INFO deviceInfo = { sizeof(BLUETOOTH_DEVICE_INFO) };

	searchParams.fReturnAuthenticated = FALSE;
	searchParams.fReturnRemembered = FALSE;
	searchParams.fReturnConnected = TRUE;
	searchParams.fIssueInquiry = FALSE;
	searchParams.cTimeoutMultiplier = 2;

	HANDLE hDeviceFind = BluetoothFindFirstDevice(&searchParams, &deviceInfo);
	std::vector<BLUETOOTH_DEVICE_INFO> connectedDevices;

	if (hDeviceFind == NULL) {
		//std::cerr << "No connected Bluetooth devices found." << std::endl;
		return connectedDevices;
	}

	do {
		connectedDevices.push_back(deviceInfo);

		//std::wcout << L"Device Name: " << deviceInfo.szName << std::endl;
		//std::wcout << L"Device Address: " << deviceInfo.Address.ullLong << std::endl;
		//std::wcout << L"Device Class: 0x" << std::hex << deviceInfo.ulClassofDevice << std::dec << std::endl;
		//std::wcout << L"-------------------------------------" << std::endl;
	} while (BluetoothFindNextDevice(hDeviceFind, &deviceInfo));

	BluetoothFindDeviceClose(hDeviceFind);

	return connectedDevices;
}

可以通过配置 BLUETOOTH_DEVICE_SEARCH_PARAMS 这个结构体实现枚举不同状态的设备。两个结构体更详细的说明可以在微软官网找到。

二、根据Mac地址发现Ble蓝牙的实例路径

最主要的就是设置Ble Watcher的过滤器和Watcher的回调函数。

// 提供部分核心代码
#include <vector&g
### Windows BLE蓝牙通信软件推荐 #### 推荐一:PC端的BLE调试工具 存在一款专为Windows平台开发的BLE调试工具,此工具深入挖掘了BLE协议栈的能力。它不仅实现了与BLE设备的快速配对机制,还利用现代软件工程理念构建了稳定的数据传输测试框架[^4]。该工具具备强大的调试日志功能,采用高效的数据结构记录,确保用户能够获取到详尽的交互信息,对于问题定位起到了关键作用。 #### 推荐二:基于Matlab的BLE通信解决方案 针对科研人员以及工程师群体,在MATLAB环境下可以实现BLE通信。一旦配置成功,则能返回搜索到的蓝牙设备信息,例如蓝牙设备名和设备地址等具体详情[^3]。这种方式适合那些已经熟悉MATLAB环境并希望在其内部集成BLE功能的人士。 #### 推荐三:通用型USB蓝牙适配器搭配官方驱动程序 考虑到实际应用中的兼容性和稳定性问题,有时使用第三方提供的专用驱动可能是解决问题的关键所在。例如,在某些情况下,即使系统自带驱动已安装完毕但仍无法正常工作时,尝试安装来自制造商所提供的最新版本驱动往往可以获得更好的效果[^2]。 ```python import os def install_bluetooth_driver(driver_path): """ 安装蓝牙驱动函数示例 参数: driver_path (str): 驱动文件路径 返回: bool: 成功与否标志位 """ try: result = os.system(f"pnputil.exe -i -a {driver_path}") if result == 0: return True raise Exception("Install failed.") except Exception as e: print(e) return False ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值