news 2026/5/6 15:08:24

【LoRaWAN物联网-09】RK3506 原生Linux搭建LoRaWAN网关(SPI版,无OpenWrt,内置NS+MQTT+Web管理)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【LoRaWAN物联网-09】RK3506 原生Linux搭建LoRaWAN网关(SPI版,无OpenWrt,内置NS+MQTT+Web管理)

在物联网网关开发中,RK3506凭借低功耗、高性价比的优势,成为嵌入式开发者的优选方案。本文将详细讲解如何在RK3506上,基于原生Linux系统(不依赖OpenWrt),搭建一套完整的LoRaWAN网关——包含SPI接口SX1302/SX1303射频模块、ChirpStack LoRaWAN网络服务器(NS)、Mosquitto MQTT服务器,以及Web管理界面,全程实操可复现,新手也能快速上手。

一、方案核心概述(精准匹配需求)

本文方案完全贴合“RK3506+原生Linux+SPI接口+内置NS/MQTT/Web”核心需求,无需OpenWrt,纯原生系统部署,兼顾稳定性和易用性,适合物联网网关量产或二次开发,具体架构如下:

  • 硬件平台:RK3506(ARM64架构)+ SX1302/SX1303 SPI接口LoRa集中器(如RAK2287 SPI版)

  • 系统环境:Debian 11/12 ARM64 或 Ubuntu 20.04/22.04 ARM64(原生系统,无OpenWrt)

  • 核心组件:

    • Packet Forwarder(SPI模式):负责LoRa射频数据收发,对接SX130x模块

    • ChirpStack全套:含Network Server(NS,LoRaWAN协议核心)、Application Server(AS,Web管理+数据集成)

    • Mosquitto MQTT:内置本地MQTT服务器,负责设备数据上行/下行转发

    • Web管理:ChirpStack自带UI(8080端口),可管理网关、设备、信道等

  • 核心优势:原生Linux稳定性强、部署简单(Docker一键启动核心服务)、SPI接口适配RK3506底层,支持CN470/AS923/EU868等多频段,可直接用于项目落地。

二、前期准备(硬件+系统,缺一不可)

2.1 硬件准备

  • 主控:RK3506开发板(内存≥1GB,存储≥8GB,确保SPI接口引出)

  • LoRa射频:SX1302/SX1303 SPI版集中器(如RAK2287 SPI、WM1302 SPI)+ 配套LoRa天线

  • 接线说明(关键!SPI通信必看):

    • RK3506 SPI引脚 → SX130x SPI引脚(对应关系): SCK → SCK、MISO → MISO、MOSI → MOSI、CS → NSS

    • 复位脚(可选):RK3506 GPIO引脚 → SX130x RESET(用于模块复位,后续可配置自动复位)

    • 供电:确保SX130x模块供电稳定(3.3V,电流≥500mA)

2.2 系统环境准备

RK3506需刷入原生ARM64 Linux系统,推荐Debian 11 Bullseye ARM64(最稳定,驱动兼容性最好),需满足:

  • 内核版本 ≥ 5.10(确保SPI驱动正常加载)

  • 开启SSH服务(方便远程操作,可选但推荐)

  • 网络通畅(需联网下载依赖、Docker镜像)

验证SPI是否可用(核心前置步骤):

# 执行命令,查看SPI设备节点 ls /dev/spidev* # 正常输出示例:/dev/spidev0.0 或 /dev/spidev1.0(后续配置需用到此路径) # 若无输出:需在内核设备树中开启SPI功能(文末附排查方法)

三、分步部署(全程复制命令,零踩坑)

部署顺序:安装基础依赖 → 启动ChirpStack(NS+MQTT+Web)→ 编译SPI版Packet Forwarder → 配置并启动网关 → Web绑定网关 → 验证功能。

3.1 安装基础依赖(Docker+编译工具)

核心服务(ChirpStack、MQTT)用Docker部署,无需手动配置依赖,先安装Docker及编译工具:

# 更新软件源 apt update && apt upgrade -y # 安装Docker、Docker Compose及编译依赖 apt install -y docker.io docker-compose git gcc make libftdi-dev # 启动Docker并设置开机自启 systemctl enable --now docker # 验证Docker是否正常运行 docker --version # 输出Docker版本即正常

