怎么用脚本获取蓝牙设备列表

wen 实用脚本 2

从入门到实战的完整指南

目录导读

  1. 引言:为什么需要脚本化蓝牙设备扫描?
  2. 核心原理:蓝牙扫描背后的技术机制
  3. 主流脚本方案对比:Python vs PowerShell vs Shell
  4. 实战:Python脚本获取蓝牙设备列表(完整代码)
  5. 实战:Windows PowerShell脚本获取蓝牙设备列表
  6. 实战:Linux Shell脚本(基于bluetoothctl)
  7. 常见问题与问答
  8. 优化建议与SEO关键词布局

引言:为什么需要脚本化蓝牙设备扫描?

在日常开发、物联网调试、自动化测试或智能家居场景中,手动打开蓝牙设置查看设备列表往往效率低下,通过脚本获取蓝牙设备列表,可以:

怎么用脚本获取蓝牙设备列表

  • 自动化检测周边蓝牙设备(如传感器、耳机、手环)
  • 集成到监控系统中实时追踪设备状态
  • 批量管理连接与配对流程

本文将从零开始,教你使用三种主流脚本语言实现蓝牙设备列表扫描,并涵盖Windows、macOS、Linux三平台。

核心原理:蓝牙扫描背后的技术机制

脚本获取蓝牙设备列表的本质是调用操作系统的蓝牙协议栈API或命令工具,不同平台依赖的底层技术不同:

  • Windows:通过Windows.Devices.Bluetooth命名空间的PowerShell cmdlet,或调用bthprops.cpl(控制面板)的COM对象。
  • macOS:依赖IOBluetooth框架,可通过system_profiler命令或BlueUtil工具。
  • Linux:最常用bluez协议栈,通过hcitoolbluetoothctldbus接口获取。

关键点:脚本需要具有对应权限(如管理员/root),否则可能扫描失败。

主流脚本方案对比:Python vs PowerShell vs Shell

脚本类型 跨平台性 依赖 适用场景
Python 跨平台(需安装库) PyBluez、bleak 复杂逻辑、数据清洗
PowerShell Windows原生 无(Win10+内置) 系统管理、快速集成
Shell脚本 Linux/macOS bluez-utils 轻量级、嵌入式设备

实战:Python脚本获取蓝牙设备列表(完整代码)

Python凭借bleak库(异步、跨平台)成为最佳选择,以下代码可扫描BLE(低功耗蓝牙)设备列表:

import asyncio
from bleak import BleakScanner
async def scan_bluetooth_devices(timeout=10):
    print("正在扫描蓝牙设备...")
    devices = await BleakScanner.discover(timeout=timeout)
    if not devices:
        print("未发现任何蓝牙设备。")
        return
    print(f"发现 {len(devices)} 个设备:")
    for device in devices:
        print(f"  名称:{device.name or '未知'}")
        print(f"  MAC地址:{device.address}")
        print(f"  RSSI信号:{device.rssi} dBm")
        print("-" * 30)
if __name__ == "__main__":
    asyncio.run(scan_bluetooth_devices())

运行要求
pip install bleak
(Windows/Linux均需开启蓝牙硬件)

实战:Windows PowerShell脚本获取蓝牙设备列表

在Windows 10/11中,无需第三方工具:

# 方式一:使用Get-PnpDevice(仅显示已配对设备)
$pairedDevices = Get-PnpDevice -Class Bluetooth | Where-Object {$_.Status -eq "OK"}
$pairedDevices | Select-Object FriendlyName, Class, Status
# 方式二:调用Windows.Devices.Bluetooth API(可扫描周围设备)
Add-Type -AssemblyName System.Runtime.WindowsRuntime
$asTaskGeneric = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object { $_.Name -eq 'AsTask' -and $_.GetParameters().Count -eq 1 -and $_.GetParameters()[0].ParameterType.Name -eq 'IAsyncOperation`1' })[0]
Function Await($WinRtTask, $ResultType) {
    $asTask = $asTaskGeneric.MakeGenericMethod($ResultType)
    $netTask = $asTask.Invoke($null, @($WinRtTask))
    $netTask.Wait(-1) | Out-Null
    $netTask.Result
}
$selector = [Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementWatcher]::new()
$watcher = $selector
Register-ObjectEvent -InputObject $watcher -EventName "Received" -Action {
    $eventData = $EventArgs
    $deviceName = $eventData.BluetoothLEAdvertisement.LocalName
    if ([string]::IsNullOrEmpty($deviceName)) { $deviceName = "未知设备" }
    Write-Host "发现: $deviceName (MAC: $($eventData.BluetoothAddress.ToString('X12')))"
}
$watcher.Start()
Start-Sleep -Seconds 5
$watcher.Stop()

注意:PowerShell方式二需要管理员权限,且仅扫描BLE设备。

实战:Linux Shell脚本(基于bluetoothctl)

在Ubuntu/Debian等系统,使用bluetoothctl工具:

#!/bin/bash
# 扫描蓝牙设备并输出列表
echo "启动蓝牙扫描(持续5秒)..."
bluetoothctl -- scan on &
SCAN_PID=$!
sleep 5
bluetoothctl -- scan off > /dev/null 2>&1
echo "已发现的设备列表:"
bluetoothctl devices | while read -r line; do
    mac=$(echo "$line" | awk '{print $2}')
    name=$(echo "$line" | cut -d' ' -f3-)
    echo "  MAC: $mac  名称: $name"
done
# 可选:显示信号强度(需安装bluez-tools)
if command -v hcitool &> /dev/null; then
    echo -e "\n信号强度详情:"
    hcitool rssi "$mac" 2>/dev/null || echo "无法获取RSSI"
fi

前置条件sudo apt install bluez bluez-tools,并确保蓝牙服务运行。

常见问题与问答

Q1:脚本扫描不到任何设备,怎么办?

A

  1. 检查蓝牙硬件是否启用(Windows设备管理器/BT开关;Linux rfkill list
  2. 确保脚本拥有管理员/root权限(Linux加sudo,PowerShell以管理员运行)
  3. 设备是否处于可发现模式?部分蓝牙设备(如AirPods)需进入配对模式。

Q2:如何区分经典蓝牙与BLE设备?

A

  • Python的bleak仅扫描BLE设备;若要扫描经典蓝牙(如音箱),需使用PyBluez(Linux)或Windows的32feet库。
  • Linux可通过hcitool scan(经典)和hcitool lescan(BLE)区分。

Q3:脚本获取到的MAC地址是否可以持久化?

A
现代蓝牙设备(尤其是iOS/Android设备)会随机化MAC地址以保护隐私,脚本捕获的MAC可能每次扫描都不同,建议通过设备名称或服务UUID进行识别。

Q4:如何将结果输出到文件或数据库?

A
在Python中可直接open("devices.txt", "w")写入;PowerShell使用| Out-File results.csv;Shell使用> devices.log

优化建议与SEO关键词布局

为提升文章在搜索引擎(如必应、谷歌)的排名,本文已自然融入以下关键词:

  • 蓝牙设备列表获取脚本
  • Python扫描蓝牙设备
  • PowerShell蓝牙扫描
  • Linux蓝牙命令行
  • BLE设备发现脚本

后续可补充:

  • 连接/配对自动化脚本
  • 跨平台统一接口封装(如asyncio + bleak
  • 错误处理与重试机制

通过本文,你应能独立实现脚本化蓝牙设备扫描,不同平台各有优劣,但Python以其跨平台性和生态优势成为首选,如果你有更复杂的场景(如过滤特定设备、持续监控),欢迎在评论区交流。

抱歉,评论功能暂时关闭!