基于蓝牙的 LoRaWAN 室内定位系统
简介
概述
室内定位是许多行业面临的共同挑战。虽然像 UWB 这样的高精度系统存在,但它们可能成本高昂且复杂。此解决方案通过结合两种强大的无线技术提供了一个灵活且经济高效的替代方案:低功耗蓝牙 (BLE) 用于位置感知,LoRaWAN 用于长距离、低功耗数据传输。
该系统围绕 SenseCAP T1000 Tracker 构建,支持两种不同的定位模式,让您可以根据需要在精度和电池寿命之间取得平衡:
-
高精度跟踪(三角定位): 当跟踪器检测到来自三个或更多 BLE 信标的信号时,它可以计算出其在地图上的精确 (x, y) 坐标。此模式非常适合跟踪资产或人员的移动,定期或在发生移动时提供准确的位置更新。
-
基于区域的定位(邻近性): 当跟踪器仅在一个或两个信标的范围内时,它根据与最近信标的邻近性来识别其位置。此模式非常适合更简单的用例,如自动签到、确认资产在指定房间内,或通过较少频率的位置报告来节省电池寿命。
通过支持这两种方法,此解决方案为广泛的室内跟踪应用提供了一个多功能且易于部署的系统,从简单的存在检测到更详细的基于坐标的监控。
查看我们的室内外集成定位套装页面,获取实施此解决方案所需的所有产品。
主要特性和优势
- 经济高效且可扩展:利用经济实惠的 BLE 信标,避免在每个房间安装昂贵网关的需要。
- 长距离数据传输:单个 LoRaWAN 网关可以覆盖整栋建筑或校园,大幅降低基础设施成本。
- 即时 SOS 警报:跟踪器包含紧急按钮,按下时立即通过 LoRaWAN 发送 SOS 警报,实现快速应急响应。
- 智能电源管理:通过使用内置加速度计,跟踪器可以仅在检测到移动时报告,否则发送定期"心跳"信号。这大大延长了电池寿命,在许多资产跟踪应用的最佳设置下可达 6 个月。
- 简单部署:设置 BLE 信标和 LoRaWAN 网关非常简单,让您的定位系统快速上线。
- 开源软件:该项目完全开源,允许您使用我们的 GitHub 仓库 构建和定制自己的后端服务器。
使用案例
使用案例
此解决方案非常适合广泛的基于区域的跟踪和安全应用:
校园和学校安全
为学生和教职员工提供可穿戴跟踪器。内置的 SOS 按钮允许他们从校园任何地方立即发送带有最后已知位置的紧急警报,提供安心感并实现更快的响应时间。
资产管理
跟踪贵重资产的位置,无论是室内还是室外(例如,停车场中的车辆)。配置跟踪器仅在移动时报告,节省电池的同时确保您收到未经授权移动的警报。
自动签到和人员管理
通过调整 BLE 信标的信号强度,您可以为办公室或养老院创建"签到"区域。当佩戴跟踪器的人进入该区域时,他们的存在会自动记录。
系统架构
该系统基于一个简单而强大的原理运行。移动跟踪器监听来自固定信标的信号,并将它们听到的内容报告给中央服务器。