3.2 一键部署ChirpStack(NS+MQTT+Web)

ChirpStack是开源LoRaWAN网关核心组件,包含完整的NS、AS和Web UI,用Docker Compose一键启动,无需手动配置数据库(自带PostgreSQL+Redis):

# 拉取ChirpStack Docker项目(官方稳定版) git clone https://github.com/chirpstack/chirpstack-docker.git cd chirpstack-docker # 修改区域配置(重点!中国用户设为CN470频段) nano chirpstack.env # 找到NETWORK_SERVER_REGION,修改为: NETWORK_SERVER_REGION=cn470 # 保存退出(Ctrl+O → Enter → Ctrl+X) # 一键启动所有核心服务(NS+AS+MQTT+DB+Redis) docker-compose up -d # 验证服务是否启动成功 docker ps # 看到包含chirpstack-network-server、chirpstack-application-server、mosquitto的容器即正常

启动成功后,核心服务默认端口:

  • Web管理界面:http://RK3506_IP:8080(默认账号:admin,密码:admin)

  • MQTT服务器:tcp://localhost:1883(本地可直接访问,无需额外配置)

  • Gateway Bridge:1700端口(用于Packet Forwarder对接NS)

3.3 编译SPI版Packet Forwarder(关键步骤)

Packet Forwarder是LoRa网关的“桥梁”,负责将SX130x模块接收的LoRa数据转发给ChirpStack NS,这里必须编译SPI模式(适配我们的硬件):

# 回到根目录,拉取SX1302 HAL源码(官方驱动) cd ~ git clone https://github.com/Lora-net/sx1302_hal.git cd sx1302_hal # 清理编译缓存,强制编译SPI模式(重点:SPI_DRIVER=1) make clean make all SPI_DRIVER=1 # 编译成功后,进入Packet Forwarder目录 cd packet_forwarder # 查看是否生成可执行文件(lora_pkt_fwd) ls -l lora_pkt_fwd # 有该文件即编译成功

注意:若编译失败,大概率是依赖缺失,重新执行apt install -y gcc make libftdi-dev后重试即可。

3.4 配置SPI模式(关键!对接RK3506 SPI)

复制对应频段的配置文件,修改SPI设备路径和网关ID,确保对接本机ChirpStack NS:

# 复制CN470频段配置文件(若用其他频段,替换为对应文件) cp global_conf/global_conf.cn470.json global_conf.json # 编辑配置文件,修改SPI路径和网关参数 nano global_conf.json

找到gateway_conf节点,修改以下内容(其他参数保持默认):

