近年来,手机、平板等移动平台市场飞速扩展,但让人惊讶的是,SBC(单板计算机)的市场却并没有被“移动平台”蚕食。相反,随着物联网、边缘计算等应用需求的增长,市面上出现越来越多定位于不同应用场景的 SBC,树莓派正是其中的佼佼者之一。
由于树莓派开源社区十分成熟,基于树莓派的开发往往事半功倍,因此不少企业都推出了基于树莓派的产品。我们今天要介绍的 RAK_common_for_gateway(以下简称 rak_common)和其容器化镜像就是其中的一款典型。
RAK_common 是瑞科慧联(RAK)基于开源社区资源开发的一套 LoRaWAN® 软件栈。它可以让用户在极短时间内,在树莓派上部署好 LoRaWAN® 网关,方便进一步开发或直接将其用于生产环境。
背景介绍
RAK_common 软件栈的原始仓库中提供了非常详细的使用指南,包括:如何下载源码、如何使用树莓派内置的 raspi-config 工具来配置相关接口、如何使用一键安装脚本、以及如何使用一个简单的 GUI 来配置网关等相关内容信息。在可支持的硬件平台上,RAK_common 软件栈内的一键安装脚本就可以自动识别树莓派的基础型号,例如树莓派 0、树莓派 3、树莓派 4、树莓派 cm3、以及树莓派 cm4,并自动修改对应的配置文件;在 LoRa® 集中器方面,RAK-common 软件栈可以支持 SX1301、SX1302,以及 SX1303 集中器。
瑞科慧联提供了搭载不同模块的LoRa®集中器,并且非常贴心地为每种集中器都提供了 USB 和 SPI 规格接口,以及可选配的 GPS 和 LTE 模块,所以用户可以根据自身实际需求来购买具有“对应接口和对应功能”的集中器,然后在一键安装脚本中,手动选择对应的型号来自动部署相关代码和配置。RAK-common 软件栈可以支持的集中器型号如下所示:
RAK831(Choose RAK2245)
RAK2245
RAK7243/RAK7244 no LTE
RAK7243/RAK7244 with LTE
RAK833(USB)(Choose RAK2247 USB)
RAK2247(USB)
RAK833(SPI)(Choose RAK2247 SPI)
RAK2247(SPI)
RAK2246
RAK7248 no LTE (RAK2287 + raspberry pi)
RAK7248 with LTE (RAK2287 + LTE + raspberry pi)
RAK2287(USB)
RAK7271(Choose RAK2287 USB)
RAK5146(USB)
RAK7371(Choose RAK5146 USB)
RAK5146(SPI)
RAK5146(SPI) with LTE
随着云原生时代的到来,容器技术凭借其可移植性高、部署方便、运维成本低等特点,迅速成为“在边缘计算设备上部署服务”的首选方式。而瑞科慧联的 LoRaWAN® UDP Packet Forwarder Protocol for Docker 这一项目恰好就是针对 RAK-common 软件栈进行了代码结构的优化和打包。这样,即使用户不在树莓派硬件平台上,也能快速部署 LoRaWAN® UDP packet forwarder。如果用户在设备上已经安装了 docker,使用瑞科慧联提供的容器镜像就更简单,只需要在 docker-compose.yml 中修改对应的配置选项,然后需要输入一条命令 ‘docker-compose up‘,就可以在几秒钟内部署好一个 LoRaWAN® packet forwarder ,将设备变为一台 LoRaWAN® 网关。
该项目的特性如下所示:
- 支持多平台、多架构,如AMD64(x86_64), ARMv8, ARMv7 and ARMv6 架构支持基于 SX1301, SX1302, SX1303 and SX1308 的 LoRa® 集中器
- 支持使用SPI 和 USB 接口的集中器
- 兼容使用The Things Stack(community edition/TTNv3)或者是 Chirpstack LNS 等 LoRa® 网络服务器
- 一键部署,同时可配置度高
- 支持使用Balena 部署,方便集群管理
应用示例
下面我会以频段为 US915 的 RAK5146 集中器的 SPI 版本为例子,向大家展示如何使用 docker-compose,实现一键部署 LoRaWAN® UDP packet forwarder。
前期准备
硬件准备:
- RAK5146集中器
- 树莓派3/4/CM3/CM4(CM3 或者CM4 需要对应的载板)或者任意其他有 PCIe/GPIO 的 arm 平台或者 x86 平台
- 如果你的host 设备上没有 PCIe 接口,需要使用一个额外的 RAK2287 Pi HAT 板载 PCle 连接器
软件准备:
在本地预安装了 docker 和 docker-compose,以及相关的依赖(docker 和 docker-compose 的安装十分简单,请参照官方文档。
具体步骤如下所示:
新建一个文件夹,并在文件夹中新建一个名叫 docker-compose.yml 的文件:
1 2 3 |
mkdir example cd example nano docker-compose.yml |
接着将下列内容粘贴进该文件并保存:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
version: '3.7' services: udp-packet-forwarder: image: rakwireless/udp-packet-forwarder:latest container_name: udp-packet-forwarder restart: unless-stopped devices: -/dev/spidev0.0 volumes: -/sys:/sys environment: # MODEL: "RAK5146" #该镜像可根据Rakwireless集中器型号自动配置接口等 CONCENTRATOR: "SX1303" #第三方集中器需要依次定义CONCENTRATOR、INTERFACE等变量,例如RAK5146是基于SX1303芯片 INTERFACE: "SPI" RADIO_DEV: "/dev/spidev0.0" BAND: "us_902_928" #此处以US915为例,根据集中器支持频段修改即可 TTN_REGION: "eu1" #如使用TTS作为ns,默认使用eu1服务器,可按需修改 # SERVER_HOST: "10.2.21.27" #如果不使用TTS,则修改为您自己ns的地址 # SERVER_PORT: "1700" #同上 |
保存后,在终端同一个目录下中执行如下命令:
1 2 3 |
pi@raspberry:docker-compose up #如果安装了新版docker compose,请运行如下命令 docker compose up |
如果配置正确的话,你将看到如下的 log,其中包含了网关的 EUI,以及后续 TTS 的 ns 地址。
网关的 EUI 可以通过在终端运行以下命令获取:
1 |
docker exec -it udp-packet-forwarder ./get_eui.sh |
光在网关上部署 udp-packet-forwarder 可不够,你还需要配置网络服务器(ns),此处我们以 The Things Stack (TTS) 为例:
复制上述红色高亮的地址 eu1.cloud.thethings.network,使用你的浏览器访问该地址,注册账号后,你将看到 TTS 的网关和应用配置页面:
接下来你需要按照页面上的操作提示,依次进行以下操作:
- 点击Go to Gateway
- 点击Add Gateway
- 依次填入网关的信息,例如ID,名字,EUI,以及频段
- 点击页面下方的Create Gateway 来完成网关的创建
完成以上步骤后,请等待片刻,稍后网关将自动连上 TTS 网络服务器。连接成功后,网关会有如下 log:
而在 TTS 网络服务器侧,则可以看到网关入网的提示:
以上就是最基础、也最常见的一种部署 LoRaWAN® 网关的方式。此外,瑞科慧联还提供了基于该镜像的多种应用案例,包括双频段网关、接入 influxdb 数据库和 Grafana 图形化面板、接入 TagoCore 的案例等等,具体可以参考其 Github 代码仓库。
大家可以参考代码仓库中的开源应用案例,只需要稍加修改、就能打造出属于你自己的解决方案。
文章翻译者:Nicholas,技术支持工程师、瑞科慧联(RAK)高级工程师,深耕嵌入式开发技术、物联网行业多年,拥有丰富的行业经验和新颖独到的眼光!