黃一棟
(廈門大洋通信有限公司,福建 廈門 361000)
隨著萬物互聯的到來,越來越多的無線通信終端產品走入大眾的視野,這些產品在短距離[1]應用方面大都以Wi-Fi、Zigbee、BLE為主,長距離應用方面大都以NBIOT、Sigfox、LoRaWAN為主。不同的無線技術有不同的應用領域,基于物聯網的特殊性、復雜性以及多樣性,利用無線技術來從原型開發到實現一個可用的物聯監測系統需要較長的時間,而這時間可能會影響最終項目的落地時間甚至落后競爭對手。
軟件工程上提倡DRY原則[2],因此尋找一種能快速開發出可用的物聯網監測系統對物聯網廠商來說尤為重要。
得益于LoRaWAN設備通信標準,網關通信標準。不同家的終端產品、網關可以在不同平臺上混用。對用戶而言,終端和網關選擇性多樣,不用綁定固定廠家。因此涌現了很多開源的LoRaWAN終端、網關和網絡服務器,這些開源為LoRaWAN的物聯網監測系統提供了極大的便利,縮短了開發一個可用的物聯網監測系統的開發時間和開發成本。
LoRaWAN系統架構圖1所示,主要由終端、網關和服務器組成。

圖1 LoRaWAN系統架構圖
LoRaWAN終端:作為感知探測層,用于采集現場數據,執行現場指令,是系統末端的執行器,也是LoRaWAN系統中個數最多的角色,終端按LoRaWAN規范細分為3類,含ClassA、ClassB以及ClassC,各適用于不同實時性、功耗要求的場合里,電池產品大部分以ClassA為主,實時受控產品一般以ClassC為主。
LoRaWAN網關:網關作為終端和網絡服務器的橋接,在LoRaWAN系統里擔當轉發透傳的角色,不做設備管理等,不像Zigbee/BLE Mesh的入網管理都是直接在網關設備上進行承擔處理。
LoRaWAN服務器:分為網絡服務器和應用服務器,其中網絡服務器用于終端設備的管理、網關的注冊管理以及對終端產品進行自適應速率調節等,應用服務器側重在最終產品的應用屬性可視化展示,將美觀的UI呈現給用戶。
LoRaWAN終端前幾年主要以MCU+LoRa RF IC來實現,其中RF IC主要使用Semtech的sx1276、sx1262等,也有SIP封裝的方案如上海翱翔的ASR6501、ASR6502,臺灣群登的S76S、S78S,基于如上方案設計的無線模組因芯片體積關系模組都較大,因此選型當下最新的SoC LoRa芯片STM32WLE5CC, 該芯片基于ARM Cortex-M4內核,256Kbytes Flash,支持LoRa/FSK調制方式。溫濕度傳感器選擇中科銀河芯的國產型號GXHT30,該型號軟硬件完全兼容國外SHT30型號。得益于STM的STM32CubeMX軟件,開發者可以很快地創建基于STM32WL的可用工程模板。終端硬件框圖如圖2所示。

圖2 LoRaWAN終端框圖
硬件無線模組上,針對不同國家適用的頻段不同,分為低頻頻段和高頻頻段2個版本,硬件區別主要在芯片天線出口、RF匹配線路上以及所用天線的差異,該部分基本可以參考STM32WL的參考線路進行布局。
LoRaWAN軟件上有基于不同硬件平臺的參考實現,LoRaWAN聯盟對此提供了開源參考實現,該方式相比Zigbee/BLE Mesh等而言讓開發者更容易快速上手并從零實現一個可用的LoRaWAN產品,目前市面上的LoRaWAN商用產品也都是參考LoRaWAN聯盟的參考實現,該參考實現放在github的開源倉庫里,在開源倉庫里直接搜索LoRaMacnode名稱即可找到。
LoRaWAN參考實現提供了入網功能,入網后的上下行功能以及LoRaWAN Mac層的參考實現,其他方面的功能實現,如OTA功能,需要開發者自行制定統一的應用層協議。得益于STM32WLE5CC的256KBytes Flash,用戶可以很方便地基于內部Flash實現在線OTA功能,無須再額外添加外部Flash。對應用層,LoRaWAN標準不像Zigbee有針對應用層協議定義了Zigbee Cluster Library,簡稱ZCL[3],ZCL里面的定義詳細到開關燈的應用層指令如何構造。BLE Mesh也和Zigbee一樣對應用層進行定義,BLE Mesh為應用層協議定義的規范為Model層規范,該規范同樣對如開關燈的應用指令構造進行了詳細定義。對應用層進行統一規范有助于不同家的設備可以相互兼容,如A家的開關燈可以識別B家的開關按鈕。LoRaWAN標準只針對Phy層和Mac層進行定義,上層的應用層沒有進行規范,應用層需要由實現者來定義,應用層協議的定義主要側重在編解碼方面,該部分用于平臺和設備識別要交互的應用層指令。一種可用的應用編解碼格式如下表1和表2所示。

表1 應用層上行包指令幀格式

