You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python蓝牙RFCOMM编程代码卡在server.accept()问题求助

故障原因

  1. 逻辑角色错误:你当前的Python代码实现的是蓝牙RFCOMM服务端,作用是等待其他蓝牙设备作为客户端主动发起连接。但从日志可见树莓派已经通过系统配置主动连接了目标设备WT11i-A,不需要再做服务端等待连接。
  2. 端口占用冲突:你在/etc/bluetooth/rfcomm.conf中配置了开机自动绑定RFCOMM通道1到目标设备,系统已经占用了RFCOMM channel 1,你的Python服务端再绑定同一个端口时虽然没有显式报错,但实际上无法收到新的连接请求。
  3. 已存在连接冲突:系统已经和目标设备建立了rfcomm1的连接,目标设备不会再重复发起连接到你的Python服务端,所以accept()会一直阻塞等待新连接。

排查解决方法

根据你的实际需求选择对应方案即可:

方案1:树莓派作为服务端,等待目标设备主动连接(和安卓手机连接的场景一致)

  • 先释放系统占用的RFCOMM通道1:
    sudo rfcomm release rfcomm1
    
  • 修改/etc/bluetooth/rfcomm.conf,将bind yes改为bind no,禁用开机自动绑定,重启蓝牙服务:
    sudo systemctl restart bluetooth
    
  • 将目标设备设置为主动发起连接的模式,再运行你原来的Python代码即可正常收到连接请求。

方案2:树莓派作为客户端,直接对接已经配对连接的WT11i-A设备

你原来的服务端代码不符合需求,直接替换为两种可用的实现即可:

实现1:用pybluez主动发起连接

import bluetooth

target_addr = "00:07:80:E0:A4:FC"
port = 1

sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((target_addr, port))
print("连接成功")

try:
    while True:
        data = sock.recv(1)
        print(data)
        sock.send(data)
except:
    sock.close()

实现2:直接对接系统已经建立的rfcomm串口设备

不需要依赖pybluez库,直接操作串口即可,波特率和目标设备配置保持一致:

import serial

ser = serial.Serial('/dev/rfcomm1', 9600)
while True:
    data = ser.read(1)
    print(data)
    ser.write(data)

内容的提问来源于stack exchange,提问作者mortpiedra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:54:03