树莓派蓝牙连接iPhone及数据传输:问题排查与实现方案
嘿,我之前帮朋友排查过类似的蓝牙配对问题,咱们一步步来解决你的困扰:
一、先搞定iPhone搜不到树莓派的问题
iPhone对蓝牙设备的发现逻辑比较严格,树莓派默认配置可能没满足它的要求,先从基础配置入手:
先确保蓝牙服务正常运行
有时候蓝牙服务会临时抽风,先重启试试:sudo systemctl restart bluetooth用这条命令确认状态,看到
active (running)就没问题:sudo systemctl status bluetooth开启可发现模式并设置设备类别
树莓派默认没设置正确的设备类别,导致iPhone识别不出来,而且可能没开可发现模式。用bluetoothctl工具来配置:- 打开蓝牙控制台:
bluetoothctl - 在控制台里依次输入这些命令:
# 开启可发现模式 discoverable on # 允许设备配对 pairable on # 设置设备别名,方便iPhone识别 set-alias "Raspberry Pi" # 设置设备类别为桌面计算机,解决Mac显示未知的问题 set-class 0x00010c
输完后输入
exit退出控制台。现在再用iPhone搜索蓝牙设备,应该能看到"Raspberry Pi"了。- 打开蓝牙控制台:
二、解决Mac显示设备类型未知的问题
刚才的set-class 0x00010c已经把树莓派的蓝牙类别设为桌面计算机了,你可以取消和Mac的配对,重新配对一次,设备类型就会正常显示了。
三、实现树莓派和iPhone的数据传输
常用的有两种方式,SPP适合常规文本/文件传输,BLE适合低功耗场景,我都给你讲讲:
方式1:SPP串行端口协议(推荐常规传输)
安装必要的工具和库
先装SPP相关的依赖:sudo apt-get update && sudo apt-get install bluez-tools python3-bluez开启SPP服务
编辑蓝牙配置文件,确保SPP功能开启:sudo nano /etc/bluetooth/main.conf找到
EnableSPP那一行,把注释去掉改成:EnableSPP = true按
Ctrl+O保存,Ctrl+X退出,然后重启蓝牙服务:sudo systemctl restart bluetooth树莓派端启动SPP监听
写个简单的Python脚本(比如叫spp_server.py)来接收数据:import bluetooth # 创建蓝牙socket server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM) port = 1 server_socket.bind(("", port)) server_socket.listen(1) print("等着iPhone连过来...") client_socket, address = server_socket.accept() print(f"搞定!已和{address}建立连接") while True: try: # 接收数据 data = client_socket.recv(1024) if not data: break print(f"收到数据:{data.decode('utf-8')}") # 可以给iPhone回个消息 client_socket.send("收到啦!".encode('utf-8')) except Exception as e: print(f"连接断了:{e}") break # 关闭连接 client_socket.close() server_socket.close()运行脚本:
python3 spp_server.pyiPhone端连接传输
你需要在App Store装个支持SPP的APP,比如「Serial Bluetooth Terminal」,打开后搜索树莓派,配对(PIN码一般是0000或1234),之后就能互相发消息了。
方式2:BLE低功耗蓝牙(适合小量数据)
如果你的树莓派是3代及以上(自带BLE),可以用这个方式,更省电:
- 安装BLE库:
sudo apt-get install python3-pip pip3 install bluepy - 写个简单的BLE服务器脚本,iPhone上用「LightBlue Explorer」这类APP就能连接,适合传传感器数据这类小数据量的场景。
四、踩坑提醒
- 要是还是搜不到:用
hciconfig看看蓝牙硬件状态,确保hci0是UP的;另外iPhone要开蓝牙,并且在可搜索状态。 - 配对失败:确保树莓派的
pairable模式是开的,配对时输入正确的PIN码,别输错了。
内容的提问来源于stack exchange,提问作者Sherif O.