表2 應用層下行包指令幀格式
上行指令格式如下。該格式可以用在大部分情況,特別是傳感監測場合,通過事先對ReportType約定定義好,如該字段為1代表溫度類型,2代表濕度類型等,按這樣就可以基于此不斷擴展新型傳感器的上報支持。
下行指令格式如下。
通過對CmdType進行約定,如該字段為1代表開,為0代表關,來滿足該格式不同下行指令的需求,同時具有對新指令需求的擴展性。
LoRaWAN網關在LoRaWAN系統中主要作為終端和服務器的橋接中介,負責接收來自終端設備的上行數據,將其進行IP化傳給網絡服務器,同時負責接收網絡服務器的下行指令并下發給終端。網關硬件都是基于Semtech的SX1301/SX1302,Semtech提供了基于Linux系統的驅動移植參考以及網關參考板,市面也有很多成熟網關現成SX1301模塊,通過搭配樹莓派可以很快地搭建一個可用的LoRaWAN網關[4],同時也有很多商用的現成網關。網關的參考實現除了提供驅動模塊的實現,同時也提供了網關和網絡服務器通信規約的實現,現有市面上的LoRaWAN網關都支持Semtech定義的網關和網絡服務器的通信規約,各家網絡服務器也都支持該通信規約,因此不同家的網關都能支持不同家的網絡服務器,網關在使用上就變得簡單易用,通過修改網關的網絡服務器定向地址就可以輕松連上不同家的網絡服務器。網關部分可以直接選用現成sx1301模塊配合樹莓派或者商用的網關,商用網關一般都有經過相關產品認證如3C、CE、FCC認證等,對出口型的用戶來說可以省去很多與認證相關的工作。網關可以直接選用Sandbox 的LoRaGoPort、Semtech的SX1302CSS915GW1、IMST的Lite Gateway等。
得益于LoRaWAN的開放生態,不管是終端,還是網關,甚至是LoRaWAN網絡服務器都有不少開源實現方案供參考,如The Things Network(業界簡稱TTN)、ChirpStack(前身LoRaServer)、ChirpStack的開源Licence是MIT類型,允許任意二次開發,不用承擔商業風險,因此ChirpStack的開源實現在不少商用上能看到其身影。也有部分網關直接把開源的網絡服務器集成到網關內部,方便部署在一些不連通外網的場合。
LoRaWAN網絡服務器為應用服務器對接提供了HTTP RestAPI[5]、MQTT[6]等多種整合方式,因此應用服務器也能利用很多成熟的框架來進行實現。物聯網監測側重采集終端的數據展示,因此應用服務器功能側重數據展示,數據展示方面也有很多實現快速整合的開源方案,如Node-Red以及互聯網企業運營后臺應用的數據可視化系統Grafana[7],Grafana可視化系統開源免費,可自己部署到服務器上,最重要的是Grafana要可視化展示的數據源可以直接在Grafana配置要展示的數據庫就可以。因此,只要在網絡服務器和應用服務器可視化系統中間,自己開發一個中間件,通過中間件把網絡服務器的LoRaWAN終端數據寫入數據庫就可以完成可視化系統的快速實現。數據庫有多種開源實現,如MySql、Mongodb等。
2.3.1 LoRaWAN網絡服務器的部署實現
服務器一般都部署在Linux系統,如CentOS、Ubuntu等,早些年部署開源方案的服務器都需要配置一堆環境才能部署好,花費時間可能幾小時甚至幾天都有。這幾年隨著docker的興起,服務器部署與前幾年相比,快捷方便了許多,基本1h內就可基于docker部署運作起來。如下以開源ChirpStack服務器在Ubuntu的部署實現為例。
克隆服務器docker資源并進入下載的目錄

在ChirpStack上注冊網關設備后,隨后在網關的配置文件中修改網絡服務器的定向地址到該部署服務器的地址后,網關即可連接上部署好的網絡服務器。
給終端設備供電并開機,終端設備會自行通過網關和網絡服務器進行交互并完成入網操作,隨后按周期上報當前狀態數據。
2.3.2 中間件的快速實現
ChirpStack網絡服務器提供了MQTT對接支持,因此中間件可以通過實現MQTT Client來訂閱服務器的數據,基于此中間件便可以通過訂閱相應的MQTT主題來獲得LoRaWAN終端上報的狀態數據。
中間件需要訂閱的Topic規則如下。

中間件可以通過很多種開發語言來實現,如C#、Golang、JavaScript等,使用基于JavaScript的NodeJS可以很快地實現一個MQTT中間件,該中間件主要功能為從網絡服務器訂閱LoRaWAN終端的上報數據,并將其寫入MySql數據庫中以供應用服務器的可視化系統展示使用。
2.3.3 應用服務器展示系統的部署實現
應用服務的可視化展示系統使用開源方案Grafana來快速實現,Grafana開源可視化展示系統的部署實現也和網絡服務器一樣易用快捷,僅需幾個步驟就可以部署運行起來,如下以Grafana部署到Ubuntu服務器上為例。
在服務器上部署組件

通過運行sudo /bin/systemctl start grafana-server啟動Grafana展示系統,在瀏覽器輸入服務器IP地址加端口號3000后即可看到展示系統。
配置Grafana可視化系統要展示的數據源為MySql,新建要展示的溫度和濕度DashBoard展示面板,同時對展示面板要展示的屬性和MySql的數據字段進行關聯后即可進行展示,LoRaWAN溫濕度終端的展示效果如圖3所示。

圖3 LoRaWAN終端當前最新溫度濕度信息展示
該系統還可以根據不同時間維度來查看歷史數據,如最近一周、最近一個月、最近一年等,很適合物聯網監測數據的可視化及分析。
該文提出的基于無線LoRaWAN物聯網監測系統的快速實現,詳細說明了LoRaWAN終端模塊的軟硬件實現方法以及提供了一種可用于不同傳感類型監測的統一可拓展應用層通信協議,提供了LoRaWAN網關的快速實現方法以及幾種可用現成網關參考,對網絡服務器的開源實現進行說明以及實際部署運行說明,最后對應用服務器可視化監測系統快速實現的中間件實現方法進行說明,并對應用監測展示系統的最終實際部署運行進行說明,物聯網技術特別是無線物聯網方面存在復雜多樣性、細分領域繁多、開發周期長的特點,希望該文能為快速切入物聯網系統開發,特別是LoRaWAN物聯網的愛好者開發者提供參考。