"gateway_conf": { "gateway_ID": "DEADBEEF01020304", // 8字节唯一网关ID,可自定义(如MAC地址后8位) "server_address": "127.0.0.1", // 对接本机ChirpStack NS "serv_port_up": 1700, // 与Gateway Bridge端口一致 "serv_port_down": 1700, "spidev_path": "/dev/spidev0.0", // 对应RK3506的SPI设备节点(重点!) "keepalive_interval": 10, // 心跳间隔10秒 "stat_interval": 30 // 状态上报间隔30秒 }

保存退出后,验证配置文件是否正确(可选):

cat global_conf.json | grep -E "gateway_ID|spidev_path|server_address" # 输出对应配置即正确

3.5 启动SPI LoRa网关

启动Packet Forwarder,验证SPI通信和LoRa模块是否正常:

# 启动网关(当前终端运行,用于调试) ./lora_pkt_fwd

启动成功的日志特征(关键验证):

INFO: [main] Starting LoRa packet forwarder INFO: [main] SPI driver version: 1.0.0 INFO: [main] concentrator started, concentrator EUI: 0016c00123456789 INFO: [main] pkt_fwd started in SPI mode INFO: [up] connecting to server 127.0.0.1:1700 INFO: [up] connected to server

若出现spidev open failed:检查SPI设备路径是否正确、SPI驱动是否加载、接线是否正常。

3.6 Web管理界面绑定网关

通过ChirpStack Web UI绑定网关,实现可视化管理:

  1. 打开浏览器,访问http://RK3506_IP:8080,用默认账号 admin/admin 登录;

  2. 左侧菜单栏点击「Gateways」→ 「Create」,进入网关创建页面;

  3. 填写核心参数:

    1. Gateway ID:与配置文件中gateway_ID完全一致(如 DEADBEEF01020304);

    2. Name:自定义网关名称(如 RK3506-LoRa-Gateway);

    3. Network Server:选择「chirpstack」(默认已存在);

  4. 点击「Save」保存,等待3-5秒,网关状态变为「Connected」(绿色),即绑定成功。

3.7 配置开机自启(稳定运行必备)

配置systemd服务,让Packet Forwarder和Docker服务开机自动启动,无需手动操作:

# 创建Packet Forwarder自启服务文件 nano /etc/systemd/system/lora-gateway.service

粘贴以下内容(注意修改WorkingDirectory和ExecStart路径,与实际一致):

[Unit] Description=LoRaWAN SPI Gateway (RK3506) After=network.target docker.service # 确保网络和Docker启动后再启动网关 Wants=docker.service [Service] WorkingDirectory=/root/sx1302_hal/packet_forwarder # 你的Packet Forwarder目录 ExecStart=/root/sx1302_hal/packet_forwarder/lora_pkt_fwd # 可执行文件路径 Restart=always # 异常退出时自动重启 RestartSec=5 # 重启间隔5秒 User=root [Install] WantedBy=multi-user.target
# 启用并启动自启服务 systemctl daemon-reload systemctl enable --now lora-gateway # 验证自启服务是否正常 systemctl status lora-gateway # 显示 active (running) 即正常

Docker服务已默认开机自启,无需额外配置。

四、功能验证(确保网关正常工作)

4.1 网关状态验证

登录Web UI(8080端口),进入「Gateways」→ 点击网关名称,查看:

  • Status:Connected(绿色);

  • Last Seen:最近上报时间(间隔30秒,与配置一致);

  • RX/TX Packets:接收/发送数据包数量(有LoRa节点时会增加)。

4.2 MQTT数据验证

内置Mosquitto MQTT服务器可直接使用,验证数据上行/下行:

# 安装MQTT客户端(用于订阅数据) apt install -y mosquitto-clients # 订阅所有应用数据(上行数据会在这里显示) mosquitto_sub -h 127.0.0.1 -t "application/#" -v

当有LoRa节点发送数据时,终端会输出类似以下内容(表示数据正常上行):

application/1/device/0016c00123456789/event/up {"time":"2024-05-20T10:00:00Z","data":"aGVsbG8=","devEUI":"0016c00123456789"}

4.3 下行数据测试(可选)

在Web UI中发送下行数据,验证网关是否能接收并转发给LoRa节点:

  1. 进入「Applications」→ 「Create」,创建一个应用;

  2. 添加LoRa节点(OTAA/ABP模式均可);

  3. 进入节点详情页,点击「Send downlink」,填写下行数据,点击「Send」;

  4. 查看Packet Forwarder日志,若出现「downlink received」,即下行数据发送成功。

五、常见问题排查(避坑指南)

5.1 SPI设备节点不存在(ls /dev/spidev* 无输出)

原因:RK3506内核设备树未开启SPI功能。

解决方法:

  • 查看设备树配置文件(一般在 /boot/dts/rockchip/ 目录下);

  • 找到SPI相关节点(如 spi0),将 status 改为 "okay";

  • 重新编译内核并烧录,或使用原厂已开启SPI的固件。

5.2 Packet Forwarder启动失败,提示“concentrator init failed”

常见原因及解决:

  • SPI接线错误:重新检查SCK、MISO、MOSI、CS引脚接线;

  • 模块供电不足:更换功率足够的电源(≥500mA);

  • 配置文件错误:检查 spidev_path 是否与实际SPI设备节点一致。

5.3 Web UI中网关状态显示“Disconnected”

  • 检查Packet Forwarder是否正常运行(systemctl status lora-gateway);

  • 检查配置文件中 server_address 是否为 127.0.0.1,serv_port_up 是否为 1700;

  • 检查ChirpStack Gateway Bridge是否正常运行(docker ps | grep gateway-bridge)。

六、方案总结与扩展

6.1 方案优势

  • 纯原生Linux,不依赖OpenWrt,部署简单、稳定性强,适合RK3506量产项目;

  • SPI接口适配RK3506底层,相比USB更稳定,适合工业场景;

  • 内置完整NS+MQTT+Web,无需额外部署第三方服务,一站式完成网关搭建;

  • 支持多频段、OTAA/ABP模式,可对接各类LoRa节点,扩展性强。

6.2 扩展建议

  • 添加网关本地Web管理:可部署轻量Flask/Node-RED页面,实现RK3506网络、射频状态的本地管理;

  • 数据可视化:添加InfluxDB+Grafana,实现LoRa数据实时监控;

  • 远程管理:配置SSH免密登录、远程重启网关,方便批量管理;

  • 低功耗优化:基于RK3506低功耗特性,配置模块休眠策略,降低网关功耗。

6.3 最终效果

通过本文方案,你将获得一台完整的LoRaWAN网关:RK3506原生Linux运行,SPI接口对接LoRa模块,内置NS负责协议处理、MQTT负责数据转发、Web负责可视化管理,上电自动启动,可直接用于物联网项目中LoRa节点的数据采集与转发。

如果你的SPI设备节点不是/dev/spidev0.0,或需要适配特定SX130x模块、调整频段,可留言补充,我会提供对应的配置修改方案~

后续预告

下一篇文章:【LoRaWAN 实战 10】STM32WLE5CCU6 + LoRaWAN Class A 超低功耗工程(0→1 手把手)第一篇

原创不易,如果本文对你有帮助,欢迎点赞、收藏、关注三连!有任何问题都可以在评论区留言,我会及时回复。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 15:08:11

企业内如何通过Taotoken实现API Key的集中管理与访问审计

企业内如何通过Taotoken实现API Key的集中管理与访问审计 1. 企业级API Key管理的核心挑战 在中大型企业环境中,多个项目组或业务线可能同时接入大模型API服务。传统分散管理模式下,每个团队独立申请和维护API密钥,导致密钥分发渠道混乱、权…

作者头像 李华
网站建设 2026/5/6 15:08:09

换新手机前必看:保姆级微信数据迁移避坑指南(防中断、防失败、防丢失)

微信数据迁移全流程防护手册:从预检到灾备的完整解决方案 每次更换手机时,微信数据迁移总是让人如临大敌——那些珍贵的聊天记录、工作文件和家庭照片一旦丢失就无法挽回。作为经历过三次数据迁移失败的技术顾问,我总结出一套覆盖迁移前、中、…

作者头像 李华
网站建设 2026/5/6 15:07:38

告别手动拾取!用Python+Seismic Unix实现速度谱自动解释(附代码)

PythonSeismic Unix实现地震速度谱自动解释全流程 地震数据处理中,速度分析是决定成像质量的关键步骤。传统商业软件依赖人工拾取速度谱,不仅效率低下,还容易引入主观误差。本文将展示如何用Python结合Seismic Unix(SU&#xff09…

作者头像 李华
网站建设 2026/5/6 15:05:10

SAP ALE 目标系统的安全落点,不是把链路打通,而是把用户和授权收紧

在做 ALE 这类跨系统集成时,很多团队会把注意力集中在 BD64、WE20、SM59、逻辑系统和端口配置上,链路一旦能通,就容易觉得工作已经完成了。可真正容易出事的地方,往往不在分发模型有没有配通,而在目标系统里那个负责接收数据的技术用户,到底是谁,它能做什么,它能不能被…

作者头像 李华
网站建设 2026/5/6 15:04:59

开源精神:FxSound开源免费的巨大优势

现在的FxSound,不仅完全免费,还开源了!这在音效软件里真的不多见!很多人可能对开源免费没有概念,不知道这意味着什么。今天我们就来详细分析一下FxSound开源免费的巨大优势! 首先是免费的优势。不用花一分…

作者头像 李华