macOS本身不提供原生终端命令直接扫描BLE设备,但可通过bleak(Python库)或blueutil(系统级工具)实现:前者专注BLE协议栈,适合开发调试;后者基于CoreBluetooth,响应快、兼容稳,适合日常管理。
macos 本身不提供原生终端命令直接扫描蓝牙低功耗(ble)设备,但可通过 bleak(python 工具)或 blueutil(系统级工具)实现可靠扫描。前者专注 ble 协议栈,适合开发与调试;后者基于 macos 底层框架,响应快、兼容性稳,适合日常管理。
用 bleak 扫描 BLE 设备(推荐开发者使用)
bleak 是跨平台的 Python BLE 库,对 macOS 的 CoreBluetooth 支持成熟,能发现广播中的 BLE 外设(如传感器、手环、信标),并获取服务、特征等详细信息。
- 安装:运行
pip install bleak console(若需最新功能,可用pip install https://github.com/hbldh/bleak/archive/refs/heads/develop.zip) - 权限:进入「系统设置 > 隐私与安全性 > 蓝牙」,勾选你使用的终端(如 Terminal 或 iTerm)
- 快速扫描示例:
python3 -c " from bleak import BleakScanner import asyncio async def run(): devices = await BleakScanner.discover() for d in devices: print(f'{d.name or \"Unknown\"} | {d.address} | RSSI: {d.rssi}') asyncio.run(run()) " - 注意:bleak 不依赖设备是否“可配对”,只要它在广播(advertising),就能被发现;但部分 iOS 设备默认关闭广播,需配合专用 App 启用
用 blueutil 扫描附近所有蓝牙设备(含 BLE,适合通用场景)
blueutil 的 --inquiry 命令可扫描处于“可被发现”状态的蓝牙设备(包括支持 BLE 的双模设备),虽不解析 GATT 结构,但响应快、无需 Python 环境,适合快速定位设备存在性与信号强度。
- 确保已安装:
brew install blueutil;首次运行需在「系统设置 > 隐私与安全性 > 辅助功能」中授权终端 - 执行扫描:
blueutil --inquiry,输出包含设备名、MAC 地址、信号强度(RSSI) - 过滤高信号设备(如只看 -40dBm 以上):
blueutil --inquiry | awk '$NF > -40' - 限制扫描时长(避免过久):
timeout 10s blueutil --inquiry(macOS 自带 timeout 命令)
补充:验证 BLE 广播是否生效的底层方法
当 bleak 或 blueutil 扫不到某 BLE 设备时,可能是设备未广播、广播间隔过长,或 macOS 蓝牙模块异常。可组合以下命令交叉判断:
- 确认蓝牙已启用:
blueutil -p(返回 1 表示开启) - 检查蓝牙服务是否活跃:
pgrep -f bluetoothd;若无输出,运行sudo killall blued重启 - 查看系统级蓝牙日志片段(实时监听):
log stream --predicate 'subsystem == "com.apple.bluetooth" && eventMessage contains "advertis"' --info(需 macOS 12+)


