先决条件
主要组件包括:
- BLE 信标:这些是放置在已知位置(例如,房间入口、关键区域)的小型固定发射器。它们持续广播唯一 ID。
- SenseCAP T1000 Tracker:这是连接到您想要跟踪的资产或人员的移动设备。它扫描附近的 BLE 信标并识别信号最强的那个。
- LoRaWAN 网关:跟踪器通过 LoRaWAN 将包含最近 BLE 信标 ID 的数据包发送到网关。
- 网络和应用服务器:网关将数据转发到 LoRaWAN 网络服务器(SenseCraft Data),然后将其路由到应用服务器。应用服务器保存信标 ID 及其真实世界位置的地图,使其能够确定跟踪器的位置(例如,"跟踪器 #58 靠近信标 #12,该信标位于会议室 3")。
开始之前,请确保您具备以下条件:
- 一个 SenseCAP T1000 Tracker
- 一个或多个 BLE 信标
- 一个连接到互联网的 LoRaWAN 网关
- 一台安装了 Docker 的服务器或计算机
SenseCAP T1000 Tracker
具有 BLE 扫描功能的 LoRaWAN® 移动跟踪器
BLE 信标检测: 支持 BLE 5.1,实现精确的室内外定位。
广域网络: LoRaWAN® Class A(v1.0.4) 连接,实现长距离、低功耗通信。
运动检测: 内置加速度计,实现实时运动和静止状态感知。
紧急按钮: 独立的 SOS 按钮,一键触发紧急警报。
BLE 信标
常规蓝牙广播
协议兼容: Bluetooth® LE 5.0 | 完全支持 iBeacon 和 Eddystone 格式。
灵活部署: 可配置传输功率以调整覆盖半径。
持久耐用: 在标准设置下电池寿命长达 2 年。
易于安装: 配有背胶,便于安装在墙壁或其他表面。
广播范围: 室外最远 75 米,室内开阔区域最远 120 米。
SenseCAP M2 多平台网关
LoRaWAN® 网络基础设施
广域覆盖: 室内覆盖半径高达 2 公里,确保信号稳定。
大规模连接: 支持超过 200 台并发设备,性能卓越。
多种回传方式: 提供多种网络回传选项,包括以太网、Wi-Fi 和 4G。
集成解决方案: 内置本地 LoRaWAN 服务器功能,简化网络部署和管理。
入门指南
- 部署信标:在设施的战略位置放置 BLE 信标。创建一个地图或列表,记录每个信标的唯一 ID 及其物理位置(例如,
Beacon_ID_01: "主入口",Beacon_ID_02: "仓库 A 区")。 - 设置网关:将 LoRaWAN 网关连接到互联网,并配置其将数据包转发到您选择的 LoRaWAN 网络服务器。
- 部署应用程序:在应用服务器上,创建逻辑将报告的信标 ID 映射回您在第 3 步中记录的物理位置。
- 配置追踪器:激活 SenseCAP T1000 并将其加入到您的 LoRaWAN 网络服务器。确保其配置为 BLE 扫描模式。
- 可视化:当追踪器在设施中移动时,它将报告最近的信标,您的应用程序可以在仪表板或地图上显示其位置。
步骤 1:设置硬件
首先,您需要在设施中设置物理设备。
1a. 部署信标
有关完整的技术规格,请参阅 BC01 室内蓝牙信标文档。
首先在设施内的战略位置放置 BLE(低功耗蓝牙)信标——例如主入口、仓库和办公区域。
请参考下面的视频,了解如何将信标信息添加到系统中的分步指南。 您也可以查看提示部分获取额外帮助。
BC01 信标参数快速查看
| 参数 | 默认值 |
|---|---|
| UUID | FDA50693-A4E2-4FB1-AFCF-C6EB07647825 |
| Major | 10001 |
| Minor | 19641 |
| 测量功率 | -59dBm |
| 发射功率 | -30 - +4dBm,默认 0dBm |
| 广播间隔 | 100ms~10s,默认 500ms |
| 密码 | seeed123(字母和数字) |
| 设备名称 | BC01(1-7 个字符) |
| 软重启 | seeed123(与密码相同) |
1b. 设置网关
打开您的 LoRaWAN 网关并将其连接到互联网。
接下来,根据您使用的网络服务器按照以下说明操作。
- SenseCraft Data
- ChirpStack(本地 LoRaWAN 服务器)
默认情况下,LoRaWAN 网关将数据转发到 SenseCraft Data 平台(原 SenseCAP Portal)。
- 按照官方用户手册确保您的网关在线并链接到您的账户。
- 连接验证后,您可以继续下一步(步骤 2)。
如果您使用与网关集成的自托管 ChirpStack 服务器,您需要重定向网关数据并准备解码器脚本。
- 配置网关: 按照此指南将网关的上行数据重定向到 ChirpStack。
- 下载解码器脚本: ChirpStack 需要解码器来解释来自 T1000 追踪器的数据。下载下面的脚本,以便在后续配置步骤中使用。
- 下载 T1000 解码器脚本 注意: 此脚本应添加到您的 ChirpStack Application Settings 中,而不是在网关设备本身上。
步骤 2:安装定位应用程序
使用 Docker 在您的服务器上安装 SenseCraft 室内定位应用程序。 如果您想先探索界面,可以查看在线演示。
运行安装命令
在您的服务器上打开终端并运行以下命令:
- 全球
- 镜像
docker run -p 5173:5173 -p 8022:8022 \
--name indoor-positioning \
--restart unless-stopped \
-v $PWD/db:/app/db/ \
-v $PWD/config:/app/server/config/json \
-d seeedcloud/sensecraft-indoor-positioning
对于中国大陆用户,您可以使用 chsrc 更改源以获得更好的加速效果。
💡 注意:如果您在 Windows 上运行命令,请使用 PowerShell 而不是 CMD 终端。
此命令的作用:
- 下载并启动 SenseCraft 室内定位应用程序容器。
-p 5173:5173使 Web 仪表板可在端口5173上访问。- 挂载本地目录:
/app/db/→ 存储数据库和地图。/app/server/config/json→ 存储配置文件。
-d在后台运行应用程序。
容器成功启动后,打开您的 Web 浏览器并导航到:
👉 http://<your_server_ip>:5173
您现在应该看到 SenseCraft 室内定位仪表板在您的服务器上运行。
步骤 3:配置应用程序
3a. 运行时配置(连接到 LoRaWAN)
使用此设置将应用程序连接到您的 LoRaWAN 网络服务器并接收追踪器数据。 应用程序可以同时连接到 SenseCraft Data 和本地 ChirpStack 服务器。
在仪表板中启用一个或两个 MQTT 源:
连接到 SenseCraft Data
- 打开 SenseCAP OpenStream MQTT。
- 输入您的用户名和 API 密钥 - 从 Data OpenStream API 快速入门指南获取这些信息。
连接到 ChirpStack
- 打开 ChirpStack MQTT。
- 输入服务器地址和应用程序 ID - MQTT 主题将自动填充。您可以在 ChirpStack 应用程序页面上找到应用程序 ID。
注意:
{clientID}字段是自动生成的;请勿编辑。
重要: 任何更改后,重启 Docker 容器以使更新生效。
其他设置
这些选项可以随时更改(无需重启):
- 身份验证 – 更新仪表板登录凭据。
- 区域定位 – 当信标信号较弱或稀疏时估算追踪器的大致位置。
- 追踪器访问控制 – 限制哪些设备可以被定位(对所有开放或通过白名单)。
- Webhook – 通过 HTTP POST 将位置数据推送到您的服务。
3b. 地图和信标配置
点击 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 使用基于坐标的折线定义 2D 楼层布局,这些折线代表地图元素,如墙壁或边界。 当前演示版本不支持其他几何类型。
- 添加信标
在信标部分,添加每个信标的 MAC 地址、ID 和位置。 您可以使用在步骤 1a中创建的列表直接将它们放置在上传的地图上。
- 调整环境因子(可选)
通过调整信号强度(RSSI)转换为距离的方式来微调位置精度。
- 默认值(~2.0)适用于开放区域。
- 对于复杂的室内环境,尝试 1.8 到 4.0 之间的值。
- 从默认设置开始,如果需要可以稍后调整。
步骤 4:激活并可视化您的追踪器
最后一步是打开您的追踪器并在地图上查看它。
- 激活 SenseCAP T1000 追踪器并将其加入到您的 LoRaWAN 网络服务器。确保您的网关在线且追踪器设备在 LNS 服务器上"已注册"。详情请查看步骤 1b。
- 确保它设置为 BLE 扫描模式,以便它可以检测信标。请查看下面的视频获取帮助。
- 可视化: 当追踪器在您的设施中移动时,它将检测最近的信标并报告其位置。您将在仪表板上看到其图标在地图上移动。
使用 ChirpStack 时,选择 Other Platform。
使用 SenseCraft Data 时,保留默认平台设置(SenseCAP for The Things Network)。
应用功能概述
功能 1:数据推送(Webhook 和 WebSocket)
您可以通过两种方式从系统获取实时数据:
- Webhook: 如配置中所述,这会将数据推送到您提供的 URL。
- WebSocket: 对于实时应用,您可以使用基本 HTTP 身份验证连接到
/ws端点。原始文档中提供的 JSON 示例详细说明了sos、tracker_update(三角定位)和tracker_location_approximate(邻近)的数据格式。
数据格式
- 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:两种定位模式
系统支持两种定位方法:
- 三角定位: 当跟踪器检测到三个或更多信标时,它会计算精确的 (x, y) 坐标。这是默认且最准确的模式。
- 邻近(区域定位): 如果您启用此功能且跟踪器只能检测到一个信标,它将报告其位置为在计算半径内"靠近"该信标。这对于确保所有区域的覆盖很有用。
三角定位
| 三角定位 | 三角定位(SOS) |
|---|---|
区域定位
| 区域定位 | 区域定位(SOS) |
|---|---|
功能 3:查看警报历史
您可以通过点击地图上的跟踪器图标来查看任何跟踪器的警报历史(例如,SOS 按钮按下)。系统会记录每个新警报,并将继续推送活动警报的通知,直到问题得到解决。
功能 4:按信标 UUID 过滤
您可以根据关联的信标 UUID 过滤地图上显示的跟踪器。这允许对特定区域或资产进行更集中的监控。它的价值在于不被黑客攻击。
参考资料与资源
- 产品页面:SenseCraft 室内定位解决方案
- Docker 镜像:seeedcloud/sensecraft-indoor-positioning - Docker Hub
- 在线演示站点:IndoorPositioning
提示
以下是一些有用的提示,帮助您更高效地部署和配置信标:
1. 记录信标信息
强烈建议记录每个信标的唯一 MAC 地址及其安装位置。
这在软件配置步骤中将至关重要,并将帮助您在映射或故障排除期间轻松识别和选择正确的信标。
| MAC 地址 | 位置 | 信标 ID |
|---|---|---|
| c30000564b31 | 主入口 | 01 |
| c30000564b32 | 仓库 A 区 | 02 |
| c30000564b33 | 角落办公室 | 03 |
2. 为所有信标使用一致的 UUID
为了便于管理,您可以使用 SenseCraft 应用为所有信标分配一致的 UUID。
这确保您的跟踪器只监听您自己的设备并忽略其他附近的信标。
查看功能 4:按信标 UUID 过滤了解更多详情。
3. 选择稳定的安装位置
将信标安装在固定、开放且无障碍的区域,以确保稳定的蓝牙信号。
避免将它们放置在可能造成干扰的金属表面、电气面板或 Wi-Fi 路由器附近。
4. 标记并固定每个信标
贴上与记录表匹配的可见标签(例如,Beacon-01、Beacon-02),以避免维护期间的混乱。
确保设备牢固安装,以防止意外移位。
5. 验证信号范围
在最终确定放置位置之前,使用 BLE 扫描器应用或配置工具测试信号覆盖,以确保在目标区域内一致检测。
6. 快速添加或调整信标数据
如果您使用的是 GeoJSON 类似的配置文件,您也可以直接编辑导出的地图文件来快速添加或调整信标数据,然后将其重新导入到应用程序中。
{
"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",
}
}
}
提示:当一次添加多个信标或在仪表板外微调其坐标时,直接编辑 JSON 很有用。
常见问题
为什么我的跟踪器没有报告其位置?
- 可能原因: LoRaWAN 连接可能存在问题。
- 解决方案: 检查您的 LoRaWAN 网关状态,确保其在线并已连接。同时,验证跟踪器的设备 EUI 是否在您的网络服务器上正确注册。
为什么追踪器的位置不准确?
- 可能原因: 您的 BLE 信标的放置位置可能导致干扰或信号覆盖较弱。
- 解决方案: 尝试调整信标的传输功率。您可能还需要重新放置它们以减少墙壁或机械设备对信号的阻挡。
为什么追踪器的电池消耗如此之快?
- 可能原因: 报告频率设置过高,导致设备传输数据的频率超过必要水平。
- 解决方案: 优化运动检测设置,仅在追踪器移动时才报告。您还可以增加报告间隔(位置更新之间的时间)以节省电力。
为什么位置数据丢失或不显示?
- 可能原因: 数据库或 API 可能存在问题,通常与数据载荷的解释方式有关。
- 解决方案: 首先,验证应用服务器上的载荷解码器是否正确且正常工作。如果解码器正确,请检查应用服务器日志是否有任何错误或连接问题。
为什么 SOS 警报没有及时收到?
- 可能原因: LoRaWAN 网络可能拥塞,或者设备类别不适合紧急消息。
- 解决方案: 对于像 SOS 警报这样的时间关键应用,请确保您的追踪器配置为使用 Class C 模式。这会保持设备的接收器持续开启,允许立即接收来自服务器的消息。
如何调整 BC01 信标的广播间隔和传输功率?
您可以使用 SenseCraft 应用 来配置 BC01 信标。
- 从 Google Play Store 或 Apple App Store 安装 SenseCraft 应用。
- 打开应用并在手机上启用蓝牙。
- 扫描附近的信标并选择您希望配置的信标。
- 输入默认密码 "seeed123" 以访问设置。
- 根据需要调整广播间隔(100ms 到 10s)和传输功率(-30dBm 到 +4dBm)。
- 保存更改。
更新日志
2025-11-10:
- 重新设计了信标部署和网关设置指导,以阐明放置最佳实践、参考材料以及针对 SenseCraft Data 和 ChirpStack 的网络服务器特定说明。
- 扩展了运行时配置以及地图/信标设置部分,提供了更清晰的 UI 指导、GeoJSON 导入示例和环境因素的可选调优提示。
- 添加了专门的提示部分,涵盖信标记录保存、UUID 管理、安装、验证和批量编辑,使部署更容易扩展和故障排除。