Python的bluetooth.discover_devices()无法检测iPhone 有其他方案吗?
PyBluez扫描失败原因
- 你使用的PyBluez库已停止维护多年,不兼容Windows 10+、macOS 10.14+等新版系统的蓝牙栈,扫描无结果是普遍问题
- 传统蓝牙扫描需要目标设备开启「可被发现」模式,iPhone默认不对外暴露普通蓝牙可见性,安卓默认仅在蓝牙设置页处于前台时可被扫描到
1.4米近距离设备检测可行方案
方案1:BLE(低功耗蓝牙)扫描(优先推荐)
BLE无需目标设备手动开启可见性,iPhone、安卓默认都会对外发送BLE广播,配合RSSI信号强度可以精准判断距离:
- 先安装适配性更好的bleak库:
pip install bleak - 参考测试代码:
import asyncio from bleak import BleakScanner # 提前校准:把目标手机放在1.4米处,多次测试得到对应的RSSI阈值,以下为参考值 DISTANCE_THRESHOLD_RSSI = -60 async def scan_ble_devices(): # 扫描时长可按需调整,一般3-5秒足够 devices = await BleakScanner.discover(timeout=5) print(f"共扫描到 {len(devices)} 个BLE设备") for dev in devices: print(f"设备名:{dev.name or '匿名设备'} | 地址:{dev.address} | 信号强度:{dev.rssi} dBm") if dev.rssi > DISTANCE_THRESHOLD_RSSI: print("* 判定该设备处于1.4米范围内") if __name__ == "__main__": asyncio.run(scan_ble_devices())
注:不同设备的蓝牙发射功率存在差异,使用前请用目标设备在1.4米位置实测调整
DISTANCE_THRESHOLD_RSSI阈值,可有效提升判断准确率。
方案2:同WiFi局域网下检测
如果笔记本和手机连接同一WiFi,可通过ARP扫描结合WiFi信号强度判断:
- 提前记录目标手机的MAC地址,扫描局域网内在线设备,匹配到对应MAC后查询WiFi网卡返回的信号强度,-55~-60dBm左右对应1.4米距离
- 也可以在笔记本开启热点,手机连接热点后直接读取热点管理界面的RSSI值做判断
方案3:有线连接兜底检测
如果允许有线连接,可直接判断设备连接状态:
- 安卓设备开启USB调试后,用
adb devices命令检测是否有设备连接,有线连接必然满足1.4米距离要求 - iPhone连接USB后可通过系统设备列表直接检测到连接状态
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

