跳到主要内容

蓝牙

扫描附近的低功耗蓝牙设备,检查信号强度和广播数据,浏览 GATT 服务和特征,并查看已连接外设的实时数据。

概览屏幕,包含扫描控件和按 RSSI 排序的附近设备。
每个设备行显示其名称、RSSI 和是否可连接。

概览

蓝牙工具使用 Apple 的 CoreBluetooth 框架作为 BLE(低功耗蓝牙)中心设备扫描附近的外设。它显示发现的每个设备,以及实时信号强度 (RSSI)、广播数据和连接状态。您可以连接到可连接的外设以浏览其 GATT 服务和特征、读取值、订阅通知并检查制造商数据。

目录


概览屏幕

概览屏幕是蓝牙工具的主登录视图。它包含搜索栏、带扫描控件的状态卡片和已发现设备的可滚动列表。

屏幕顶部的文本字段按名称过滤设备列表。输入查询会立即将列表缩小到广播名称或外设名称包含搜索文本的设备(不区分大小写)。当字段不为空时会出现清除按钮。

蓝牙状态卡片

状态卡片显示:

  • 蓝牙状态标签,显示当前无线电状态,带颜色编码:
    • 已开启(绿色)— 蓝牙已激活并准备好扫描。
    • 已关闭(红色)— 蓝牙无线电已关闭。
    • 未授权(橙色)— 用户已拒绝应用的蓝牙权限。
    • 不支持(红色)— 设备硬件不支持蓝牙。
    • 未知 / 重置中(灰色)— 系统仍在确定蓝牙状态。
  • 扫描控制按钮(仅在蓝牙已开启时可见):
    • 停止扫描(红色)— 停止当前扫描。
    • 开始扫描(绿色)— 开始扫描附近的外设。

当工具打开且蓝牙已开启时,扫描会自动开始。

设备列表

发现的设备显示在可滚动列表中,按 RSSI 排序(信号最强的在前)。当发现新设备或现有设备更新其广播数据时,列表会实时更新。

设备行

每个设备显示为一张卡片,包含:

  • 蓝牙图标包含在圆形徽章中。白色弧线覆盖圆圈,根据设备信号强度按比例填充(0-100%)。
  • 设备名称 — 广播的本地名称或外设名称。不广播名称的设备显示为 [No Name]
  • RSSI — 接收信号强度,以 dB 为单位(例如 RSSI: -43 dB)。
  • 左下角的状态指示器,显示以下之一:
    • 已连接(绿色)— 设备当前已连接。
    • 可连接(蓝色)— 设备广播表示可接受连接。
    • 服务: N — 设备广播的 GATT 服务数量(当存在服务但设备尚未连接时显示)。
    • (无标签) — 设备不可连接且不广播服务。
  • 右侧的尾部指示器
    • 如果设备已连接,显示绿色对勾图标。
    • 如果设备可连接,显示箭头 (>)(点击打开详情)。
    • 如果设备不接受连接,显示不可连接文本。

点击任意设备行可导航到设备详情屏幕

空状态

概览显示上下文相关的空状态:

  • 扫描中 — 当初始扫描正在进行且尚未发现设备时,显示带加载动画的放大镜图标。
  • 蓝牙已关闭 / 不支持 — 显示带斜线的蓝牙图标,显示当前状态并提示启用蓝牙。
  • 扫描已停止 — 当蓝牙已开启但扫描已手动停止且列表中没有设备时,显示蓝牙图标和开始扫描按钮。

设备详情屏幕

点击设备行会打开专用的详情屏幕。屏幕分为标题区域、信号强度仪表和三个内容选项卡。

标题栏与连接

标题栏包含:

  • 返回按钮 (< 设备) 返回概览屏幕。
  • 突出显示的设备名称
  • 连接状态指示器 — 彩色圆点旁边带标签:
    • 已连接(绿色)
    • 连接中(橙色)
    • 已断开(红色)
    • 断开中(橙色)
  • 连接 / 断开按钮(仅对可连接设备显示):
    • 连接(蓝色)— 发起 BLE 连接。建立连接时显示加载旋转器。
    • 连接中...(蓝色,禁用)— 在连接尝试期间显示。
    • 断开(红色)— 终止当前连接。

建立连接后,工具会自动发现所有 GATT 服务及其特征。可读特征会立即被读取,支持通知的特征会自动订阅。

信号强度仪表

