2. 福建省网络安全与密码技术重点实验室, 福州 350007
2. Fujian Provincial Key Lab of Network Security & Cryptology, Fujian Normal University, Fuzhou 350007, China
在低功耗广域网技术兴起之前, 大多数的无线技术都难以做到远距离和低功耗的兼顾. 目前大部分的智慧农业系统采用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应用系统的开发提供良好可靠的方案基础.
1 系统框架基于LoRaWAN设计的智慧农业系统, 由LoRa终端、LoRa网关集中器以及ChirpStack服务、Flask Web应用4个部分组成. 在LoRa终端上外接多种传感器与执行器, 能够将数据封装通过LoRa传输至网关集中器; LoRa网关集中器能够并行接收处理多个终端节点的数据并通过UDP协议传输至服务器; 服务器结合ChirpStack服务与Flask Web应用为用户呈现可视化监测与管理界面. 系统框架如图1所示.
2 系统硬件设计 2.1 LoRa终端
LoRa终端系统采用以STM32F103VET6为控制芯片的开发板作为控制器, 搭载传感器模块(DHT11温湿度传感器、FC-28土壤湿度传感器、TSL2561光强传感器)、LoRa通信模块(RAK811 Breakout Board)、LCD液晶触摸屏模块与执行模块(水泵、散热器), 整个LoRa终端的硬件结构如图2所示. LoRa终端能进行传感器数据的采集以及通过LoRa通信模块传输数据, 同时还具有液晶屏显示与自动灌溉功能, 利用串口与PC端连接还可以接收PC端的配置指令.
RAK811远距离LoRa收发模块, 其拥有小巧、简单、远距离传输和低功耗的特点, 能够很好地应用于远距离无线传输解决方案当中, 支持P2P通信和LoRaWAN组网方式, 该模块集成了Semtech的SX1276芯片, 以及STM32L芯片, 并且提供了UART接口, 能够通过简单的AT串口指令来进行LoRa模块的配置与数据收发.
2.2 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].
3 系统软件设计 3.1 LoRa终端入网与运行流程根据LoRaWAN协议, 终端入网首先需要定义终端类型、入网方式以及通信频段. 由于LoRa通信模块支持AT指令进行配置, 将LoRa终端利用串口配置为符合此次系统需求的Class A类型, 入网方式为 OTAA空中激活模式, 频段为中国的CN_470_510; 其次此系统OTAA入网方式还需要为终端配置DevEUI、AppKey两个入网参数. 在上述配置完成基础上, 终端开机后可以自行进行入网请求操作, 并在入网成功之后结合Class A工作模式进行传感器数据的采集与上传等工作, 整个终端运行流程如图4所示.
3.2 LoRa网关集中器数据转发功能
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频段的数据监听与转发至指定服务器的功能.
3.3 ChirpStack服务部署与配置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格式的数据, 以便后续存储后便捷提取解析数据.
3.4 Flask Web应用开发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终端数据消息的线程来进行终端上行数据的数据库存储操作.
3.5 系统数据通信流程
整个LoRaWAN智慧农业系统搭建完成之后, 其数据通信流程如图7所示.
具体过程如下:
(1) LoRa终端主控板在通过表1对传感器数据进行封装后, 利用串口AT指令发送十六进制格式原始封装数据至LoRa模块, LoRa模块会通过AppKey衍生的AppSKey应用层会话密钥来对数据进行AES128位算法加密填入MAC层帧中的FRMPayload部分再通过LoRa发送至网关集中器.
(2) LoRa网关集中器在接收到终端的上行数据后, 对其进行Base64编码再通过UDP协议传输至ChirpStack服务端.
(3) ChirpStack服务中Network Server先将网关集中器转发上来的数据进行提取并且整理成JSON格式, 然后通过gRPC传输至Application Server, Application Server会负责对数据进行解密操作之后发布到MQTT Broker.
(4) Flask Web应用通过订阅MQTT相应主题来获取到Application Server解密之后的终端JSON格式消息, 然后进行数据库的存储操作.
4 系统测试与总结系统测试硬件实物框架图如图8所示.
在LoRa终端节点开机入网成功之后, 采集完传感器环境数据后结合Class A类型工作模式发送至LoRa网关集中器, 通过串口调试工具查看LoRa终端运行结果如图9所示.
在LoRa网关集中器中, 可以开启监听日志程序util_pkt_logger来进行数据传输监听, 结果如图10所示.
在LoRa网关将终端数据通过UDP传输到服务器后, 通过开启Flask Web应用服务, 结合ChirpStack服务运行后, 用户进行系统登录后, 观察传感器数据界面实际运行效果如图11所示, 可以观察到LoRa终端数据最终能够稳定地传输并更新展示在了Web界面当中.
本文所提出的基于LoRaWAN技术设计的智慧农业系统方案, 实现了农业大棚环境数据的远程监测管理等功能, 并且对整个系统的架构、软硬件设计以及程序运行流程做了详细的介绍. 系统具有开发快速便捷, 数据传输安全可靠的优点, 同时, 系统因为采用了Class A模式从而牺牲了一定控制下发的实时性来换取更佳的低功耗性能, 还有进一步改进的空间. 总而言之, 基于LoRaWAN技术设计的智慧农业系统方案还可应用于多种场合环境监测应用, 具有一定的应用前景, 希望能够为今后LoRaWAN应用开发提供一定的参考借鉴.
[1] |
郑贵林, 汪体成. 基于LoRa的温室环境智能监控系统的设计. 江苏农业科学, 2019, 47(10): 216-219. |
[2] |
龚天平. LORA技术实现远距离、低功耗无线数据传输. 电子世界, 2016(10): 115, 117. |
[3] |
赵兰枝. 基于LoRaWAN物联网技术的农田环境监测系统研究. 电脑编程技巧与维护, 2019(10): 13-14, 37. |
[4] |
刘映江. 基于LoRaWAN物联网技术的农田环境监测系统的设计[硕士学位论文]. 成都: 西南石油大学, 2018.
|
[5] |
Ibrahim NHN, Ibrahim AR, Mat I, et al. LoRaWAN in climate monitoring in advance precision agriculture system. Proceedings of 2018 International Conference on Intelligent and Advanced System. Kuala Lumpur, Malaysia. 2018. 1–6.
|
[6] |
李达, 杨祯, 刘辉席, 等. 嵌入式Linux的LoRaWAN集成网关系统设计. 单片机与嵌入式系统应用, 2019, 19(7): 10-14. |
[7] |
李超, 徐云龙, 华中伟, 等. 一种基于Python Flask的Web服务器端设计. 信息与电脑, 2019(8): 87-88. |