基于 LoRaWAN 的蓝牙室内定位系统
介绍
概述
室内定位是许多行业的常见挑战。虽然像 UWB 这样的高精度系统已经存在,但它们往往成本高且部署复杂。本方案通过结合两种强大的无线技术,提供了一种灵活且具性价比的替代方案:使用 Bluetooth Low Energy (BLE) 进行位置感知,使用 LoRaWAN 实现远距离、低功耗数据传输。
该系统基于 SenseCAP T1000 Tracker 构建,支持两种不同的定位模式,可根据需求在精度和电池寿命之间进行平衡:
-
高精度跟踪(三角定位): 当追踪器检测到来自三个或更多 BLE Beacon 的信号时,它可以在地图上计算出自身精确的 (x, y) 坐标。此模式非常适合用于资产或人员移动轨迹跟踪,可定期或在发生移动时提供精确位置更新。
-
基于区域的定位(接近): 当追踪器仅在一个或两个 Beacon 的覆盖范围内时,它会根据距离最近的 Beacon 来判断自身位置。此模式非常适合更简单的场景,例如自动签到、确认资产是否在指定房间内,或通过降低上报频率来节省电量。
通过同时支持这两种方式,本方案为各种室内跟踪应用提供了一个多功能且易于部署的系统,从简单的在场检测到更精细的基于坐标的监控都能胜任。
让该系统最快运行起来的方式,是在 SenseCraft Solution 平台上使用 校园级 BLE Beacon 定位系统。
点击 Deploy,选择套件规模(Starter / Standard / Enterprise),SenseCraft Solution 会引导你完成每一步——为你安装定位应用(无需手动输入 Docker 命令),并指导完成 Beacon、网关和追踪器的配置。
访问我们的 室内与室外一体化定位 套装页面,获取实现本方案所需的全部产品。
关键特性与优势
- 高性价比且可扩展:利用价格亲民的 BLE Beacon,无需在每个房间都部署昂贵的网关。
- 远距离数据传输:单个 LoRaWAN 网关即可覆盖整栋建筑或整个校园,大幅降低基础设施成本。
- 即时 SOS 告警:追踪器内置一键求救按钮,按下后会立即通过 LoRaWAN 发送 SOS 告警,实现快速应急响应。
- 智能电源管理:通过内置加速度计,追踪器可以仅在检测到移动时上报位置,其余时间只发送周期性的“心跳”信号。这样可显著延长电池寿命,在许多资产跟踪应用中,优化配置后电池续航可长达 6 个月。
- 部署简单:部署 BLE Beacon 和 LoRaWAN 网关的过程十分简单,可快速让你的定位系统上线运行。
- 开箱即用:几分钟内即可让整个系统运行起来——在 SenseCraft Solution 平台上一键部署,或在自建环境中通过一条 Docker 命令完成。该应用也完全开源,方便你进行自定义开发。
应用场景
应用场景
本方案非常适合各类基于区域的跟踪与安全应用:
校园与学校安全
为学生和教职员工配备可穿戴追踪器。内置的 SOS 按钮可让他们在校园任意位置一键发送紧急告警及其最后已知位置,带来安心保障并实现更快速的应急响应。
资产管理
跟踪贵重资产的位置,包括室内和室外(例如停车场中的车辆)。可以将追踪器配置为仅在发生移动时上报,从而节省电量,同时在出现未经授权的移动时及时告警。
自动签到与人员管理
通过调节 BLE Beacon 的信号强度,你可以为办公室或养老院创建一个“签到”区域。当佩戴追踪器的人进入该区域时,其在场信息会被自动记录。
系统架构
该系统基于一个简单而强大的原理运行:移动追踪器监听固定 Beacon 发出的信号,并将其“听到”的信息上报到中央服务器。

