如何使用rfcomm实现Raspberry Pi 3与三台安卓手机的蓝牙连接?
解决树莓派3同时连接三台安卓蓝牙串口设备的方案
嘿,很高兴你已经搞定了单设备的蓝牙连接!要同时连三台,核心是给每台设备分配独立的RFCOMM端口,下面是一步步的实操方案:
一、先搞定每台安卓设备的蓝牙配对与信任
首先得让树莓派记住每台手机的蓝牙信息,确保自动连接不翻车:
- 打开树莓派的蓝牙控制工具:
bluetoothctl - 扫描周边蓝牙设备:
scan on,找到三台安卓手机的MAC地址(格式类似AA:BB:CC:DD:EE:FF) - 对每台设备依次执行:
pair [手机MAC]:按提示在手机上确认配对trust [手机MAC]:标记为信任设备,避免每次连接都要手动确认- 完成后输入
exit退出蓝牙控制工具
二、绑定多个RFCOMM端口
默认的rfcomm0只能对应一个设备,我们需要给另外两台设备分别绑定rfcomm1和rfcomm2:
- 绑定第一台设备到rfcomm0(如果你之前已经用过这个端口,也可以继续沿用):
sudo rfcomm bind hci0 0 [手机1的MAC] - 绑定第二台到rfcomm1:
sudo rfcomm bind hci0 1 [手机2的MAC] - 绑定第三台到rfcomm2:
sudo rfcomm bind hci0 2 [手机3的MAC]
小贴士:执行完可以用
rfcomm list命令查看绑定状态,确认三个端口都显示为bound
三、同时监听并验证多设备连接
现在可以分别启动监听,或者直接通过串口工具测试连接是否正常:
- 如果你想让树莓派主动监听连接(适合手机端发起连接的场景),可以打开三个终端窗口,分别执行:
窗口1:sudo rfcomm listen hci0 0
窗口2:sudo rfcomm listen hci0 1
窗口3:sudo rfcomm listen hci0 2 - 然后在每台安卓手机上打开BlueTooth Serial Controller应用,连接对应的树莓派蓝牙设备
- 验证连接:分别用三个终端窗口打开minicom测试每个端口:
此时在任意一台手机上发送消息,对应的minicom窗口应该能实时收到,说明多设备连接成功!minicom -D /dev/rfcomm0 # 测试第一台手机 minicom -D /dev/rfcomm1 # 测试第二台手机 minicom -D /dev/rfcomm2 # 测试第三台手机
四、Python代码中处理多设备输入
在Python里,你可以用pyserial库分别打开三个串口对象,然后用多线程来监听每个设备的输入,避免单线程阻塞:
import serial import threading def listen_serial(port): # 波特率要和手机应用设置一致,默认一般是9600 ser = serial.Serial(port, 9600, timeout=1) print(f"开始监听{port}...") while True: data = ser.readline().decode('utf-8').strip() if data: print(f"来自{port}的输入: {data}") # 启动三个独立的监听线程 threading.Thread(target=listen_serial, args=('/dev/rfcomm0',)).start() threading.Thread(target=listen_serial, args=('/dev/rfcomm1',)).start() threading.Thread(target=listen_serial, args=('/dev/rfcomm2',)).start()
注意:先安装pyserial库:
pip install pyserial
一些注意事项
- 确保树莓派的蓝牙模块供电充足,连接多个设备可能需要更多电力,建议用5V/2A以上的电源
- 安卓端的BlueTooth Serial Controller应用要设置和树莓派一致的波特率
- 如果出现连接失败,可以先解绑端口:
sudo rfcomm release hci0 [端口号],然后重新绑定尝试
内容的提问来源于stack exchange,提问作者Rishaal
相关产品推荐
相关产品推荐

