国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

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

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

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

中圖分類號(hào): TP391.41? ? 文獻(xiàn)標(biāo)識(shí)碼: A? ? DOI:10.3969/j.issn.1003-6970.2019.10.005

本文著錄格式:張笑非,曲銘雯,段先華,等. 基于Node-RED的窄帶物聯(lián)網(wǎng)教學(xué)及實(shí)驗(yàn)設(shè)計(jì)[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? 引言

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

1? NB-IoT教學(xué)設(shè)計(jì)

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

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

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

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

定義1 是一個(gè)五元組,對(duì)應(yīng)M5310-A的有限狀態(tài)自動(dòng)機(jī)(Finite State Machine,F(xiàn)SM)。

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

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

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

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

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

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

2? NB-IoT實(shí)驗(yàn)設(shè)計(jì)

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

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

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

{

"currentState": "UNINIT",

"states": {

"UNINIT": {

"OK": "INITED"

},

"INITED": {

"OK": "CONN"

},

"CONN": {

"+MQTTOPEN:OK": "OPENED"

},

"OPENED": {

"+MQTTDISC:OK": "CLOSED"

}

……

}

}

其中給出了M5310-A在處于每個(gè)狀態(tài)時(shí),在接收到指定消息后遷移目標(biāo)狀態(tài)的程序定義。而節(jié)點(diǎn)‘執(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')

}

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

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

return {payload:'AT+MQTTPUB=

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

}

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

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

3? 實(shí)驗(yàn)與結(jié)果

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

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

4? 結(jié)束語

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

參考文獻(xiàn)

[1]王江波. 基于Node-red與Redis的實(shí)時(shí)流數(shù)據(jù)處理模型的設(shè)計(jì)與應(yīng)用[D]. 電子科技大學(xué), 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)仿真學(xué)報(bào), 2018, 30(12): 4536-4545.

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

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

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

[8]尹航, 楊歡, 崔海斌, 汪棟, 郭唐寶. 基于大數(shù)據(jù)應(yīng)用的虛擬化云平臺(tái)建設(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使用指導(dǎo)[EB]. 中國移動(dòng)通信有限公司, June 11, 2018.

汉中市| 海林市| 福建省| 厦门市| 延边| 贡山| 商丘市| 合水县| 凤冈县| 宜章县| 会宁县| 永顺县| 鄯善县| 鲜城| 阿拉善左旗| 连州市| 那坡县| 惠州市| 从江县| 师宗县| 静宁县| 河北区| 柯坪县| 宣恩县| 龙江县| 台南县| 香格里拉县| 年辖:市辖区| 那曲县| 南康市| 青田县| 额尔古纳市| 桃园市| 岳阳市| 深州市| 化州市| 固原市| 房产| 酉阳| 泊头市| 滦平县|