Windows 11下用PyBluez连接PS5控制器报'bad bluetooth address'错误求助
解决Windows 11下PyBluez连接PS5控制器的'bad bluetooth address'错误
错误原因分析
- 本地蓝牙地址绑定问题:你的代码中
server_sock.bind(("",PORT_ANY))在Windows平台的PyBluez中,空字符串无法正确绑定到内置蓝牙适配器,必须指定适配器的实际蓝牙地址。 - 服务类型不匹配:PS5控制器基于HID(人机接口设备)协议通信,而非普通串行端口服务,你当前代码广播的串行端口服务不会被PS5控制器识别。
- 蓝牙地址格式问题:Windows上蓝牙地址格式为
XX:XX:XX:XX:XX:XX(冒号分隔),PyBluez在Windows环境下对地址格式的校验更严格,空地址或格式错误都会触发报错。
修复步骤
1. 获取本地蓝牙适配器地址
在Windows命令提示符中执行以下命令,复制输出的蓝牙适配器MAC地址:
powershell Get-WmiObject -Class Win32_BluetoothController | Select-Object MACAddress
输出示例:AA:BB:CC:DD:EE:FF
2. 修改代码适配PS5控制器的HID服务
PS5控制器的核心HID服务UUID为00001124-0000-1000-8000-00805f9b34fb,调整代码如下:
from bluetooth import * # 替换成你的本地蓝牙适配器地址 LOCAL_BT_ADDR = "AA:BB:CC:DD:EE:FF" # PS5控制器HID服务UUID PS5_HID_UUID = "00001124-0000-1000-8000-00805f9b34fb" try: # 创建RFCOMM套接字 server_sock = BluetoothSocket(RFCOMM) # 绑定到指定蓝牙适配器和任意端口 server_sock.bind((LOCAL_BT_ADDR, PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] print(f"等待PS5控制器连接,RFCOMM通道:{port}") # 广播适配PS5的HID服务 advertise_service( server_sock, "PS5ControllerServer", service_id=PS5_HID_UUID, service_classes=[PS5_HID_UUID, SERIAL_PORT_CLASS], profiles=[SERIAL_PORT_PROFILE], ) client_sock, client_info = server_sock.accept() print(f"已连接设备:{client_info}") # 接收PS5控制器的二进制输入数据 while True: data = client_sock.recv(1024) if not data: break # 以十六进制格式打印原始数据,可根据需求解析按键/摇杆信息 print(f"收到数据:{data.hex()}") except IOError as e: print(f"IO错误:{e}") finally: if 'client_sock' in locals(): client_sock.close() server_sock.close() print("连接已关闭")
3. 额外注意事项
- 先完成配对:在Windows设置中完成PS5控制器和电脑的蓝牙配对,按住PS键+创建键直到指示灯闪烁,进入配对模式。
- 指定PyBluez版本:Windows上建议使用
0.23版本的PyBluez,新版本存在兼容性问题,安装命令:pip install pybluez==0.23 - 管理员权限运行:确保Python脚本以管理员身份启动,避免蓝牙权限不足的问题。
内容的提问来源于stack exchange,提问作者bob0815
相关产品推荐
相关产品推荐