前置条件
主要组件包括:
- BLE Beacon:这些是安装在已知位置(例如房间入口、关键区域)的微型固定发射器,它们会持续广播一个唯一 ID。
- SenseCAP T1000 Tracker:这是安装在你希望跟踪的资产或人员上的移动设备。它会扫描附近的 BLE Beacon,并识别信号最强的那个。
- LoRaWAN 网关:追踪器通过 LoRaWAN 向网关发送包含最近 BLE Beacon ID 的数据包。
- 网络与应用服务器:网关将数据转发到 LoRaWAN 网络服务器(SenseCraft Data),然后再由其路由到应用服务器。应用服务器保存 Beacon ID 与其真实物理位置的映射,从而可以确定追踪器的位置(例如:“追踪器 #58 靠近 Beacon #12,位于 3 号会议室”)。
在开始之前,请确保你具备以下条件:
- 一台 SenseCAP T1000 Tracker
- 一个或多个 BLE Beacon
- 一台已连接互联网的 LoRaWAN 网关
- 一台已安装 Docker 的服务器或电脑
SenseCAP T1000 Tracker
具备 BLE 扫描能力的 LoRaWAN® 移动追踪器
BLE Beacon 检测:支持 BLE 5.1,实现精确的室内与室外定位。
广域网络:支持 LoRaWAN® Class A(v1.0.4) 连接,实现远距离、低功耗通信。
运动检测:内置加速度计,可实时感知运动与静止状态。
紧急按钮:独立 SOS 按钮,一键触发紧急警报。
BLE Beacons
常规蓝牙广播
协议兼容:Bluetooth® LE 5.0 | 完全支持 iBeacon 和 Eddystone 格式。
灵活部署:可配置发射功率,以调整覆盖半径。
持久续航:在标准设置下电池寿命最长可达 2 年。
安装便捷:自带背胶,可轻松安装在墙面或其他表面。
广播范围:室外最远 75 米,室内开阔区域最远 120 米。
SenseCAP M2 Multi-Platform Gateway
LoRaWAN® 网络基础设施
广覆盖:室内覆盖半径最长可达 2 km,确保信号稳定。
海量连接:支持超过 200 台设备同时接入,性能优异。
多种回传:提供包括以太网、Wi-Fi 和 4G 在内的多种网络回传选项。
一体化方案:内置本地 LoRaWAN 服务器能力,简化网络部署与管理。
入门指南
部署该系统有两种方式 —— 为 步骤 2 选择其中一种:
- 推荐 —— SenseCraft 方案(引导式): 打开解决方案页面,点击 Deploy,并选择套件规模。SenseCraft 方案会为你安装定位应用,并从头到尾引导硬件搭建。
- 手动 —— 使用 Docker 自建部署: 更倾向于自行运行?请使用 步骤 2 中描述的 Docker 手动部署路径。
无论采用哪种方式,每次部署都遵循相同的五个阶段:
- 部署 Beacon:在整个设施的关键位置放置 BLE Beacon。创建一份地图或列表,记录每个 Beacon 的唯一 ID 及其物理位置(例如,
Beacon_ID_01: "Main Entrance",Beacon_ID_02: "Warehouse Zone A")。 - 设置网关:将 LoRaWAN 网关连接到互联网,并将其配置为把数据包转发到你选择的 LoRaWAN 网络服务器。
- 部署应用程序:安装现成的 SenseCraft 室内定位应用程序——可以通过 SenseCraft Solution 一键部署,或使用 Docker 自建部署(参见 Step 2)。无需自定义后端代码。
- 配置追踪器:激活 SenseCAP T1000,并将其接入你的 LoRaWAN 网络服务器。确保其被配置为 BLE 扫描模式。
- 可视化:当追踪器在设施中移动时,它会上报最近的 Beacon,你的应用程序可以在仪表盘或地图上显示其位置。
步骤 1:设置你的硬件
首先,你需要在场地中部署物理设备。
1a. 部署 Beacon
如需完整技术规格,请参考 BC01 室内蓝牙 Beacon 文档。
首先在场地内的关键位置放置 BLE(Bluetooth Low Energy,低功耗蓝牙)Beacon——例如主入口、仓库和办公区域。
请参考下方视频,获取将 Beacon 信息添加到系统中的分步指南。 你也可以查看 Tips 部分以获得更多帮助。
BC01 Beacon 参数快速查看
| 参数 | 默认值 |
|---|---|
| UUID | FDA50693-A4E2-4FB1-AFCF-C6EB07647825 |
| Major | 10001 |
| Minor | 19641 |
| Measured power | -59dBm |
| Tx Power | -30 - +4dBm,默认 0dBm |
| Adv Interval | 100ms~10s,默认 500ms |
| Password | seeed123(字母和数字) |
| Device Name | BC01(1-7 个字符) |
| Soft Reboot | seeed123(与密码相同) |
1b. 设置网关
启动你的 LoRaWAN 网关 并将其连接到互联网。
接下来,根据你所使用的网络服务器,按照下方说明进行操作。
- SenseCraft Data
- ChirpStack(本地 LoRaWAN 服务器)
默认情况下,LoRaWAN 网关会将数据转发到 SenseCraft Data 平台(原 SenseCAP Portal)。
- 按照官方用户手册操作,确保你的网关已在线并关联到你的账号。
- 一旦连接验证通过,你就可以继续下一步(步骤 2)。
如果你使用的是与网关集成的自建 ChirpStack 服务器,你需要重定向网关数据并准备解码脚本。
- 配置网关: 按照本指南将网关的上行数据重定向到 ChirpStack。
- 下载解码脚本: ChirpStack 需要解码器来解析来自 T1000 追踪器的数据。请下载下方脚本,以便在后续配置步骤中使用。
- 下载 T1000 解码脚本 注意: 此脚本应添加到 ChirpStack Application Settings 中,而不是添加到网关设备本身。
步骤 2:安装定位应用程序
定位应用程序是一个轻量级 Web 服务(单个 Docker 容器),通过 MQTT 接收追踪器数据并渲染实时地图。它有两种安装方式——选择适合你的方式即可。
如果你想先体验界面,可以查看在线演示。
- SenseCraft Solution(推荐)
- 手动(Docker)
最简单的方式——无需终端,无需手动输入命令。
- 打开 园区级 BLE Beacon 定位系统 解决方案页面。
- 点击 Deploy 并选择你的套件规格(Starter / Standard / Enterprise)。
- SenseCraft Solution 会为你安装定位应用程序——可以安装在本地电脑,或通过 SSH 安装到远程服务器——并在服务就绪后自动打开仪表盘。
当仪表盘打开后,继续前往 Step 3 以连接你的 LoRaWAN 数据源。
更倾向于自建?在你的服务器上打开终端并运行以下命令:
docker run -p 5173:5173 \
--name indoor-positioning \
--restart unless-stopped \
-v ./db:/app/db/ \
-v ./config:/app/server/config/json \
-v ./uploads:/app/uploads \
-d seeedcloud/sensecraft-indoor-positioning
💡 注意:如果在 Windows 上运行该命令,请使用 PowerShell 而不是 CMD 终端。 中国大陆用户可以使用 chsrc 切换 Docker 镜像源以加快拉取速度。
该命令的作用:
- 下载并启动 SenseCraft 室内定位应用程序容器。
-p 5173:5173使 Web 仪表盘可以通过端口5173访问。- 挂载本地目录:
/app/db/→ 存储数据库和地图。/app/server/config/json→ 存储配置文件。/app/uploads→ 存储上传的文件。
-d以后台方式运行应用程序。
当应用程序运行后,在浏览器中访问:
👉 http://<your_server_ip>:5173
此时你应该能看到运行在服务器上的 SenseCraft 室内定位仪表盘。
- Username:
admin - Password:
83EtWJUbGrPnQjdCqyKq
步骤 3:配置应用程序
3a. 运行时配置(连接到 LoRaWAN)
使用此设置将应用程序连接到你的 LoRaWAN 网络服务器并接收追踪器数据。 应用程序可以同时连接到 SenseCraft Data 和 本地 ChirpStack 服务器。
在仪表盘中启用一个或两个 MQTT 数据源:
连接到 SenseCraft Data
- 打开 SenseCAP OpenStream MQTT。
- 输入你的 Username 和 API Key——从 Data OpenStream API 快速入门指南中获取。
连接到 ChirpStack
- 打开 ChirpStack MQTT。
- 输入服务器地址和Application ID——MQTT 主题会自动填充。你可以在 ChirpStack 应用页面找到 Application ID。
注意:
{clientID}字段是自动生成的,请不要编辑。
重要: 每次修改后,请重启 Docker 容器以使更新生效。
其他设置
这些选项可以随时更改(无需重启):
- Authentication – 更新仪表盘登录凭据。
- Area Positioning – 当 Beacon 信号较弱或稀疏时,估算追踪器的大致位置。
- Tracker Access Control – 限制哪些设备可以被定位(对所有设备开放或基于白名单)。
- Webhook – 通过 HTTP POST 将位置信息推送到你的服务。
3b. 地图和 Beacon 配置
点击 Create 创建你的第一张地图。
在此面板中上传你的地图数据。 目前,演示版本仅支持导入包含折线实体的 类 GeoJSON 格式 文件。 下面是一个示例 JSON 模板供参考:
{
"map": {
"width": 29.53000000000094,
"height": 22.212853765822828,
"entities": [
{
"type": "polyline",
"points": [
[12.894968342021272, 17.07477114091087],
[12.894968342021272, 17.114771140910868]
],
"closed": false
},
{
"type": "polyline",
"points": [
[12.944968342021284, 17.114771140910868],
[12.894968342021272, 17.07477114091087]
],
"closed": false
}
]
},
"beacons": {}
}
此 JSON 使用基于坐标的折线(polyline)定义了一个二维楼层布局,用于表示墙体或边界等地图元素。 当前演示版本不支持其他几何类型。
- 添加 Beacon
在 Beacons 部分,添加每个 Beacon 的 MAC 地址、ID 和位置。 你可以使用在步骤 1a中创建的列表,直接将它们放置在已上传的地图上。
- 调整环境因子(可选)
通过调整信号强度(RSSI)转换为距离的方式,微调定位精度。
- 默认值(约 2.0)在开阔区域表现良好。
- 对于复杂的室内环境,可尝试 1.8 到 4.0 之间的数值。
- 先使用默认设置,如有需要再进行调整。
步骤 4:激活并可视化你的 Tracker
最后一步是打开你的 Tracker,并在地图上查看它。
- 激活 SenseCAP T1000 Tracker 并将其接入你的 LoRaWAN 网络服务器。确保网关在线,并且 Tracker 设备已在 LNS 服务器上“注册”。详情请查看步骤 1b。
- 确保其设置为 BLE 扫描模式,以便能够检测到 Beacon。可参考下方视频获取帮助。
- 可视化: 当 Tracker 在你的场地中移动时,它会检测最近的 Beacon 并上报其位置。你将在仪表盘的地图上看到其图标在移动。
在使用 ChirpStack 时,选择 Other Platform。
在使用 SenseCraft Data 时,保留默认平台设置(The Things Network 使用 SenseCAP)。
应用功能概览
功能 1:数据推送(Webhook & WebSocket)
你可以通过两种方式从系统获取实时数据:
- Webhook: 如配置中所述,它会将数据推送到你提供的 URL。
- WebSocket: 对于实时应用,你可以使用 Basic HTTP Authentication 连接到
/ws端点。sos、tracker_update(三角定位)和tracker_location_approximate(区域定位)的数据格式在原始文档提供的 JSON 示例中有详细说明。
数据格式
- SOS 告警
- 三角定位/多边定位
- 区域定位
{
"type": "tracker_sos",
"data": {
"2CF7F1C0530004AD": {
"timestamp": 1756967508000,
"sos": 0
}
}
}
{
"type": "tracker_update",
"data": {
"2CF7F1C0530003BD": {
"trackerId": "2CF7F1C0530003BD",
"timestamp": 1756967455550,
"position": {
"x": 11.1,
"y": 12.3
},
"last_detected_beacons": [
{
"macAddress": "C3:00:00:56:4B:5D",
"major": null,
"minor": null,
"name": "Unknown Beacon",
"rssi": -79,
"txPower": null,
"configured_x": null,
"configured_y": null
},
{
"macAddress": "C3:00:00:3E:7D:AA",
"major": null,
"minor": null,
"name": "Unknown Beacon",
"rssi": -80,
"txPower": null,
"configured_x": null,
"configured_y": null
},
{
"macAddress": "C3:00:00:13:3C:99",
"major": null,
"minor": null,
"name": "Unknown Beacon",
"rssi": -80,
"txPower": null,
"configured_x": null,
"configured_y": null
}
],
"position_history": [],
"map": "10 Floor",
"sos": 2
}
}
}
{
"type": "tracker_location_approximate",
"data": {
"2CF7F1C0530004AD": {
"trackerId": "2CF7F1C0530004AD",
"timestamp": 1756967098851,
"radius": 5.248074602497725,
"last_detected_beacons": [
{
"txPower": -59,
"rssi": -77,
"name": "corner",
"configured_x": 32.41,
"configured_y": 21.26,
"macAddress": "C3:00:00:56:4B:59"
}
],
"map": "10.5 Floor",
"sos": 0
}
}
}
功能 2:两种定位模式
系统支持两种定位方式:
- 三角定位: 当 Tracker 检测到三个或更多 Beacon 时,会计算出精确的 (x, y) 坐标。这是默认且最精确的模式。
- 邻近(区域定位): 如果你启用了该功能,而 Tracker 只能检测到一个 Beacon,它会将自身位置上报为在计算半径内“接近”该 Beacon。此模式有助于确保所有区域都有覆盖。
三角定位
| 三角定位 | 三角定位(SOS) |
|---|---|
区域定位
| 区域定位 | 区域定位(SOS) |
|---|---|
功能 3:查看告警历史
你可以通过点击地图上的 Tracker 图标,查看其告警历史(例如 SOS 按钮触发记录)。系统会记录每一次新的告警,并在告警未解除前持续推送通知。
功能 4:按 Beacon UUID 过滤
你可以根据 Tracker 关联的 Beacon UUID,在地图上过滤显示的 Tracker。这可以更有针对性地监控特定区域或资产,并且其取值设计为不易被篡改。
参考与资源
- 使用 SenseCraft 方案部署:校园级 BLE Beacon 定位系统 — 一键引导式部署
- Docker 镜像:seeedcloud/sensecraft-indoor-positioning - Docker Hub
- 源代码:Solution_IndoorPositioning_H5 - GitHub
- 在线演示站点:IndoorPositioning
提示
以下是一些有用的提示,可帮助你更高效地部署和配置 Beacon:
1. 记录 Beacon 信息
强烈建议将每个 Beacon 的唯一 MAC 地址与其安装位置一并记录下来。
这在软件配置步骤中将至关重要,并帮助你在映射或排障时轻松识别和选择正确的 Beacon。
| MAC 地址 | 位置 | Beacon ID |
|---|---|---|
| c30000564b31 | 主入口 | 01 |
| c30000564b32 | 仓库 A 区 | 02 |
| c30000564b33 | 角落办公室 | 03 |
2. 为所有 Beacon 使用统一的 UUID
为了便于管理,你可以使用 SenseCraft app 为所有 Beacon 分配统一的 UUID。
这样可以确保你的 Tracker 只监听你自己的设备,并忽略附近的其他 Beacon。
更多详情请查看功能 4:按 Beacon UUID 过滤。
3. 选择稳定的安装位置
将 Beacon 安装在固定、开阔且无遮挡的区域,以确保稳定的蓝牙信号。
避免将其放置在可能造成干扰的金属表面、配电箱或 Wi-Fi 路由器附近。
4. 标记并固定每个 Beacon
贴上与记录表一致的可见标签(例如,Beacon-01、Beacon-02),以避免在维护过程中产生混淆。
确保设备被牢固安装,以防止意外移位。
5. 验证信号覆盖范围
在最终确定安装位置之前,使用 BLE 扫描应用或配置工具测试信号覆盖范围,以确保在目标区域内能够被持续检测。
6. 快速添加或调整 Beacon 数据
如果你使用的是 类 GeoJSON 的配置文件,你也可以直接编辑导出的地图文件,以快速添加或调整 Beacon 数据,然后重新导入到应用中。
{
"map": {
"width": 29.53000000000094,
"height": 22.212853765822828,
"entities": [
{
"type": "polyline",
"points": [
[12.894968342021272, 17.07477114091087],
[12.894968342021272, 17.114771140910868]
],
"closed": false
},
{
"type": "polyline",
"points": [
[12.944968342021284, 17.114771140910868],
[12.894968342021272, 17.07477114091087]
],
"closed": false
}
]
},
"beacons": {
"beacon-01": {
"uuid": "FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
"major": 10001,
"minor": 19641,
"x": 26.38,
"y": 4.4,
"txPower": -59,
"displayName": "Corner",
"macAddress": "C3:00:00:58:4B:38",
}
}
}
提示:当你需要一次性添加多个 Beacon,或在控制台之外精细调整其坐标时,直接编辑 JSON 会非常有用。
常见问题
为什么我的追踪器没有上报位置信息?
- 可能原因: LoRaWAN 连接可能存在问题。
- 解决方案: 检查 LoRaWAN 网关的状态,确保其在线并已连接。同时,确认追踪器的 Device EUI 已在网络服务器上正确注册。
为什么追踪器的位置不准确?
- 可能原因: 你的 BLE Beacon 的放置方式可能导致干扰或信号覆盖较弱。
- 解决方案: 尝试调整 Beacon 的发射功率。你也可能需要重新安放它们,以减少来自墙体或机械设备的信号遮挡。
为什么追踪器的电池耗电这么快?
- 可能原因: 上报频率设置过高,导致设备比实际需要更频繁地发送数据。
- 解决方案: 优化运动检测设置,仅在追踪器移动时上报。你也可以增加上报间隔(位置更新之间的时间)以节省电量。
为什么位置信息缺失或没有显示?
- 可能原因: 数据库或 API 可能存在问题,通常与数据载荷的解析方式有关。
- 解决方案: 首先确认应用服务器上的载荷解码器是否正确且工作正常。如果解码器无误,请检查应用服务器日志中是否存在错误或连接问题。
为什么 SOS 警报没有被及时接收?
- 可能原因: LoRaWAN 网络可能拥塞,或者设备类别不适合用于紧急消息。
- 解决方案: 对于 SOS 警报这类对时间敏感的应用,请确保你的追踪器被配置为使用 Class C 模式。这会让设备的接收机持续开启,从而可以立即接收来自服务器的消息。
如何调整 BC01 Beacon 的广播间隔和发射功率?
你可以使用 SenseCraft 应用来配置 BC01 Beacon。
- 从 Google Play Store 或 Apple App Store 安装 SenseCraft 应用。
- 打开应用,并在手机上启用蓝牙。
- 扫描附近的 Beacon,并选择你希望配置的那一个。
- 输入默认密码“seeed123”以访问设置。
- 根据需要调整广播间隔(100ms 到 10s)和发射功率(-30dBm 到 +4dBm)。
- 保存更改。
更新日志
2026-05-29:
- 重构部署指南,使其以 SenseCraft Solution 一键引导式部署(入门版 / 标准版 / 企业版套件)为主,将手动 Docker 自建部署保留为备选路径。
- 新增部署行动引导,并刷新“参考与资源”链接,使其指向 校园级 BLE Beacon 定位系统解决方案页面;新增 GitHub 源码链接。
2025-11-10:
- 重新编写 Beacon 部署和网关设置指南,以澄清放置最佳实践、参考资料,以及针对 SenseCraft Data 和 ChirpStack 的网络服务器特定说明。
- 扩展运行时配置以及地图 / Beacon 设置章节,加入更清晰的界面指引、GeoJSON 导入示例,以及针对环境因素的可选调优建议。
- 新增专门的提示章节,涵盖 Beacon 记录管理、UUID 管理、安装固定、验证以及批量编辑,使部署更易于扩展和排障。