如何使用PyQt6连接BLE适配器的MAC地址?
PyQt/PySide 通过MAC地址连接BLE设备的修正方案
你的代码核心问题是未将MAC地址正确关联到设备信息与控制器对象,以下是修复后的实现:
问题点梳理
- 创建的
QBluetoothDeviceInfo是空对象,未绑定目标设备的MAC地址 - 实例化的
QBluetoothAddress未赋值给任何有效对象,属于无效操作 - 缺少连接状态的信号监听,无法确认连接结果或排查错误
修正后的代码
def connect_to_mac(self, mac_address: str): # 1. 创建有效的蓝牙地址对象,先校验地址合法性 bt_address = QtBluetooth.QBluetoothAddress(mac_address) if not bt_address.isValid(): print(f"无效MAC地址: {mac_address}") return # 2. 用蓝牙地址生成设备信息对象,设备名称未知可传空字符串 self.current_device = QtBluetooth.QBluetoothDeviceInfo(bt_address, "", 0) # 3. 基于有效设备信息创建BLE中央控制器 self.controller = QtBluetooth.QLowEnergyController.createCentral(self.current_device) # 4. 设置地址类型,根据设备实际类型选Public或Random address_type = QtBluetooth.QLowEnergyController.RemoteAddressType.PublicAddress self.controller.setRemoteAddressType(address_type) # 5. 绑定信号槽监听连接状态 self.controller.connected.connect(self.on_device_connected) self.controller.disconnected.connect(self.on_device_disconnected) self.controller.errorOccurred.connect(self.on_ble_error) # 6. 发起连接 self.controller.connectToDevice() # 连接成功回调 def on_device_connected(self): print("BLE设备连接成功") # 此处可继续执行服务发现等后续操作 # 断开连接回调 def on_device_disconnected(self): print("BLE设备已断开连接") # 错误回调 def on_ble_error(self, error): error_str = self.controller.errorString() print(f"BLE连接错误: {error_str}")
额外注意事项
- 确保目标BLE设备处于可连接状态
- 若设备使用随机地址,需将
RemoteAddressType改为RandomAddress - 运行前确认系统蓝牙适配器已开启,且程序拥有蓝牙访问权限(不同系统权限要求不同)
内容的提问来源于stack exchange,提问作者sonus89
相关产品推荐
相关产品推荐

