孫進(jìn) 王凱 王亞剛
摘 要:物聯(lián)網(wǎng)在工業(yè)領(lǐng)域的應(yīng)用日益廣泛,是引領(lǐng)現(xiàn)代工業(yè)發(fā)展的重要技術(shù)。為實(shí)現(xiàn)對工業(yè)設(shè)備的遠(yuǎn)程監(jiān)控,提出一種基于微信公眾平臺(tái)的工業(yè)物聯(lián)網(wǎng)系統(tǒng)。該系統(tǒng)由設(shè)備端、服務(wù)器和移動(dòng)終端組成。服務(wù)器采用Node平臺(tái)搭建,利用Node平臺(tái)異步特性,實(shí)現(xiàn)服務(wù)器高并發(fā)。實(shí)驗(yàn)表明,該設(shè)計(jì)能實(shí)現(xiàn)設(shè)備端和服務(wù)器的HTTP和MQTT協(xié)議通信,用戶可在微信公眾號(hào)嵌入的網(wǎng)頁上實(shí)現(xiàn)對設(shè)備端的遠(yuǎn)程監(jiān)控。
關(guān)鍵詞:微信公眾平臺(tái);服務(wù)器;Node;HTTP;MQTT
DOI:10. 11907/rjdk. 182078
中圖分類號(hào):TP319文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-7800(2019)003-0091-03
0 引言
傳統(tǒng)制造業(yè)正在經(jīng)歷前所未有的轉(zhuǎn)型,物聯(lián)網(wǎng)、 云計(jì)算、大數(shù)據(jù)分析,作為工業(yè)物聯(lián)網(wǎng)和智能制造的核心技術(shù),正在從各個(gè)方面改變著工業(yè)行業(yè),包括產(chǎn)品的設(shè)計(jì)、運(yùn)營、維護(hù)以及供應(yīng)鏈管理[3]。隨著工業(yè)物聯(lián)網(wǎng)(IIo T)技術(shù)[1]的應(yīng)用,提出了更智能更高效的解決方案以提高生產(chǎn)效率[2]。在德國工業(yè)4.0影響下,制造業(yè)掀起了物聯(lián)網(wǎng)應(yīng)用熱潮。自2017年開始,工業(yè)物聯(lián)網(wǎng)發(fā)展正式進(jìn)入第二階段[4]。在工業(yè)物聯(lián)網(wǎng)發(fā)展過程中,PC設(shè)備扮演著重要角色。
智能手機(jī)迅速普及,應(yīng)用廣泛。本文以移動(dòng)設(shè)備為主要終端,提出一種基于微信公眾平臺(tái)的工業(yè)物聯(lián)網(wǎng)系統(tǒng),用戶可通過便于攜帶的移動(dòng)終端實(shí)現(xiàn)對工業(yè)物聯(lián)網(wǎng)設(shè)備的遠(yuǎn)程監(jiān)控,將工業(yè)物聯(lián)網(wǎng)與微信公眾平臺(tái)結(jié)合是本文的研究成果。
1 微信公眾平臺(tái)
隨著微信平臺(tái)市場需求的增長和物聯(lián)網(wǎng)技術(shù)的高速發(fā)展,基于微信開發(fā)應(yīng)用成為一個(gè)新的熱點(diǎn)[5]。本文實(shí)現(xiàn)了將服務(wù)器與微信公眾平臺(tái)對接,采用在公眾號(hào)嵌入網(wǎng)頁的形式實(shí)現(xiàn),用戶可通過網(wǎng)頁實(shí)現(xiàn)對物聯(lián)網(wǎng)設(shè)備遠(yuǎn)程監(jiān)控。微信公眾號(hào)界面如圖1所示,用戶可通過點(diǎn)擊云服務(wù)菜單欄下“我的設(shè)備”按鈕進(jìn)入物聯(lián)網(wǎng)設(shè)備監(jiān)控界面,服務(wù)器自動(dòng)獲取用戶在微信公眾號(hào)下的openid作為登陸賬號(hào),因?yàn)閛penid的唯一性,從而實(shí)現(xiàn)免密碼登陸。
2 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)框架如圖2所示,總體設(shè)計(jì)為物聯(lián)網(wǎng)設(shè)備、微信服務(wù)器、網(wǎng)頁服務(wù)器、HTTP服務(wù)器、MQTT服務(wù)器和ESP8266通信模塊。ESP8266通信模塊和工業(yè)設(shè)備通過RS485通訊接口互相傳輸數(shù)據(jù),傳輸?shù)臄?shù)據(jù)包括工業(yè)設(shè)備實(shí)時(shí)參數(shù)和用戶控制指令數(shù)據(jù)。ESP8266通信模塊將工業(yè)設(shè)備實(shí)時(shí)參數(shù)通過MQTT協(xié)議發(fā)送給MQTT服務(wù)器,MQTT服務(wù)器負(fù)責(zé)將設(shè)備實(shí)時(shí)數(shù)據(jù)和指令轉(zhuǎn)發(fā)。MQTT是IBM 和 Arcom 公司發(fā)明的一項(xiàng)為物聯(lián)網(wǎng)設(shè)計(jì)的消息傳遞技術(shù),它基于TCP/IP 的應(yīng)用層通信協(xié)議[6]。HTTP服務(wù)器負(fù)責(zé)響應(yīng)微信的請求和處理用戶向微信公眾號(hào)發(fā)送的語音、文本等消息。在云服務(wù)器中采用ngnix負(fù)載均衡,根據(jù)不同二級(jí)域名向不同服務(wù)器轉(zhuǎn)發(fā)HTTP請求,從而實(shí)現(xiàn)服務(wù)器的高穩(wěn)定性和高并發(fā)。HTTP協(xié)議是一種面向?qū)ο蟮膫魉蛥f(xié)議,用于從服務(wù)器傳輸超文本到本地瀏覽器[7]。
3 系統(tǒng)硬件設(shè)計(jì)
系統(tǒng)硬件主要是ESP8266通信模塊,其電路原理如圖3所示。ESP8266通信模塊采用ESP8266芯片,該芯片是一款高性能的UART-WIFI (串口-無線)模塊[8],憑借其高集成度、低功耗和易用性在物聯(lián)網(wǎng)應(yīng)用領(lǐng)域獲得好評(píng)[9]。電源芯片采用AMS117為系統(tǒng)提供3.3V穩(wěn)壓電源。串口通訊芯片采用RS485芯片,該芯片采用RS485通訊接口,只需要兩根通訊線即可在兩個(gè)或兩個(gè)以上的設(shè)備之間進(jìn)行數(shù)據(jù)傳輸,采用半雙工通訊方式連接。
4 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)包括ESP8266通信模塊軟件設(shè)計(jì)、服務(wù)器軟件設(shè)計(jì)。為減輕快速增長的網(wǎng)絡(luò)負(fù)載壓力,本文為Web后端服務(wù)器集群搭建了基于Nginx的負(fù)載均衡服務(wù)器[10]。Nginx是反向代理服務(wù)器,通過設(shè)置不同二級(jí)域名,實(shí)現(xiàn)將HTTP請求分發(fā)給不同服務(wù)器,本系統(tǒng)中Nginx與PHP構(gòu)成網(wǎng)頁服務(wù)器。服務(wù)端采用Node平臺(tái),利用Node平臺(tái)異步特性實(shí)現(xiàn)服務(wù)器高并發(fā)。在互聯(lián)網(wǎng)快速發(fā)展的潮流下,物聯(lián)網(wǎng)以及嵌入式開發(fā)也在快速發(fā)展,傳統(tǒng)的開發(fā)方式逐漸被新型物聯(lián)網(wǎng)嵌入式開發(fā)所替代[11],Node.js讓JavaScript在物聯(lián)網(wǎng)和機(jī)器人領(lǐng)域有了廣泛應(yīng)用[12]。
4.1 ESP8266通信模塊軟件設(shè)計(jì)
ESP8266通信模塊軟件設(shè)計(jì)包括MQTT通信接口和歷史數(shù)據(jù)上傳接口,包括MQTT初始化和數(shù)據(jù)上傳接口。通過MQTT初始化連接可實(shí)現(xiàn)與MQTT服務(wù)器建立實(shí)時(shí)通信。歷史數(shù)據(jù)上傳接口是將物聯(lián)網(wǎng)設(shè)備的實(shí)時(shí)數(shù)據(jù)通過主題消息發(fā)送給MQTT服務(wù)器。將采集的數(shù)據(jù)打包成JSON數(shù)據(jù)包,通過發(fā)送POST請求的方式將JSON數(shù)據(jù)包上傳給服務(wù)器。JSON(JavaScript?Object Notation)是一種輕量級(jí)數(shù)據(jù)交換格式,采用完全獨(dú)立于語言的文本格式,是理想的數(shù)據(jù)交換格式[13]。
4.2 服務(wù)器軟件設(shè)計(jì)
MQTT服務(wù)器由Node平臺(tái)搭建,通過開源的Mosca模塊實(shí)現(xiàn)MQTT服務(wù)器設(shè)計(jì)。本文MQTT服務(wù)器解決方案包括用Mosca模塊搭建和Mosquito軟件搭建。Mosca是MQTT在Node.js中的一個(gè)Broker的開源實(shí)現(xiàn),通俗講也就是MQTT中的Server實(shí)現(xiàn)[14]。Mosquitto是一款實(shí)現(xiàn)了 MQTT v3.1 協(xié)議的開源消息代理軟件[15]。在移動(dòng)互聯(lián)網(wǎng)中, 消息推送是很重要的部分,是手機(jī)客戶端信息發(fā)布和通信的重要方式[16]。消息推送服務(wù)器設(shè)計(jì)包括消息發(fā)布接口、客戶端消息處理接口、客戶端訂閱接口。MQTT是專門為低帶寬、不穩(wěn)定網(wǎng)絡(luò)以及計(jì)算和處理能力受限的設(shè)備所設(shè)計(jì)的,協(xié)議采用小型傳輸,耗電量小,能大大降低網(wǎng)絡(luò)流量,最小化數(shù)據(jù)包并有效分配及傳輸[17]。消息發(fā)布接口實(shí)現(xiàn)向客戶端發(fā)布指定主題消息,只有訂閱了主題的客戶端才可以接受消息??蛻舳擞嗛喗涌谪?fù)責(zé)客戶端訂閱主題事件。絕大多數(shù)的Web開發(fā)都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用[18]。HTTP服務(wù)器是Web服務(wù)器的一種,它是基于超文本傳輸協(xié)議HTTP的服務(wù)器[19]。HTTP協(xié)議是目前Internet上使用最廣泛的協(xié)議,其語法定義較為寬松[20]?;贖TTP協(xié)議的HTTP服務(wù)器采用Express框架設(shè)計(jì),設(shè)備歷史數(shù)據(jù)上傳接口負(fù)責(zé)將解析設(shè)備發(fā)送請求的Body解析成JSON數(shù)據(jù),處理好后調(diào)用數(shù)據(jù)庫接口進(jìn)行存儲(chǔ)。接受網(wǎng)頁端發(fā)送的歷史數(shù)據(jù)GET請求,然后調(diào)用數(shù)據(jù)庫接口,將指定設(shè)備的歷史數(shù)據(jù)打包成JSON數(shù)據(jù)發(fā)送給網(wǎng)頁端。Express 是一個(gè)基于Node.js平臺(tái)的極簡、靈活的Web應(yīng)用開發(fā)框架,它提供一系列強(qiáng)大功能,幫助創(chuàng)建各種Web和移動(dòng)設(shè)備應(yīng)用[21]。
5 系統(tǒng)測試
5.1 系統(tǒng)軟件測試
用戶通過在微信公眾號(hào)中嵌入的網(wǎng)頁就可對物聯(lián)網(wǎng)設(shè)備進(jìn)行遠(yuǎn)程監(jiān)控,查看設(shè)備網(wǎng)頁界面如圖4所示。用戶可通過單擊菜單欄中的“實(shí)時(shí)”按鈕查看設(shè)備實(shí)時(shí)參數(shù),也可單擊菜單欄其它按鈕查看設(shè)備歷史參數(shù),設(shè)備參數(shù)通過曲線形式顯示。設(shè)備控制網(wǎng)頁界面如圖5所示,在輸入框中輸入數(shù)值,在“請選擇類型”下拉欄中選擇控制指令類型,便可實(shí)現(xiàn)對設(shè)備的控制,例如設(shè)置溫度、濕度等。
5.2 系統(tǒng)負(fù)載測試
測試設(shè)備客戶端0.01s與服務(wù)器建立一個(gè)長連接,并且發(fā)送JSON數(shù)據(jù)包到服務(wù)器,采用逐漸增加長連接方式,每秒增加100個(gè)連接測試,Node.js單進(jìn)程的服務(wù)器最大并發(fā)連接數(shù)是1245個(gè),可在多核服務(wù)器上多開Node.js進(jìn)程以提高服務(wù)器性能,高的環(huán)境配置能提高Node.js服務(wù)器性能。
6 結(jié)語
本文應(yīng)用物聯(lián)網(wǎng)技術(shù),實(shí)現(xiàn)對傳統(tǒng)工業(yè)設(shè)備的遠(yuǎn)程監(jiān)控,用戶可通過微信公眾號(hào)嵌入的網(wǎng)頁對設(shè)備進(jìn)行遠(yuǎn)程監(jiān)控。但要重視工業(yè)物聯(lián)網(wǎng)存在的網(wǎng)絡(luò)安全問題,在后續(xù)工作中要參考互聯(lián)網(wǎng)安全問題解決思路,提出相應(yīng)解決方案。
參考文獻(xiàn):
[1] 李士寧,羅國佳. 工業(yè)物聯(lián)網(wǎng)技術(shù)及應(yīng)用概述[J]. 電信網(wǎng)技術(shù),2014(3):1-2.
[2] 王瑩,王金旺. 工業(yè)物聯(lián)網(wǎng)技術(shù)方案及發(fā)展大潮[J]. 電子產(chǎn)品世界,2018(3):1-2.
[3] 智能制造編輯部. 2018年工業(yè)物聯(lián)網(wǎng)將有哪些發(fā)展趨勢[EB/OL]. http://www.elecfans.com/d/697038.html.
[4] 孫邱偉. 基于微信控制物聯(lián)網(wǎng)設(shè)備的服務(wù)器系統(tǒng)[D]. 廣州:廣州工業(yè)大學(xué),2015.
[5] 王培元,杜玉勝. 一種基于MQTT協(xié)議的物聯(lián)網(wǎng)智能監(jiān)控系統(tǒng)[J]. 信息技術(shù)與信息化,2018(1):1-2.
[6] 劉波濤,馮翠麗. 物聯(lián)網(wǎng)應(yīng)用中嵌入式HTTP協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[J]. 佳木斯大學(xué)學(xué)報(bào):自然科學(xué)版,2011(5):1-2.
[7] 劉孝趙. 基于ESP8266模塊的遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J]. 電子測試,2017(21):2-3.
[8] 曹振民,陳年生,馬強(qiáng),等. 基于ESP8266的無線控制電路設(shè)計(jì)[J]. 工業(yè)控制計(jì)算機(jī),2017(1):1-2.
[9] 張?jiān)?,許江淳,李玉惠,等. 基于Nginx服務(wù)器負(fù)載均衡技術(shù)的研究與改進(jìn)[J]. 軟件,2017(8):3-4.
[10] 苑臣芒.? Node.js成為新型物聯(lián)網(wǎng)開發(fā)的催化劑[J]. 中小企業(yè)管理與科技,2016(10):1-2.
[11] 潘從祥,蔣樂天. 基于Node.js的TurtleBot機(jī)器人JavaScript API設(shè)計(jì)[J]. 信息技術(shù),2018(3):1-2.
[12] 字無忌. js讀取解析JSON數(shù)據(jù)[EB/OL].? https://www.cnblogs.com/jtlgb/p/6137915.html.
[13] YUANSC. MQTT-Node.js實(shí)現(xiàn)-Mosca簡介[EB/OL].? https://www.jianshu.com/p/8315acec4e6b.
[14] XUKAI. MQTT學(xué)習(xí)筆記—MQTT協(xié)議體驗(yàn) Mosquitto安裝和使用[EB/OL]. https://blog.csdn.net/xukai871105.
[15] 馬躍,顏睿陽,孫建偉. 基于RocketMQ的MQTT消息推送服務(wù)器分布式部署方案[J].? 計(jì)算機(jī)系統(tǒng)應(yīng)用,2018(6):1-2.
[16] 任亨,馬躍,楊海波,等. 基于MQTT協(xié)議的消息推送服務(wù)器[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2014(3):2-3.
[17] 祝瑞,車敏. 基于HTTP協(xié)議的服務(wù)器程序分析[J]. 現(xiàn)代電子技術(shù),2012(4):1-2.
[18] 邵芬,于國防,張寧. 基于多線程的HTTP服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 工礦自動(dòng)化, 2008(4):1-2.
[19] 吳其祥,李祖華. 基于HTTP協(xié)議的隱蔽信道研究[J]. 信息安全與通信保密,2009(1):1-2.
[20] HELLOKANG. nodeJs之express框架學(xué)習(xí)筆記[EB/OL]. https://www.jianshu.com/p/94360745c4ae.
(責(zé)任編輯:杜能鋼)