信号强度部分提供设备无线电信号的详细实时视图:

  • 圆形仪表 — 从 0% 填充到 100% 的弧线,带角度渐变(红到橙到黄到绿)。当前 RSSI 值(以 dBm 为单位)显示在中心。

  • 大致距离 — 从 RSSI 值推导的人类可读估计值:

    RSSI 范围标签
    -30 到 -50 dBm非常近
    -51 到 -65 dBm
    -66 到 -80 dBm中等
    -81 到 -90 dBm
    低于 -90 dBm非常远
  • 信号条 — 基于信号强度百分比填充的 5 格指示器。

  • 信号质量 — 文本标签:优秀 (>80%)、良好 (>60%)、一般 (>40%)、较差 (>20%) 或很差 (<=20%)。

  • RSSI — 以 dBm 为单位的原始值。

  • TX 功率 — 以 dBm 为单位的发射功率级别(如果设备广播此信息)。此值表示距发射器 1 米处的信号强度,可用于估计距离。

  • 信号历史 — 最近 20 次 RSSI 读数的滚动条形图,带颜色编码(绿色 >= -60,黄色 >= -75,红色 < -75)。这有助于可视化信号随时间的稳定性。

信息选项卡

信息选项卡显示有关设备的一般信息,以键值行的形式组织:

字段描述
名称广播的或外设名称(或 [No Name])。
标识符CoreBluetooth 分配的外设 UUID。这是本地标识符,不是设备的实际 MAC 地址。
RSSI当前接收信号强度,以 dB 为单位。
TX 功率发射功率,以 dBm 为单位(仅在设备广播时显示)。
可连接设备是否接受 BLE 连接(是 / 否)。
状态当前连接状态(已连接、连接中、已断开、断开中)。
发现时间在此扫描会话期间首次发现设备的时间戳。
最后更新最近一次广播或 RSSI 更新的时间戳。

在键值行下方,当设备提供相应数据时,会出现两个额外部分:

  • 广播服务 — 设备在其广播数据包中包含的 GATT 服务 UUID 列表。已知的标准服务会在 UUID 旁边显示其人类可读名称(例如 180F (电池服务)180A (设备信息))。完整列表请参阅已识别服务
  • 制造商数据 — 来自广播的原始制造商特定数据,以十六进制字符串显示。前两个字节编码蓝牙 SIG 公司标识符(小端序)。

服务选项卡

服务选项卡仅在设备已连接时可用。它显示连接期间发现的完整 GATT 服务和特征树。

