• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Node-RED的窄帶物聯(lián)網(wǎng)教學及實驗設(shè)計

      2019-12-06 08:48:53張笑非曲銘雯段先華劉鎮(zhèn)
      軟件 2019年10期

      張笑非 曲銘雯 段先華 劉鎮(zhèn)

      摘? 要: 物聯(lián)網(wǎng)技術(shù)在各行各業(yè)的廣泛運用使得社會對物聯(lián)網(wǎng)專業(yè)人員的需求急劇增加,而硬件、軟件、以及相互間的融合是創(chuàng)新能力培養(yǎng)的重點。本文以窄帶物聯(lián)網(wǎng)技術(shù)框架為基礎(chǔ),提出了基于Node-RED流式編程的物聯(lián)網(wǎng)應用設(shè)計教學方法,通過Node-RED提供的基本功能模塊節(jié)點,示范了以中國移動通信窄帶模組M5310-A為硬件、以MQTT為通信協(xié)議,通過基于組態(tài)軟件設(shè)計的方式,完成物聯(lián)網(wǎng)應用的設(shè)計與實現(xiàn)方法。通過將該教學方法運用到物聯(lián)網(wǎng)專業(yè)相關(guān)課程的理論和實踐教學中,學生可以快速有效搭建并驗證物聯(lián)網(wǎng)應用設(shè)計的正確性。

      關(guān)鍵詞: 流式編程;M5310-A;MQTT;有限狀態(tài)機

      中圖分類號: TP391.41? ? 文獻標識碼: A? ? DOI:10.3969/j.issn.1003-6970.2019.10.005

      本文著錄格式:張笑非,曲銘雯,段先華,等. 基于Node-RED的窄帶物聯(lián)網(wǎng)教學及實驗設(shè)計[J]. 軟件,2019,40(10):2024

      Narrow Band Internet of Things Teaching and Experimental Design Based on Node-RED

      ZHANG Xiao-fei1,2, QU Ming-Wen1,3, DUAN Xian-hua1, LIU Zhen1

      (1. School of Computer, Jiangsu University of Science and Technology, Zhenjiang 212003, China; 2. Faculty of Information, Beijing University

      of Technology, Beijing 100124, China; 3. School of Electronic and Information Engineering, Soochow University 215006, China)

      【Abstract】: The widespread use of Internet of Things (IoT) technology in a wide range of industries has led to a sharp increase in the demand for IoT professionals, while hardware, software, and their integration are the focus of students innovation. Based on the framework of narrow band IoT technology, this paper proposes a teaching method for IoT application design with flow-based programming of Node-RED. Through the basic function modular nodes provided by Node-RED, the M5310-A of China Mobile is used as the hardware of narrow band module and MQTT is used as the protocol of end-to-end communication, the design and implementation method of the Internet of Things application is completed based on the pattern of configuration software design. By applying this teaching method to the theoretical and practical teaching of IoT-related courses, students can quickly and effectively build and verify the correctness of IoT application design.

      【Key words】: Flow-based programming; M5310-A; Message queuing telemetry transport; Finite state machine

      0? 引言

      當前,窄帶技術(shù)是物聯(lián)網(wǎng)(Internet of Things,IoT)領(lǐng)域的一個重要分支,窄帶物聯(lián)網(wǎng)(Narrow Band Internet of Things,NB-IoT)是高校物聯(lián)網(wǎng)專業(yè)教學中的一門重要課程,目前相關(guān)的教材更多側(cè)重于NB- IoT底層通信機制的原理和規(guī)范,圍繞著NB-IoT關(guān)鍵技術(shù)進行應用開發(fā)的教材還相對較少。Node-RED是由IBM Emerging Technologies團隊開發(fā)的圖形化可拖拽式數(shù)據(jù)流編程軟件,根據(jù)服務(wù)中數(shù)據(jù)的處理流程編寫flow實現(xiàn)服務(wù)程序[1]。一些研究已經(jīng)開始嘗試在物聯(lián)網(wǎng)專業(yè)教學中使用Node-RED,文獻[2]展示了使用樹莓派(Raspberry Pi,RPi)和Node-RED等高級開源工具在物聯(lián)網(wǎng)課程教學和學習中的適用性和實用性,文獻[3]甚至開始為本科階段的工程專業(yè)學生提供了基于Node-RED的IoT研討會課程。此外,文獻[4]通過Node-RED流實現(xiàn)了邊緣側(cè)仿真框架所需的微服務(wù),文獻[5]闡述了Node-RED在物聯(lián)網(wǎng)網(wǎng)關(guān)組態(tài)軟件設(shè)計用的應用。一些基于云計算的解決方案[6-8]若采用基于組態(tài)方式的技術(shù)架構(gòu),則可以進行更加靈活的設(shè)計開發(fā)和組件重用。物聯(lián)網(wǎng)課程中內(nèi)容的理解和實踐在很大程度上取決于工具的高可用性和易用性,本文將就如何利用Node-RED進行窄帶物聯(lián)網(wǎng)技術(shù)課程教學和實驗設(shè)計給出詳細介紹。

      1? NB-IoT教學設(shè)計

      NB-IoT是由3GPP開發(fā)的低功率廣域網(wǎng)(Low Power Wide Area Network,LPWAN)無線電技術(shù)標準,用于為IoT提供廣域覆蓋[9],M5310-A是一款由中國移動推出的工作在頻段band3、band5、band8的工業(yè)級多頻段NB-IoT模組,MQTT[10]是基于PUB/SUB消息傳遞協(xié)議的ISO標準(ISO/IEC PRF 20922)。本教學設(shè)計以中國移動M5310-A使用手冊[11]為教學素材,以Node-RED為實驗環(huán)境,通過設(shè)計MQTT協(xié)議有限狀態(tài)自動機,利用串口執(zhí)行AT命令講解NB-IoT通信的整個過程。

      中國移動M5310-A對MQTT的支持通過十條AT命令完成,如表1所示,主要涉及M5310A的MQTT參數(shù)設(shè)置、與MQTT Broker的連接、MQTT狀態(tài)統(tǒng)計、MQTT對話的訂閱、MQTT對話的消息推送、MQTT對話訂閱的解除、與MQTT Broker連接的斷開、MQTT參數(shù)的刪除、MQTTTO、MQTTPING。

      圖1給出了M5310-A的6種連接狀態(tài)以及之間的遷移關(guān)系,在教學設(shè)計中,本文將通過引入有限狀態(tài)機對M5310-A的連接狀態(tài)集合、初始狀態(tài)、狀態(tài)遷移函數(shù)、終止狀態(tài)、觸發(fā)事件集合等進行定義。通過講解M5310-A如何從‘未初始化狀態(tài)經(jīng)過相應的觸發(fā)及事件逐步遷移到‘已連接狀態(tài),以及M5310-A接收的消息如何影響當前狀態(tài)并遷移到其它的狀態(tài),從而幫助學生對M5310-A完成MQTT通信的過程有更深入的理解。

      教學內(nèi)容設(shè)計中,將M5310-A的有限狀態(tài)機定義如下:

      定義1 是一個五元組,對應M5310-A的有限狀態(tài)自動機(Finite State Machine,F(xiàn)SM)。

      定義2 Σ={‘OK, ‘Error, ‘Timeout, ‘+MQTTOP EN:OK, ‘+MQTTSUBACK, ‘+MQTTPUBCOMP, ‘+MQTTDISC:OK},是一個集合,元素為M5310-A在執(zhí)行完相應AT命令后,從串口上能夠接收到的返回消息、當前狀態(tài)的超時消息、以及從MQTT Broker接收到的協(xié)議消息,這些元素作為M5310-A的FSM輸入,將觸發(fā)其在不同狀態(tài)間進行遷移。

      定義3? ,是一個有限非空集合,共包含6個元素,分別對應M5310-A的6個連接狀態(tài)‘未初始化、‘已初始化、‘首次連接、‘已連接、‘重新連接、‘已斷開。

      定義4 ,是集合中的一個元素,表示M5310-A的初始狀態(tài),在這里為‘未初始化,即。

      定義5 ,是一個狀態(tài)遷移函數(shù),函數(shù)的輸入為兩個參數(shù),分別是當前狀態(tài)和接收到的消息,且。則返回相應遷移后的狀態(tài),。

      定義6 ,是一個可以為空集的集合,其中的元素代表M5310-A最終的連接狀態(tài)。由于M5310-A的6個連接狀態(tài)都可以遷移到其它某個或某些狀態(tài),所以不存在最終狀態(tài),因此該集合為空。

      其中對于狀態(tài)遷移函數(shù)的設(shè)計,可以在教學過程中使用通過狀態(tài)/事件表來進行說明。狀態(tài)/事件表的表達方式有很多,這里將M5310-A的狀態(tài)遷移表定義為表2中的內(nèi)容。

      2? NB-IoT實驗設(shè)計

      在窄帶物聯(lián)網(wǎng)實驗設(shè)計中,可以通過Node-RED提供的若干種節(jié)點完成與M5310-A的串口通信、通信狀態(tài)遷移功能、以及其它一些輔助功能的實現(xiàn)。如圖2所示,這些節(jié)點包括‘serial輸入節(jié)點、‘serial輸出節(jié)點、‘dsm節(jié)點、‘inject節(jié)點、‘function節(jié)點、 ‘delay節(jié)點、‘i2c輸入節(jié)點、以及‘mqtt接收節(jié)點。

      圖2(a)和(b)是負責與M5310-A完成串口通信的Node-RED預裝節(jié)點,其中(a)是串口消息接收節(jié)點、(b)是串口消息發(fā)送節(jié)點。M5310-A的串口參數(shù)為波特率9600、數(shù)據(jù)位8bit、無奇偶校驗、停止位1bit。圖2(c)是負責實現(xiàn)M5310-A通信狀態(tài)遷移的節(jié)點,是依據(jù)有限狀態(tài)機模型實現(xiàn)的動態(tài)狀態(tài)機,它是一個沒有使用外部庫的純Node.js包。該‘dsm節(jié)點對應的GitHub資源地址為https://github. com/cflurin/node-red-contrib-dsm,在Node-RED環(huán)境中的安裝命令為npm install node-red-contrib-dsm。圖2(d)是Node-RED預裝的注入節(jié)點,用于觸發(fā)整個實驗流程的啟動、或者周期性產(chǎn)生消息由M5310-A進行發(fā)送。圖2(e)是Node-RED預裝的函數(shù)節(jié)點,可以通過編寫JavaScript函數(shù)處理輸入該節(jié)點的消息,該消息被稱為msg,而該‘function節(jié)點缺省會處理msg的屬性payload中的內(nèi)容。圖? 2(f)是Node-RED預裝的延遲節(jié)點,可以對經(jīng)過該節(jié)點的消息msg進行延遲轉(zhuǎn)發(fā)、或限制msg經(jīng)過該節(jié)點的頻率。圖2(g)是讀取基于I2C接口的傳感器的節(jié)點,該節(jié)點與Raspberry Pi I2C驅(qū)動程序通信并使用node-I2C軟件包完成I2C通信,對應的GitHub資源地址為https://github.com/nielsnl68/node- red-contrib-i2c,在Node-RED環(huán)境中的安裝命令為npm install node-red-contrib-i2c。圖2(h)是Node- RED預裝的MQTT數(shù)據(jù)接收節(jié)點,通過指定MQTT Broker的IP地址、端口號、以及Topic名稱,完成MQTT消息的訂閱。

      面向M5310-A的Node-RED流設(shè)計如圖3(a)所示,其中注入節(jié)點‘開始負責M5310-A啟動的觸發(fā),其后續(xù)節(jié)點‘初始化負責設(shè)置M5310-A的參數(shù)和初始狀態(tài)(‘未初始化)。節(jié)點‘執(zhí)行AT命令負責根據(jù)M5310-A的當前狀態(tài)構(gòu)造相應的AT命令,節(jié)點‘有限狀態(tài)機則負責根據(jù)當前M5310-A的狀態(tài)和事件控制其狀態(tài)的遷移。節(jié)點‘M5310-A接收和節(jié)點‘M5310-A發(fā)送分別通過串口完成消息的接收與發(fā)送。節(jié)點‘讀取光敏強度會周期性地觸發(fā)下一個節(jié)點的運行,節(jié)點‘PCF8591負責通過I2C接口讀取光敏傳感器的數(shù)據(jù),節(jié)點‘推送數(shù)據(jù)會判斷當前M5310-A是否處于狀態(tài)‘已連接,如果為真則將讀取的光敏強度數(shù)據(jù)利用節(jié)點‘M5310-A進行MQTT推送,反之則不推送。這其中關(guān)鍵的工作是圖3(a)節(jié)點‘有限狀態(tài)機的實現(xiàn)細節(jié),需要滿足表2中的設(shè)計,關(guān)鍵的實現(xiàn)代碼如下:

      {

      "currentState": "UNINIT",

      "states": {

      "UNINIT": {

      "OK": "INITED"

      },

      "INITED": {

      "OK": "CONN"

      },

      "CONN": {

      "+MQTTOPEN:OK": "OPENED"

      },

      "OPENED": {

      "+MQTTDISC:OK": "CLOSED"

      }

      ……

      }

      }

      其中給出了M5310-A在處于每個狀態(tài)時,在接收到指定消息后遷移目標狀態(tài)的程序定義。而節(jié)點‘執(zhí)行AT命令中的關(guān)鍵代碼如下所示:

      if(msg.topic=="UNINIT"){

      return {payload:'AT+MQTTCFG="hostname", port,

      client_id,keepalive,"user_id","password", 1\r\n'}

      }

      ……

      else if(msg.topic=='OPENED'){

      global.set('state','OPENED')

      }

      其中會根據(jù)M5310-A的當前狀態(tài)控制向窄帶模組所發(fā)送的AT命令,這里的參數(shù)通過關(guān)鍵字替代進行表示。為了保證存在有效MQTT連接后才使得向MQTT Broker推送節(jié)點‘PCF8591所采集到的光敏數(shù)據(jù),特別設(shè)置了一個Node-RED全局變量‘state。當M5310-A狀態(tài)為節(jié)‘OPENED時,設(shè)置該全局變量也為‘OPENED。因此,節(jié)點‘推送數(shù)據(jù)會根據(jù)這個全局變量來控制是否通過AT命令向MQTT Broker推送節(jié)點‘PCF8591所采集的光敏數(shù)據(jù),關(guān)鍵代碼如下:

      if(global.get('state')=='OPENED'){

      return {payload:'AT+MQTTPUB=

      "topic_name",2,0,0,0,'+msg.payload+'\r\n'}

      }

      其中當該全局變量為‘OPENED時,則通過M5310-A的‘MQTTPUB命令推送數(shù)據(jù),其中MQTT的topic name通過關(guān)鍵字進行了替代。

      此外,對圖3(a)中基于M5310-A的數(shù)據(jù)發(fā)送的正確性,可以通過對其數(shù)據(jù)進行MQTT訂閱來驗證。圖3(b)中通過節(jié)點‘MQTT接收完成MQTT訂閱功能,然后將接收到的數(shù)據(jù)通過節(jié)點‘MQTT消息進行輸出并作觀察。

      3? 實驗與結(jié)果

      圖4中給出了基于Node-RED流設(shè)計的M5310- A MQTT連接成功的結(jié)果??梢钥吹剑琈5310-A接收到了消息‘+MQTTOPEN:OK,該消息屬于定義2中的集合。根據(jù)M5310-A的狀態(tài)、表2中定義的狀態(tài)遷移表、以及Node-RED中的實現(xiàn)代碼,實現(xiàn)了M5310-A與MQTT Broker的有效連接。

      如圖5所示,實驗中所連接的MQTT Broker是在中國移動OneNET平臺上創(chuàng)建的對象,其中設(shè)備ID為525904487的資源就是接入的測試用M5310-A模組。在成功連接后,測試用M5310-A會持續(xù)不斷通過MQTT協(xié)議向OneNET推送Node-RED流中的PCF8591所采集的光敏數(shù)據(jù)。

      4? 結(jié)束語

      本文針對物聯(lián)網(wǎng)專業(yè)窄帶技術(shù)課程中所涉及的硬件、軟件、通信等內(nèi)容,利用基于組態(tài)設(shè)計方法的Node-RED平臺實現(xiàn)面向M5310-A窄帶通信的教學和實驗案例,幫助學生掌握開發(fā)基于窄帶通信的物聯(lián)網(wǎng)應用所需的基本方法。此外,通過對案例中的傳感器模塊進行替換、或?qū)ode-RED流進行擴展,融入包括面向Web、數(shù)據(jù)庫管理、機器學習等一系列Node-RED組件,使得學生能夠開發(fā)具有‘硬、‘通、‘軟,‘智等全要素的物聯(lián)網(wǎng)窄帶應用,從而能夠更好地進行創(chuàng)新創(chuàng)業(yè)活動。

      參考文獻

      [1]王江波. 基于Node-red與Redis的實時流數(shù)據(jù)處理模型的設(shè)計與應用[D]. 電子科技大學, 2017.

      [2]Chaczko Z, Braun R. Learning data engineering: Creating IoT apps using the node-RED and the RPI technologies[C]. International Conference on Information Technology Based Higher Education & Training. IEEE, 2017: 1-8.

      [3]Krishnamurthi R. Teaching Methodology for IoT Workshop Course Using Node-RED[C]. 2018 Eleventh International Conference on Contemporary Computing (IC3). 2018.

      [4]翟巖龍, 孫文心, 包天虹, 楊凱, 卿杜政. 基于微服務(wù)的邊緣側(cè)仿真方法及框架研究[J]. 系統(tǒng)仿真學報, 2018, 30(12): 4536-4545.

      [5]湯學明. 物聯(lián)網(wǎng)網(wǎng)關(guān)數(shù)據(jù)流圖形化組態(tài)技術(shù)研究[D]. 冶金自動化研究設(shè)計院, 2018.

      [6]李紅輝, 關(guān)婷婷, 楊芳南. 云計算平臺狀態(tài)監(jiān)控技術(shù)研究與應用[J]. 軟件, 2018, 39(1): 9-13.

      [7]王曉暉, 喬通. 云環(huán)境下面向感知數(shù)據(jù)匯集的通信服務(wù)系統(tǒng)設(shè)計與實現(xiàn)[J]. 軟件, 2016, 37(2): 155-159.

      [8]尹航, 楊歡, 崔海斌, 汪棟, 郭唐寶. 基于大數(shù)據(jù)應用的虛擬化云平臺建設(shè)方法研究[J]. 軟件, 2018, 39(4): 201-207.

      [9]Wang Y P E, Lin X, Adhikary A, et al. A Primer on 3GPP Narrowband Internet of Things (NB-IoT)[J]. IEEE Communica tions Magazine, 2016, 55(3).

      [10]IBM. MQTT 3.1.1 Specification[S]. OASIS. December 10, 2015. Retrieved April 25, 2017.

      [11]林紫微. M5310-A MQTT使用指導[EB]. 中國移動通信有限公司, June 11, 2018.

      通化市| 闽侯县| 千阳县| 四平市| 张家口市| 滕州市| 洪雅县| 荃湾区| 分宜县| 蒙山县| 临夏县| 宝坻区| 巴林右旗| 凌源市| 抚远县| 徐汇区| 嘉善县| 公主岭市| 平山县| 洛浦县| 八宿县| 六枝特区| 天等县| 蛟河市| 墨玉县| 平原县| 什邡市| 宁海县| 邵阳县| 阿坝| 苏尼特左旗| 重庆市| 清水河县| 神木县| 彭州市| 白银市| 应城市| 扎囊县| 大安市| 水城县| 永安市|