先说结论,避免后面绕:

  1. 要地图上的点 → 室内 AoA RTLS(标签 + 阵列网关 + 引擎 + 平台)。
  2. 要离车还有几米 → 车端 BLE 模组 + BCM。5.x 用 RSSI 标定;6.0 用 Channel Sounding(手机也得支持)。
  3. 这两条链路的天线、电源、认证都不同。蓝牙定位方案不要写成一颗 UART 模组“精度 0.3 m 全包”。

下文按工程笔记来写:数据流、事件、最小验证、踩坑。产品型号只当对照,不是广告页。

1. 需求先翻译成输出类型数字钥匙测距架构

项目里最常见的一句话是「做个蓝牙定位」。落到实现,蓝牙定位方案的输出只有两种:

输出 典型 API / 事件 你实际在维护什么
x, y, floorId, ts 轨迹、围栏、找设备 网关点位、引擎、标签电量
distanceBand / rssi / csMeters 迎宾、解锁、闭锁 天线、休眠、钥匙协议
if (needMapCoordinate) {
    deploy AoA RTLS;          // 医院 / 仓储
} else if (needUnlockDistance) {
    deploy BLE key module;    // PEPS / 数字钥匙
} else {
    // LE Audio / CarPlay 不是定位问题
}

蓝牙定位方案选型流程图:坐标走AoA RTLS,距离走RSSI或Channel Sounding

AoA 测的是到达角,引擎再解平面坐标;Channel Sounding 测的是两点距离(PBR + RTT)。把 CS 模组吊在天花板上当基站,或者把吸顶网关当数字钥匙天线,都属于类型用错。

室内完整业务背景可以看医院 RTLS;钥匙 5.3 量产路径看车规数字钥匙;CS 原理看测距与 BLE 6.0

2. 室内 RTLS:标签 → 网关 → 引擎 → 平台

2.1 逻辑架构

flowchart LR
  T1[Tag BLE ADV/AoA] --> GW[AoA Gateway<br/>BLE 5.4 / PoE]
  T2[Tag ...] --> GW
  GW -->|Ethernet| ENG[Locate Engine]
  ENG --> PL[RTLS Platform]
  PL --> HIS[HIS / WMS / MES]
  PL --> API[REST / WS]

室内蓝牙AoA RTLS架构:标签、网关、定位引擎、平台与业务API

网关要阵列天线和安装高度,标签要续航和形态,引擎要平面图标定。少任何一层,你拿到的都不是「定位」,只是 RSSI 列表。

覆盖初值(必须步测修正):

coverageRadius ≈ installHeight * 2    // K3 类网关文档经验值

2.2 上行数据长什么样

引擎推给平台的最小字段,建议先锁死,再谈 UI:

{
  "tagId": "T-1024",
  "floorId": "F2",
  "x": 12.4,
  "y": 3.1,
  "accuracyM": 0.6,
  "ts": 1774000000,
  "batteryPct": 81
}

围栏不要在标签里做,在平台做:

{
  "rule": "geofence.exit",
  "zoneId": "ward-3",
  "tagId": "T-1024",
  "action": "alarm"
}

2.3 最小验证(两周能跑通)

AOA-K3 是 1 网关 + 6 标签的评估包,用来验证「找得到」,不是全院施工图。

建议顺序:

  1. 平面图 + 层高(吸顶 / 侧挂一次定死)
  2. PoE 通网关,引擎能看到 ADV
  3. 标定 4~6 个已知点,看 accuracyM
  4. 再接业务 API,不要先写大屏

人员标签形态可参考 FSC-BP110;套件总览见 AoA Kit

3. 数字钥匙:手机 → 模组 → UART 事件 → BCM

3.1 逻辑架构

sequenceDiagram
  participant Phone
  participant MOD as BLE Module
  participant MCU as Host / BCM
  Phone->>MOD: ADV / Connect / Auth
  MOD->>MOD: RSSI or Channel Sounding
  MOD->>MCU: UART event (band/distance)
  MCU->>MCU: lock / welcome / start auth