每个服务显示为可展开的行:

  • 彩色图标指示服务类别:
    • 蓝色 — 通用服务(通用访问 1800、通用属性 1801
    • 绿色 — 电池服务 (180F)
    • 橙色 — 设备信息 (180A)
    • 紫色 — 供应商特定服务(以 FE 开头的 UUID)
    • 灰色 — 其他 / 未知服务
  • 服务名称(已知服务从 UUID 解析)和原始 UUID 字符串。
  • 徽章显示属于该服务的特征数量。
  • 箭头在服务展开时旋转。

已识别服务

UUID服务名称
1800通用访问
1801通用属性
180A设备信息
180F电池服务
1812HID(人机接口设备)
1813扫描参数
1819位置和导航
181C用户数据
FE59Apple 通知中心

展开服务会显示其特征。每个特征行显示:

  • 彩色图标基于主要属性(紫色表示读+写,蓝色表示只读,绿色表示只写,橙色表示仅通知,其他为灰色)。
  • 特征名称(已知 GATT 特征从 UUID 解析)和原始 UUID 字符串。
  • 属性标签 — 每个支持属性的小型彩色标签:
    • 读取(蓝色)— 可以按需读取该值。
    • 写入(绿色)— 可以带确认地写入该值。
    • 无响应写入(浅绿色)— 可以不带确认地写入该值。
    • 通知(橙色)— 特征可以向中心设备推送更新。
    • 指示(浅橙色)— 类似通知但带确认。
    • 认证(紫色)— 特征需要经过认证的签名写入。
  • 眼睛切换按钮(当特征有值时显示)。点击它会显示特征的当前值,以多种格式显示:
    • 十六进制 — 原始字节序列。
    • 字符串 — UTF-8 解释(如果字节形成有效文本)。
    • 数值 — 基于字节长度的自动解释:
      • 1 字节:UInt8 值
      • 2 字节:UInt16 值
      • 4 字节:UInt32 值和 Float 值

已识别特征

UUID特征名称
2A00设备名称
2A01外观
2A04外设首选连接参数
2A05服务变更
2A19电池电量
2A23系统 ID
2A24型号字符串
2A25序列号字符串
2A26固件版本字符串
2A27硬件版本字符串
2A28软件版本字符串
2A29制造商名称字符串
2A2AIEEE 11073-20601 监管认证数据列表
2A50PnP ID

数据选项卡

数据选项卡显示来自已连接设备的实时解释数据。如果设备未连接,会显示带连接按钮的提示(对于可连接设备)或信息消息。

连接后,选项卡最多显示三张卡片:

  • 制造商数据 — 制造商特定的广播负载:

    • 制造商 ID — 从制造商数据的前两个字节(小端序)解析。已知 ID 包括 Apple (0x004C)、Microsoft (0x0006)、Samsung (0x0075)、Xiaomi (0x038F) 和 Bosch (0x01D7)。未知 ID 以十六进制显示(例如 ID: 0x1234)。
    • 原始数据 — 制造商数据字节的完整十六进制转储。
    • 字节可视化 — 水平条形图,每个条形代表一个字节。条形高度与字节值(0-255)成比例,提供数据的快速视觉指纹。
  • 特征值 — 所有具有可读值的特征列表。每个条目显示:

    • 特征名称(如果未知则显示 UUID)。
    • 解释的值(根据数据长度显示为字节、UInt16、UInt32/Float、UTF-8 字符串或十六进制)。
    • 对于最多 8 字节的值,显示小型字节条形图,条形按大小着色(蓝色 < 30%,绿色 < 60%,黄色 < 80%,红色 >= 80%)。
    • 支持通知的特征值会自动更新。
  • 连接信息 — 时间和信号元数据:

    • 发现时间 — 首次发现设备的时间,以及自发现以来的经过时间。
    • 最后更新 — 最近一次数据更新的时间,以及 TX 功率(如果可用)。

权限与要求

  • 蓝牙权限 — CoreBluetooth 要求用户授予蓝牙访问权限。如果权限被拒绝,Lirum 会显示权限屏幕,带有打开 iOS 设置的按钮,以便用户可以重新启用访问。
  • 蓝牙无线电 — 如果蓝牙已关闭,工具仍可访问,但扫描控件被禁用,空状态会提示用户打开蓝牙。在这种情况下不会显示权限门控。
  • 蓝牙权限由系统管理;没有明确的"请求权限"按钮。系统提示会在 CoreBluetooth 首次初始化时自动出现。

技术细节

  • 该工具使用 CBCentralManager 作为 BLE 中心设备。它扫描所有附近的外设 (scanForPeripherals(withServices: nil)),这意味着它会发现设备,无论它们广播什么服务。
  • RSSI(接收信号强度指示器)值通常范围从 -30 dBm(非常强,设备非常近)到 -100 dBm(非常弱,设备很远或被遮挡)。该工具使用公式 (RSSI + 100) / 70 将此范围标准化为 0-100% 的刻度。
  • 对于已连接设备,RSSI 每 2 秒使用 readRSSI() 轮询一次。噪声过滤器会抑制小于 2 dB 的更新以减少视觉抖动。
  • 连接时,工具调用 discoverServices(nil) 枚举所有 GATT 服务,然后对每个服务调用 discoverCharacteristics(nil, for:)。可读特征通过 readValue(for:) 自动读取,支持通知的特征通过 setNotifyValue(true, for:) 自动订阅。
  • TX 功率 (CBAdvertisementDataTxPowerLevelKey) 表示距发射器 1 米处的信号强度。当 TX 功率和 RSSI 都已知时,两者的差值可用于估计路径损耗和大致距离。
  • 制造商数据 (CBAdvertisementDataManufacturerDataKey) 遵循蓝牙 SIG 格式:前两个字节是小端序的公司标识符,后面是供应商特定的负载字节。
  • 信息选项卡中显示的外设标识符是 CoreBluetooth 在本地设备上分配的 UUID。它在同一设备的应用启动之间是稳定的,但不是实际的蓝牙 MAC 地址(iOS 不公开 MAC 地址)。

注意事项与限制

  • 您能看到的内容取决于每个外设广播的内容以及 iOS 通过 CoreBluetooth 公开的内容。一些设备广播的数据很少。
  • 许多设备显示为 [No Name],因为它们在广播数据包中不包含本地名称。
  • 大致距离估计是基于 RSSI 阈值的粗略指南。实际距离因环境、障碍物、天线方向和发射功率而有很大差异。
  • 并非所有可连接设备都能成功连接。有些需要先通过 iOS 设置配对,有些可能会拒绝来自未知中心设备的连接。
  • 经典蓝牙设备(非 BLE)通过 CoreBluetooth 不可见,不会出现在扫描结果中。
  • 由于多路径干扰、人体吸收和其他环境因素,RSSI 值可能会快速波动。信号历史图表有助于在视觉上平滑这些变化。

故障排查

  • 找不到设备 — 确保蓝牙已打开,在蓝牙屏幕上停留几秒钟,如果扫描已停止,请点击开始扫描
  • 权限被拒绝 — 点击权限屏幕上的打开设置按钮,在 iOS 隐私设置中重新启用 Lirum 的蓝牙访问。
  • 连接失败 — 设备可能需要先在 iOS 设置中配对,可能不支持第三方应用的连接,或者可能已移出范围。
  • 服务选项卡为空 — 某些设备不公开服务或延迟服务发现。连接后等待几秒钟。如果没有服务出现,设备可能不支持标准 GATT 配置文件。
  • 特征值仅显示十六进制 — 该工具尝试将值解释为 UTF-8 文本和常见数值类型。如果这些解释都不适用,则显示原始十六进制转储。