20.04 连接 HC-05 蓝牙模块失败

20.04 连接 HC-05 蓝牙模块失败
问题描述在 Ubuntu 20.04 系统中连接 HC-05 蓝牙串口模块时Windows 系统可以正常连接但 Ubuntu 系统中会出现蓝牙可以搜索到、PIN 码输入正确、设备可以配对成功但是连接后立即断开的情况。具体表现包括可以搜索到 HC-05PIN 码1234输入正确配对成功bluetoothctl connect连接失败rfcomm bind无法生成/dev/rfcomm0。扫描设备时可以看到 HC-05Device 00:55:44:5D:3E:1B HC-05输入 PIN 码1234后配对成功Pairing successful查看设备信息bluetoothctl info 00:55:44:5D:3E:1B设备状态如下Name: HC-05 Paired: yes Trusted: yes Blocked: no Connected: no UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb)这说明 HC-05 已经成功配对并且提供蓝牙串口服务。但是直接连接失败connect 00:55:44:5D:3E:1B报错如下Failed to connect: org.bluez.Error.Failed继续尝试绑定蓝牙串口sudo rfcomm bind /dev/rfcomm0 00:55:44:5D:3E:1B 1报错如下RFCOMM TTY support not available最终确认该问题不是 PIN 错误也不是 HC-05 配对失败而是当前内核没有启用 RFCOMM TTY 支持导致系统无法生成/dev/rfcomm0。二、原因分析检查当前内核配置sudo modprobe configs zcat /proc/config.gz | grep -E CONFIG_BT_RFCOMM|CONFIG_BT_RFCOMM_TTY输出结果CONFIG_BT_RFCOMMy # CONFIG_BT_RFCOMM_TTY is not set其中CONFIG_BT_RFCOMMy表示系统支持 RFCOMM 蓝牙通信协议。# CONFIG_BT_RFCOMM_TTY is not set表示系统不支持将 RFCOMM 蓝牙连接映射成 Linux TTY 串口设备。也就是说当前系统可以使用 RFCOMM 协议通信但不能创建/dev/rfcomm0因此传统蓝牙串口绑定方式不可用sudo rfcomm bind 0 00:55:44:5D:3E:1B 1解决思路是绕过/dev/rfcomm0直接使用 Python 通过 RFCOMM Socket 与 HC-05 通信。本文将该方法称为RFCOMM Socket 直连解析法三、具体解决步骤1. 进入 bluetoothctl执行bluetoothctl依次输入power on agent on default-agent scan on扫描到 HC-05 后会看到类似输出Device 00:55:44:5D:3E:1B HC-05本文中的 HC-05 蓝牙地址为00:55:44:5D:3E:1B实际使用时需要将该地址替换成自己的 HC-05 地址。2. 配对 HC-05在bluetoothctl中执行pair 00:55:44:5D:3E:1B系统提示输入 PIN 码时输入1234配对成功后会显示Pairing successful3. 将 HC-05 设置为信任设备执行trust 00:55:44:5D:3E:1B成功后会显示Changing 00:55:44:5D:3E:1B trust succeeded退出bluetoothctlquit4. 确认 HC-05 状态执行bluetoothctl info 00:55:44:5D:3E:1B确认状态中包含以下内容Paired: yes Trusted: yes Blocked: no UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb)