张美平,陈清建,张少敏,郭 毅
1(福建师范大学 数学与信息学院,福州 350117)
2(福建省网络安全与密码技术重点实验室,福州 350007)
在低功耗广域网技术兴起之前,大多数的无线技术都难以做到远距离和低功耗的兼顾.目前大部分的智慧农业系统采用ZigBee 无线通信技术进行数据传输.虽然ZigBee 技术满足智慧农业对于低功耗、低成本的需求,但其却无法满足远距离传输的需求,这在无形之中增加了中继节点的开销.同时,ZigBee 技术在高频率通信的情况下有着信号衰减快的问题,易受到其他信号的干扰,从而影响有效数据的传输,已难以满足目前智慧农业系统的数据传输需求[1].远距离无线电(Long Range Radio,LoRa)作为非授权频谱的低功率广域网络(Low-Power Wide-Area Network,LPWAN)的一种新兴技术,具有远距离通信的优点外,也有低成本、多节点、低功耗、抗干扰性强等优势[2].LoRaWAN 是基于LoRa 远距离通信网络设计的一套通讯协议和系统架构,目前已经成为LPWAN 中重要的技术标准之一.
近几年国内外开展了一系列对LoRaWAN 智慧农业应用系统方案设计的研究.在国内,赵兰枝提出了基于LoRaWAN 物联网技术的农田环境监测系统研究相关的设计方案,给出了系统实现所需结构与功能框架,为开发一个LoRaWAN 农业应用系统提供了不错的框架思路基础[3];刘映江分析了低功耗广域网在农田监测中的应用价值,也设计了一套LoRaWAN 智慧农业监测系统,并介绍了相关硬件平台实现与技术原理[4].在国外,Ibrahim 等将LoRaWAN 技术应用在了智慧蘑菇屋来达到控制屋内的环境最终实现了更高的产量,并且对系统能耗、射频进行了相应的分析[5].这些方案都为LoRaWAN 智慧农业应用系统的设计提供了一定的基础借鉴.
本文所设计的LoRaWAN 智慧农业应用系统,在同样实现LoRa 终端与LoRa 网关软硬件功能部分的基础上,在云服务的搭建中还结合ChirpStack 这一个开源服务项目,相比于上述应用,结合该服务能够提供便捷的网络管理,使得系统开发简易快速,用户更多只需要考虑应用需求方面的开发.本文将详细介绍系统开发流程,为今后LoRaWAN 应用系统的开发提供良好可靠的方案基础.
基于LoRaWAN 设计的智慧农业系统,由LoRa终端、LoRa 网关集中器以及ChirpStack 服务、Flask Web 应用4 个部分组成.在LoRa 终端上外接多种传感器与执行器,能够将数据封装通过LoRa 传输至网关集中器;LoRa 网关集中器能够并行接收处理多个终端节点的数据并通过UDP 协议传输至服务器;服务器结合ChirpStack 服务与Flask Web 应用为用户呈现可视化监测与管理界面.系统框架如图1所示.
图1 系统总体框架
LoRa 终端系统采用以STM32F103VET6 为控制芯片的开发板作为控制器,搭载传感器模块(DHT11温湿度传感器、FC-28 土壤湿度传感器、TSL2561 光强传感器)、LoRa 通信模块(RAK811 Breakout Board)、LCD 液晶触摸屏模块与执行模块(水泵、散热器),整个LoRa 终端的硬件结构如图2所示.LoRa终端能进行传感器数据的采集以及通过LoRa 通信模块传输数据,同时还具有液晶屏显示与自动灌溉功能,利用串口与PC 端连接还可以接收PC 端的配置指令.
图2 LoRa 终端硬件系统设计框图
RAK811 远距离LoRa 收发模块,其拥有小巧、简单、远距离传输和低功耗的特点,能够很好地应用于远距离无线传输解决方案当中,支持P2P 通信和LoRaWAN 组网方式,该模块集成了Semtech 的SX1276芯片,以及STM32L 芯片,并且提供了UART 接口,能够通过简单的AT 串口指令来进行LoRa 模块的配置与数据收发.
LoRa 网关集中器采用了“树莓派+RAK2245 Pi HAT 模块”组合搭建而成,其硬件结构如图3所示.RAK2245 Pi HAT 是一款适配于树莓派的LoRa 网关集中器模块,集成了Ublox Max-7Q GPS 模块以及散热器,能够支持8 个信道,并且适用于LoRaWAN 全球所有频段,它拥有一个基于Semtech SX1301 的基带处理器用来进行数据包的管理和两个Semtech SX1257 来用于射频前端I/Q 收发器.RAK2245 Pi HAT 主要负责LoRa 信号的发送以及接收,树莓派则主要负责作为核心控制板,处理数据和运算等[6].
根据LoRaWAN 协议,终端入网首先需要定义终端类型、入网方式以及通信频段.由于LoRa 通信模块支持AT 指令进行配置,将LoRa 终端利用串口配置为符合此次系统需求的Class A 类型,入网方式为 OTAA 空中激活模式,频段为中国的CN_470_510;其次此系统OTAA 入网方式还需要为终端配置DevEUI、AppKey两个入网参数.在上述配置完成基础上,终端开机后可以自行进行入网请求操作,并在入网成功之后结合Class A 工作模式进行传感器数据的采集与上传等工作,整个终端运行流程如图4所示.
图3 LoRa 网关集中器硬件设计框图
图4 终端系统运行流程
LoRa 网关集中器的数据转发功能主要是依赖于Packet_forworder 这一程序来实现,它会负责将网关收到的RF 数据包通过UDP 协议发送给服务器,以及将服务器的下行数据包通过RF 发送到指定的信道进而传输给LoRa 终端节点,可以理解为是网关集中器和服务器之间的一个包转发器.
Packet_forworder 主要通过Semtech 提供的开源代码进行编译得到,在libloragw 核心库的基础上编译成的lora_pkt_fwd 应用程序将会作为树莓派开机自启服务,让树莓派利用SPI 接口通信使RAK2245 集中器开发板实现数据转发功能,通过读取global.json 配置文件来指定需要监听的频段与服务器的IP 地址,UDP端口等,而我们所需要做的便是对global.json 配置文件进行修改以实现CN_470_510 频段的数据监听与转发至指定服务器的功能.
ChirpStack 作为一个开源的LoRaWAN Server 服务器端项目,包含了Gateway Bridge、Network Server、Application Server 和Geolocation Server,并且集成了许多接口供第三方应用使用,是目前LoRaWAN 服务端中一个很好可行的解决方案.
部署ChirpStack 服务器需要先安装mosquitto MQTT 服务器、Redis 以及PostgreSQL 数据库来供ChirpStack 服务使用,在PostgreSQL 中需要为Network Server 以及Application Server 创建相应的数据库,以及终端数据的建表操作.在添加repository 之后利用apt工具依次安装Gateway Bridge、Network Server 以及Application Server,3 个Server 的配置文件都在etc 对应的目录下,需要对Network Server 以及Application Server 的toml 配置文件进行修改,在Network Server配置文件中需配置接收频段为CN_470_510,而在Application Server 配置文件中需要给定jwt_secret 密钥内容以便后续REST API 的调用,同时二者都需要指定PostgreSQL 配置项对应到各自数据库的DSN 地址.
在ChirpStack 服务部署完成之后,通过Application Server 提供的Web 界面进行应用层的初始化配置,具体如下:
(1)添加相对应关联的Network Server 服务项,指定IP 地址与端口号,默认配置文件中的端口为8000;
(2)添加Service-profiles 服务配置项,其中需要指定上述Network servers 的服务项;
(3)添加Device-profiles 设备配置项,根据本文系统终端设计需求,需要创建一个Class A 类型、OTAA入网方式的Device-profiles.针对终端数据的碎片化,在配置项中codec 一栏,可以供用户编写LoRa 终端数据传输的编解码函数,其中支持JS 语言实现,能够将终端原始数据转换为用户所需如JSON 格式的数据,以便后续存储后便捷提取解析数据.
ChirpStack 服务为用户提供了和LoRa 底层网络的对接和管理功能,但还需要用户进一步开发自己所需的应用系统,因此系统使用Flask 应用框架开发一个Web 应用来进行智能农业终端数据的可视化展示[7],整个Flask Web 应用框架结构图如图5所示.
ChirpStack Application Server 提供了REST API 接口以实现终端、网关、用户信息的获取等快速操作,在REST API 的接口调用请求中需要在请求头的Authorization 字段附上生成的JWT TOKEN,JWT TOKEN 中的签名密钥即为ChirpStack Application Server 配置文件中设置的jwt_secret 字段;同时Application Server 还会向MQTT Broker 发布LoRa 终端的上下行数据消息.
整个Flask Web 项目运行流程图如图6所示.当Flask Web 项目运行时,如果接收到前端的请求时通过控制层解析并且匹配route 路由找到相应的视图函数之后执行业务层逻辑的处理,在业务逻辑处理的时候如有需要便可以快速调用REST API 接口以对接ChirpStack 服务,当有需要操作数据库时便可以交给数据层处理,数据库的操作则使用了SQLAlchemy 来创建ORM 模型将数据库内容实例化成对象,能够增加抽象地方便数据访问.此外,Flask Web 项目还开启了一个用于监听MQTT 终端数据消息的线程来进行终端上行数据的数据库存储操作.
图6 Flask Web 应用运行流程
整个LoRaWAN 智慧农业系统搭建完成之后,其数据通信流程如图7所示.
图7 系统数据通信流程
具体过程如下:
(1)LoRa 终端主控板在通过表1对传感器数据进行封装后,利用串口AT 指令发送十六进制格式原始封装数据至LoRa 模块,LoRa 模块会通过AppKey 衍生的AppSKey 应用层会话密钥来对数据进行AES128位算法加密填入MAC 层帧中的FRMPayload 部分再通过LoRa 发送至网关集中器.
表1 传感器数据封装格式
(2)LoRa 网关集中器在接收到终端的上行数据后,对其进行Base64 编码再通过UDP 协议传输至ChirpStack服务端.
(3)ChirpStack 服务中Network Server 先将网关集中器转发上来的数据进行提取并且整理成JSON 格式,然后通过gRPC 传输至Application Server,Application Server 会负责对数据进行解密操作之后发布到MQTT Broker.
(4)Flask Web 应用通过订阅MQTT 相应主题来获取到Application Server 解密之后的终端JSON 格式消息,然后进行数据库的存储操作.
系统测试硬件实物框架图如图8所示.
图8 系统测试硬件框架
在LoRa 终端节点开机入网成功之后,采集完传感器环境数据后结合Class A 类型工作模式发送至LoRa网关集中器,通过串口调试工具查看LoRa 终端运行结果如图9所示.
图9 LoRa 终端入网与数据传输
在LoRa 网关集中器中,可以开启监听日志程序util_pkt_logger 来进行数据传输监听,结果如图10所示.
图10 网关util_pkt_logger 程序监听
在LoRa 网关将终端数据通过UDP 传输到服务器后,通过开启Flask Web 应用服务,结合ChirpStack 服务运行后,用户进行系统登录后,观察传感器数据界面实际运行效果如图11所示,可以观察到LoRa 终端数据最终能够稳定地传输并更新展示在了Web 界面当中.
图11 Web 应用运行效果图
本文所提出的基于LoRaWAN 技术设计的智慧农业系统方案,实现了农业大棚环境数据的远程监测管理等功能,并且对整个系统的架构、软硬件设计以及程序运行流程做了详细的介绍.系统具有开发快速便捷,数据传输安全可靠的优点,同时,系统因为采用了Class A 模式从而牺牲了一定控制下发的实时性来换取更佳的低功耗性能,还有进一步改进的空间.总而言之,基于LoRaWAN 技术设计的智慧农业系统方案还可应用于多种场合环境监测应用,具有一定的应用前景,希望能够为今后LoRaWAN 应用开发提供一定的参考借鉴.