数字钥匙测距架构:手机、BLE模组、UART事件与BCM执行

模组负责无线和测距相关事件,开锁逻辑在 BCM。不要在射频固件里写死门锁。

距离带是策略,不是空旷通信距离:

FAR      -> sleep / lock
MID      -> welcome
NEAR     -> unlock enable
INSIDE   -> start auth

RSSI 方案里这些带靠标定;CS 方案里带可以更稳,但实验室厘米数不能直接写 SOP。规范演进见蓝牙 6.3 信道探测

3.2 主机侧事件(示意)

下面是主机协议的示意,不是某颗模组的真实 AT 表。量产以规格书为准。

# 模组 -> MCU
EVT,NEAR,rssi=-52
EVT,CS,dist_cm=95,quality=ok
EVT,LEFT

# MCU -> 模组
CMD,SLEEP
CMD,OTA,...

3.3 两条量产路径(不要混成一颗料)

路径 适用 对照模组 先确认
BLE 5.3 + RSSI 手机生态仍是 5.x,先把无感进入跑通 FSC-BT3721V(EFR32BG22,UART/SPI,-40~+85℃) 静态电流、学习、多钥匙
BLE 6.0 + CS 要更稳距离带、规划抗中继 FSC-BT2004TV(CC2745R10-Q1,芯片 AEC-Q100) 手机是否支持 Channel Sounding

钥匙权限、分享、CCC 互操作在系统层,见 FeasyKey,不是测距模组能单独交付的。UWB 属于另一条第三代钥匙路径,和 AoA / CS 不是升级关系,见二代与三代数字钥匙

座舱音频不要并进这条 UART。LE Audio 走 IVI,见座舱 LE Audio

4. 测试用例(比再贴一张精度表有用)

室内:

[RTLS-01] 已知点标定,误差记到日志,不改发射功率碰运气
[RTLS-02] 围栏出界,告警时延
[RTLS-03] 标签掉电 / 遮挡,平台状态是否可解释

车侧:

[KEY-01] 口袋接近,NEAR 是否稳定
[KEY-02] 隔墙 / 邻车,不应 UNLOCK
[KEY-03] 离车 LEFT -> 闭锁,休眠电流
[KEY-04] 有条件:中继转发,CS 路径是否比 RSSI 更难被骗

Demo 空旷距离SOP 指标 分开存。蓝牙定位方案的验收应以用例通过率为准。

5. 踩坑

  1. 规格书把 AoA、CS、AEC-Q100、PoE 写在同一行。 蓝牙定位方案在这里被买成了三套系统。拆仓库:RTLS BOM / 钥匙 BOM。
  2. 用 RSSI 承诺亚米级全场轨迹。 RSSI 做钥匙分区可以;室内轨迹用 AoA。
  3. CS 只测了模组,没测手机。 对端不支持 CS,事件永远不会来。
  4. 网关点位按宣传覆盖半径一次铺完。 层高、金属货架、玻璃隔断会改方向图,必须步测。
  5. 把引擎算的 accuracyM 当成芯片指标对外承诺。 那是标定结果,换层高就变。

厂区已有 AoA、车队还要无感进入时,只在平台同步状态(人已进车间 / 车已授权),射频仍两套。

6. 小结

蓝牙定位方案在代码和 BOM 上要分开维护:

  • 室内:tagId + (x,y),硬件是网关阵列,验证包可以用 K3。
  • 车侧:distanceBand,硬件是车规模组;5.3 走 BT3721V,6.0 CS 走 BT2004TV。
  • 音频、UWB、云端钥匙生命周期各自有栈,不要塞进定位模组固件。

能跑通最小验证、用例能复现,再谈精度数字。数字是测出来的,不是从发射功率栏抄下来的。