張美平,陳清建,張少敏,郭 毅
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 應用開發提供一定的參考借鑒.