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