欢迎光临
我们一直在努力

【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绑定网关,实现可视化管理:

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

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

  • 填写核心参数:

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

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

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

  • 点击「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节点:

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

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

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

  • 查看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 手把手)第一篇

     

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

    赞(0)
    未经允许不得转载:171主机测评 » 【LoRaWAN物联网-09】RK3506 原生Linux搭建LoRaWAN网关(SPI版,无OpenWrt,内置NS+MQTT+Web管理)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址