物聯(lián)網(wǎng)這個話題,說復(fù)雜也復(fù)雜,說不復(fù)雜也不復(fù)雜,小場景小應(yīng)用,大場景大應(yīng)用,很多人對這個概念既模糊又清晰,基于國內(nèi)大廠的物聯(lián)網(wǎng)場景廣泛應(yīng)用。其實(shí)以下幾個點(diǎn)需要關(guān)注。
1、網(wǎng)聯(lián)、聯(lián)網(wǎng)
萬物互聯(lián),那么連接萬物的是什么?是網(wǎng)絡(luò),讓所有硬件類電子設(shè)備統(tǒng)統(tǒng)聯(lián)網(wǎng),怎么連接?
目前聯(lián)網(wǎng)的方式有三種::
有線的網(wǎng)線
無線接收SSID
物聯(lián)網(wǎng)卡是運(yùn)行商的(傳云端,這種卡費(fèi)用低得很)
那么很多傳感和控制器是沒有網(wǎng)口的,這個時候就用到了嵌入式或單片機(jī)PCB將這些控制單元串聯(lián)起來,主要就是下面講到的,現(xiàn)在主流的STM32 ARM已經(jīng)支持絕大多數(shù)RFC各種協(xié)議,當(dāng)然如果真不支持,那就組合芯片設(shè)計PCB就行。
這個過程就是通過單片機(jī)集成電路拋出網(wǎng)口通訊,然后連接傳感、控制單元將脈沖二進(jìn)制進(jìn)行轉(zhuǎn)化解碼,轉(zhuǎn)化為ASCll再通過網(wǎng)口接口交互。所以嵌入式開發(fā)板就是一個網(wǎng)關(guān)的作用。
2、協(xié)議統(tǒng)籌
所有的設(shè)備、電子控制單元等都是由組合芯片,單片機(jī)等集成電路將物理現(xiàn)象轉(zhuǎn)化為脈沖信號的過程,這個過程中規(guī)定了讀取這些信號的方式,這些讀取信號的方式/工具統(tǒng)一為協(xié)議基礎(chǔ),目前協(xié)議有很多(串口、MQTT、DDS、Sigfox...),PLC的、工業(yè)電子等等,所以這里需要統(tǒng)籌協(xié)議組,也就是封裝協(xié)議包,將所有協(xié)議驅(qū)動全部打包集中起來,目前協(xié)議集中平臺有Node-Red、AliOS-Things、LiteOS、IOT-DC3等,這樣一來所有的協(xié)議就能統(tǒng)籌關(guān)聯(lián),不用再為單獨(dú)的協(xié)議寫代碼寫通訊,當(dāng)讓你做一些小范圍的可以,沒問題,批量式、密集型、協(xié)議群的話肯定是要上平臺的,個人覺得低成本、推廣快、好集成選Node-Red準(zhǔn)沒錯,Node-Red已經(jīng)集成了低代碼流程化,我個人上傳了一些通訊協(xié)議的封裝庫,直接拿來就用,也不用寫代碼。
3、數(shù)據(jù)儲存
以前的物聯(lián)網(wǎng)幾個設(shè)備在局域網(wǎng)連上后把數(shù)據(jù)直接甩進(jìn)局域網(wǎng)服務(wù)主機(jī),不管是HTTP、還是Socket,但是這只是個人玩玩或者試驗(yàn)型,企業(yè)級或者服務(wù)級不可能給設(shè)備套一個服務(wù)寫入局域網(wǎng):
考慮這些數(shù)據(jù)不存在商業(yè)價值,不需要挖掘用戶潛力。
不需要二開數(shù)據(jù)或?qū)?shù)據(jù)進(jìn)行深度處理(大數(shù)據(jù)分析)。
所以像米家、海爾、美的等企業(yè)他們都會有自己的云端,讓用戶的大數(shù)據(jù)直接進(jìn)云,在云端又將數(shù)據(jù)劃分為實(shí)時消費(fèi)型和非實(shí)時消費(fèi)型,實(shí)時消費(fèi)型主要面向用戶在手機(jī)上直接控制設(shè)備進(jìn)行實(shí)時交互。如溫度調(diào)節(jié)、遙控升降等,非實(shí)時數(shù)據(jù)如用戶的基本信息、設(shè)備型號信息、設(shè)備開機(jī)時間、設(shè)備異常時間等等。非常多,然后廠家對這些數(shù)據(jù)進(jìn)行分析和處理,可以分析出廠家設(shè)備質(zhì)量的狀態(tài)、用戶的習(xí)慣、用戶喜好、電子元器件工作穩(wěn)定性等等。這樣一來對產(chǎn)品也好,對用戶也好,掌控都是非常精準(zhǔn)的。
4、服務(wù)
任何產(chǎn)品都是面向服務(wù)的,就是物聯(lián)網(wǎng)也不例外,服務(wù)就是提供給用戶層帶來新奇感受、感受科技的,什么數(shù)字孿生啊,智能座艙啥的,那么服務(wù)主要基于終端的應(yīng)用的方式。這里主考一個實(shí)時性RealTime,當(dāng)用戶觸發(fā)終端的交互時,一定是低延時的進(jìn)行響應(yīng),在游戲中,我們將其稱為同步幀,但這種主要應(yīng)用于工業(yè)級極低延遲,如果用戶發(fā)起一個響應(yīng),就要在低于500ms進(jìn)行響應(yīng),這樣用戶體驗(yàn)才比較樂觀,不會抱怨。
但是從用戶發(fā)起到云端計算再到驅(qū)動設(shè)備,這個過程的網(wǎng)絡(luò)設(shè)計也是非常復(fù)雜的(用戶并發(fā)的時候)。服務(wù)還有一個點(diǎn)就是多樣性,如果一個產(chǎn)品只能有一個功能操作,那這樣的產(chǎn)品也不具備競爭力,也沒有價值導(dǎo)向,所以在設(shè)計時我們往往會盡量全打通傳感、控制單元ECM,或者擴(kuò)展額外的硬件來支撐。
Demo實(shí)踐:
首先我們弄了一塊嵌入式版子(個人做也不要折騰單片機(jī)C),必須有網(wǎng)卡驅(qū)動,IO-144,接下來我們搞一個Linux閹割版,有軟件網(wǎng)驅(qū)的, 我們通過Linux來控制IO,找一個基于IO的溫度傳感器、在弄一個繼電器控制小電機(jī)風(fēng)扇,(原計劃Node-Red寫插件)Linux自帶GPIO的。
做一個H5,掛在騰訊云上,然后寫Python / Node嵌入式嘛,你懂的,我用Node+SocketIO寫好一個服務(wù),它將GPIO IN的溫度解碼10進(jìn)制實(shí)時寫入MySQL,但是頻率太高,于是將其改為溫差1°差值寫入一次約束,變化時記錄一次就行,別干炸了,然后控制GPIO OUT設(shè)置為高于15°Socket就立刻發(fā)消息Message給出響應(yīng),設(shè)置響應(yīng)事件為”Driver-Rlectrical”,這個時候switch(message)捕獲了”Driver-Rlectrical”就啟動了電機(jī)。給它吹到低于15°,這個時候電機(jī)立刻停止,延遲率33ms,比HTTP快多了。手機(jī)H5頁面做了一個溫度div和一個播放鍵的啟動電機(jī)按鈕,溫度用的Server-Send-Event, 電機(jī)按鈕用Socket Message, 騰訊云用Socket連接設(shè)備端,用戶端用Socket和SSE,這樣一來就將實(shí)時性加入到物聯(lián)網(wǎng)中了。