摘要:物聯(lián)網(wǎng)系統(tǒng)涉及軟件、硬件及網(wǎng)絡(luò)等諸多技術(shù),開發(fā)難度大。如何在技術(shù)及資金有限的條件下,設(shè)計(jì)與實(shí)現(xiàn)物聯(lián)網(wǎng)系統(tǒng),是不少創(chuàng)業(yè)公司面臨的難題。云計(jì)算技術(shù)、開源軟件及開源硬件將有助于降低物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)的難度與成本。
關(guān)鍵詞:物聯(lián)網(wǎng);云計(jì)算;開源軟件;開源硬件
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)29-0129-03
Abstract: The Internet of things system involves many technologies such as software, hardware and network, so it is difficult to develop. How to design and implement the Internet of Things under the condition of limited technology and capital is a difficult problem faced by many start-ups. Cloud computing technology, open source software and open source hardware will help reduce the difficulty and cost of the design and implementation of the Internet of Things system.
Key words: internet of things; cloud computing; open source software; open source hardware;
物聯(lián)網(wǎng)是一門新興的交叉學(xué)科,是國(guó)家創(chuàng)新驅(qū)動(dòng)發(fā)展戰(zhàn)略重要的組成部分。物聯(lián)網(wǎng)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),牽涉到軟件、硬件及網(wǎng)絡(luò)通信等諸多技術(shù)。目前軟件工程師往往對(duì)硬件不是很了解,硬件工程師往往又對(duì)軟件不甚精通,同時(shí)精通軟件、硬件、網(wǎng)絡(luò)通信等技術(shù)的工程師少之又少,從而造成不少創(chuàng)業(yè)公司設(shè)計(jì)和實(shí)現(xiàn)物聯(lián)網(wǎng)系統(tǒng)步履維艱。
云計(jì)算技術(shù)風(fēng)起云涌,國(guó)外知名的云計(jì)算服務(wù)平臺(tái)主要有亞馬遜AWS、Google云和微軟Azure,國(guó)內(nèi)主要有華為云、百度云、阿里云和騰訊云。云計(jì)算服務(wù)平臺(tái)提供服務(wù)器、數(shù)據(jù)庫、安全防護(hù)、大數(shù)據(jù)分析、視頻直播點(diǎn)播、人工智能等諸多服務(wù),助力中小企業(yè)發(fā)展。開源軟件匯聚了世界各地程序員的心血,其中有少開源軟件代碼質(zhì)量相當(dāng)高;開源硬件則將硬件設(shè)計(jì)的原理圖、電路圖、IDE及核心庫文件等開源,供人們學(xué)習(xí)和參考。創(chuàng)業(yè)公司可以參考和使用開源軟硬件進(jìn)行設(shè)計(jì)開發(fā),降低成本。
物聯(lián)網(wǎng)系統(tǒng)的應(yīng)用非常廣泛,比如對(duì)火災(zāi)、大氣污染等監(jiān)控。以火災(zāi)監(jiān)控為例,如果僅以現(xiàn)場(chǎng)的溫濕度、煙霧數(shù)據(jù)判斷火災(zāi)通常不夠準(zhǔn)確,輔以現(xiàn)場(chǎng)的音視頻進(jìn)行判斷,將會(huì)提高準(zhǔn)確率?;馂?zāi)發(fā)生時(shí),若能夠在第一時(shí)間采取措施進(jìn)行滅火,將會(huì)減少損失。本文嘗試?yán)迷朴?jì)算、開源軟件及開源硬件等技術(shù),以火災(zāi)監(jiān)控為例,設(shè)計(jì)并實(shí)現(xiàn)物聯(lián)網(wǎng)系統(tǒng),力求簡(jiǎn)化技術(shù)難度,降低成本。
1 系統(tǒng)架構(gòu)
本文的物聯(lián)網(wǎng)系統(tǒng)主要分為三個(gè)部分:物聯(lián)網(wǎng)終端、網(wǎng)絡(luò)和物聯(lián)網(wǎng)服務(wù)平臺(tái)。物聯(lián)網(wǎng)終端主要負(fù)責(zé)各類數(shù)據(jù)的采集、將數(shù)據(jù)傳輸給物聯(lián)網(wǎng)服務(wù)平臺(tái)及執(zhí)行物聯(lián)網(wǎng)服務(wù)平臺(tái)發(fā)出的指令;網(wǎng)絡(luò)作為物聯(lián)網(wǎng)終端和物聯(lián)網(wǎng)服務(wù)平臺(tái)的數(shù)據(jù)傳輸通道,將兩者連接起來;物聯(lián)網(wǎng)服務(wù)平臺(tái)主要負(fù)責(zé)物聯(lián)網(wǎng)終端設(shè)備的接入服務(wù)、直播服務(wù)、數(shù)據(jù)分析、報(bào)警及發(fā)出控制指令等。溫濕度、煙霧等傳感器的數(shù)據(jù)和控制指令傳輸選用MQTT協(xié)議,音視頻傳輸采用RTMP協(xié)議,系統(tǒng)架構(gòu)如圖1所示。
2 相關(guān)技術(shù)
2.1物聯(lián)網(wǎng)終端
物聯(lián)網(wǎng)終端包含傳感器、控制器和執(zhí)行器。各類傳感器負(fù)責(zé)采集數(shù)據(jù),將數(shù)據(jù)傳輸給控制器,控制器通過網(wǎng)絡(luò)將數(shù)據(jù)傳輸給物聯(lián)網(wǎng)服務(wù)平臺(tái)。物聯(lián)網(wǎng)服務(wù)平臺(tái)對(duì)采集的數(shù)據(jù)進(jìn)行分析處理,通過網(wǎng)絡(luò)發(fā)出控制指令給物聯(lián)網(wǎng)終端的控制器,控制器通過執(zhí)行器完成指令動(dòng)作?;馂?zāi)監(jiān)控中,傳感器選用溫濕度傳感器、煙霧傳感器、麥克風(fēng)和攝像頭,執(zhí)行器選擇滅火器。
常用的開源控制器主要有Arduino及樹莓派。Arduino平臺(tái)是非常方便的開源硬件平臺(tái),其硬件原理圖、電路圖、IDE及核心庫文件都是開源的[1]。Arduino是一個(gè)微型控制器平臺(tái),可以用類C的語言進(jìn)行編程。溫濕度、煙霧等傳感器通過串口與Arduino相連,Arduino將傳感器的數(shù)據(jù)轉(zhuǎn)發(fā)到物聯(lián)網(wǎng)服務(wù)平臺(tái),并接收物聯(lián)網(wǎng)服務(wù)平臺(tái)發(fā)出的指令,通過執(zhí)行器完成指令。音視頻直播對(duì)硬件要求較高,Arduino無法勝任。
樹莓派有一個(gè)完整的ARM處理器,性能更強(qiáng)。樹莓派是為了幫助年輕人學(xué)習(xí)編程而設(shè)計(jì)的只有信用卡大小的電腦。樹莓派通常采用一種叫Raspbian的Linux系統(tǒng)。在Raspbian環(huán)境下,可以利用Python、C、C++、Java或匯編語言進(jìn)行編程[2]。在樹莓派上安裝開源直播軟件OBS,可以完成音視頻數(shù)據(jù)的編碼并利用RTMP協(xié)議推送至騰訊云直播服務(wù)接口。
2.2網(wǎng)絡(luò)
網(wǎng)絡(luò)是物聯(lián)網(wǎng)終端和物聯(lián)網(wǎng)服務(wù)平臺(tái)數(shù)據(jù)傳輸?shù)耐ǖ溃W(wǎng)絡(luò)類型和通信協(xié)議兩個(gè)方面均需考慮。
1)網(wǎng)絡(luò)類型
物聯(lián)網(wǎng)在部署時(shí),為了降低成本,有時(shí)會(huì)選用電池供電。如果網(wǎng)絡(luò)的功耗低,電池的壽命會(huì)更長(zhǎng),物聯(lián)網(wǎng)的維護(hù)成本會(huì)降低。常用的功耗低、覆蓋面廣的網(wǎng)絡(luò)主要有LoRa和NB-IOT。LoRa是Semtech公司力推的一種低功耗廣域網(wǎng)通信技術(shù),為用戶提供一種能夠簡(jiǎn)單實(shí)現(xiàn)距離遠(yuǎn)、功耗低、組網(wǎng)節(jié)點(diǎn)多的傳感網(wǎng)絡(luò)。LoRa主要運(yùn)行在免費(fèi)頻段,用戶可以自行組網(wǎng)。NB-IOT主要運(yùn)行在授權(quán)頻段,由運(yùn)營(yíng)商組網(wǎng),支持低功耗設(shè)備在廣域網(wǎng)的蜂窩數(shù)據(jù)連接,支持待機(jī)時(shí)間長(zhǎng)、對(duì)網(wǎng)絡(luò)連接要求較高設(shè)備的高效連接。NB-IoT的覆蓋更廣,功耗更低,僅為2G的1/10 [3]。
LoRa和NB-IOT網(wǎng)絡(luò)均能滿足Arduino的數(shù)據(jù)傳輸要求,但其速率無法勝任音視頻數(shù)據(jù)的實(shí)時(shí)傳輸。直播需要采用4G等移動(dòng)通信網(wǎng)絡(luò)或者WiFi網(wǎng)絡(luò),本文利用普通無線路由器接入以太網(wǎng)或者4G無線路由器接入4G網(wǎng)絡(luò)為樹莓派和Arduino提供WiFi網(wǎng)絡(luò)。
2)通信協(xié)議
物聯(lián)網(wǎng)通信協(xié)議主要有MQTT和CoAP。MQTT是基于TCP/IP協(xié)議構(gòu)建的一種輕量靈活的網(wǎng)絡(luò)協(xié)議,已成為物聯(lián)網(wǎng)通信標(biāo)準(zhǔn)。MQTT采用的是Pub/Sub方式的協(xié)議,解除應(yīng)用程序耦合,對(duì)負(fù)載內(nèi)容屏蔽消息傳輸,開銷小、協(xié)議交換最小化,提供客戶端異常中斷機(jī)制,提供三種質(zhì)量等級(jí)的消息發(fā)布服務(wù)。MQTT適用于設(shè)備間消息通信或需要反向控制的場(chǎng)景。
對(duì)有些小型設(shè)備而言,實(shí)現(xiàn)TCP協(xié)議要求過高,為了讓這些小型設(shè)備接入互聯(lián)網(wǎng),設(shè)計(jì)了CoAP協(xié)議。CoAP是一種應(yīng)用層的協(xié)議,運(yùn)行在UDP協(xié)議之上,傳輸?shù)膬?nèi)容小巧精簡(jiǎn)。CoAP適用于純數(shù)據(jù)上報(bào)的場(chǎng)景,對(duì)資源的要求更低。由于需要實(shí)時(shí)反向控制,本文選擇MQTT作為Arduino與物聯(lián)網(wǎng)服務(wù)平臺(tái)的通信協(xié)議。
RTMP實(shí)時(shí)信息傳輸協(xié)議是Adobe公司提出的一種基于TCP的應(yīng)用層協(xié)議,主要用來在流媒體及交互服務(wù)器之間進(jìn)行音視頻和數(shù)據(jù)通信。音視頻數(shù)據(jù)采用RTMP協(xié)議推流至騰訊云的視頻直播服務(wù)接口。
2.3物聯(lián)網(wǎng)服務(wù)平臺(tái)
物聯(lián)網(wǎng)服務(wù)平臺(tái)是物聯(lián)網(wǎng)的大腦,分為服務(wù)層和應(yīng)用層。服務(wù)層主要負(fù)責(zé)物聯(lián)網(wǎng)終端設(shè)備的接入,直播服務(wù),存儲(chǔ)和分析采集到的數(shù)據(jù);在服務(wù)層提供的基礎(chǔ)功能之上,應(yīng)用層實(shí)現(xiàn)具體的業(yè)務(wù)。構(gòu)建物聯(lián)網(wǎng)服務(wù)平臺(tái),一般需要購置服務(wù)器、存儲(chǔ)設(shè)備、交換機(jī)、防火墻、IPS、WAF等,需要建設(shè)服務(wù)器機(jī)房,這對(duì)創(chuàng)業(yè)公司是不小的負(fù)擔(dān)。借助于云計(jì)算技術(shù),利用云服務(wù)平臺(tái)的服務(wù)器及音視頻直播服務(wù),不僅可以得到專業(yè)的技術(shù)支持,也可以降低成本。
本文的物聯(lián)網(wǎng)終端設(shè)備接入選用MQTT協(xié)議。MQTT Broker主要有Mosquitto、Apollo、Mosca、emqttd及hbmqtt等。Mosquitto是Eclipse基金會(huì)的一款輕量級(jí)的開源消息代理軟件,采用C語言編寫,實(shí)現(xiàn)MQTT協(xié)議 3.1和3.1.1,由MQTT協(xié)議創(chuàng)始人之一的Andy Stanford-Clark開發(fā)[4]。Mosquitto用來搭建MQTT Broker,作為訂閱者與發(fā)布者的消息中介,支持可發(fā)布可訂閱的消息推送模式。 Mosquitto接受來自客戶端的網(wǎng)絡(luò)連接、發(fā)布信息、處理客戶端的訂閱或取消訂閱請(qǐng)求,轉(zhuǎn)發(fā)消息給符合條件的訂閱客戶端,如圖2所示。消息在設(shè)備間流轉(zhuǎn)不需要流經(jīng)數(shù)據(jù)庫,所以實(shí)時(shí)性很強(qiáng)。如果需要保存消息,MQTT客戶端則負(fù)責(zé)將消息寫入數(shù)據(jù)庫。
通過簡(jiǎn)單的配置,音視頻數(shù)據(jù)即可通過RTMP協(xié)議推流至騰訊云視頻直播服務(wù)接口。利用Django2.0、Ajax及MySql5.6,構(gòu)建物聯(lián)網(wǎng)管理系統(tǒng)。在物聯(lián)網(wǎng)管理系統(tǒng)的網(wǎng)頁中嵌入騰訊云Web直播播放器代碼,就可以在物聯(lián)網(wǎng)管理系統(tǒng)中觀看直播。騰訊云視頻直播服務(wù)還可以將直播內(nèi)容錄制下來用于點(diǎn)播。在管理系統(tǒng)的網(wǎng)頁上可以展示物聯(lián)網(wǎng)終端采集的溫濕度、煙霧等數(shù)據(jù),以及現(xiàn)場(chǎng)的音視頻直播,并可以向物聯(lián)網(wǎng)終端發(fā)送控制指令。
3 平臺(tái)實(shí)現(xiàn)
物聯(lián)網(wǎng)服務(wù)平臺(tái)的服務(wù)器選用騰訊云服務(wù)器,服務(wù)器的配置為2核CPU、4G內(nèi)存、30Mbps帶寬、100G硬盤,操作系統(tǒng)選用CentOS 7.4 64位,采用Django 2.0框架結(jié)合Ajax構(gòu)建物聯(lián)網(wǎng)管理系統(tǒng),Web服務(wù)器選用nginx 1.4,應(yīng)用服務(wù)器選用uwsgi 2.0,數(shù)據(jù)庫選用MySql 5.6 64位,開發(fā)語言選用Python 3.6。在服務(wù)器上安裝Mosquitto 1.5,完成MQTT Broker的構(gòu)建。
參照Eclipse Paho Python,開發(fā)物聯(lián)網(wǎng)服務(wù)平臺(tái)的MQTT客戶端,完成MQTT客戶端的消息訂閱、發(fā)布并將消息存入MySQL數(shù)據(jù)庫。通過Python調(diào)用騰訊云短信API,實(shí)現(xiàn)物聯(lián)網(wǎng)服務(wù)平臺(tái)的短信發(fā)送功能。
選用帶WiFi功能的Arduino 開發(fā)板,參照GitHub上的Arduino Client for MQTT,開發(fā)Arduino的MQTT客戶端, 通過WiFi網(wǎng)絡(luò)連接物聯(lián)網(wǎng)服務(wù)平臺(tái)。
在樹莓派上接入攝像頭和麥克風(fēng),并在樹莓派上安裝OBS,OBS是用于音視頻編碼并推送直播視頻源到服務(wù)器的免費(fèi)開源直播軟件[5]。采用RTMP推流至騰訊云直播服務(wù)接口,在物聯(lián)網(wǎng)服務(wù)平臺(tái)的網(wǎng)頁中嵌入騰訊Web直播播放器代碼,就可以將音視頻直播。
在物聯(lián)網(wǎng)管理系統(tǒng)中查看物聯(lián)網(wǎng)終端各傳感器的數(shù)據(jù)及音視頻直播。當(dāng)溫濕度及煙霧傳感器探測(cè)到火災(zāi),將會(huì)自動(dòng)發(fā)送短信報(bào)警,監(jiān)管人員通過音視頻判斷無誤后,向物聯(lián)網(wǎng)終端發(fā)送滅火指令,執(zhí)行器自動(dòng)進(jìn)行滅火。
4 結(jié)束語
本文借助于騰訊云服務(wù)器、直播服務(wù)及短信服務(wù),Mosquitto、Paho及Django等開源軟件,Arduino及樹莓派等開源硬件,設(shè)計(jì)并實(shí)現(xiàn)了物聯(lián)網(wǎng)系統(tǒng),完成對(duì)火災(zāi)的監(jiān)控,降低了物聯(lián)網(wǎng)開發(fā)的技術(shù)難度,壓縮了成本,有利于創(chuàng)業(yè)公司進(jìn)行物聯(lián)網(wǎng)技術(shù)開發(fā)。本文的傳感器數(shù)據(jù)在傳輸過程中沒有加密,將來可以對(duì)數(shù)據(jù)進(jìn)行加密傳輸,采用時(shí)序數(shù)據(jù)庫來存儲(chǔ)傳感器數(shù)據(jù),并利用人工智能對(duì)采集到的數(shù)據(jù)進(jìn)行分析,提升物聯(lián)網(wǎng)應(yīng)用水平。
參考文獻(xiàn):
[1] 施金磊,高谷剛. 基于LoRa技術(shù)的家庭物聯(lián)網(wǎng)安防系統(tǒng)設(shè)計(jì)[J]. 電子技術(shù)與軟件工程,2017,10:218-220.
[2] Wolfram Donat.Python樹莓派編程 [M]. 韓德強(qiáng),譯.北京:機(jī)械工業(yè)出版社,2016.
[3] 安翔. 物聯(lián)網(wǎng)Python開發(fā)實(shí)踐 [M]. 北京:電子工業(yè)出版社,2018.
[4] 黃峰達(dá). 自己動(dòng)手設(shè)計(jì)物聯(lián)網(wǎng) [M]. 北京:電子工業(yè)出版社,2016.
[5] 宋永生. 基于HTML5及云計(jì)算的高職院校移動(dòng)學(xué)習(xí)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J]. 電腦知識(shí)與技術(shù),2016,12(29):59-61.
【通聯(lián)編輯:梁書】