愈演愈烈的智能家居:手把手教你把一個(gè)設(shè)備轉(zhuǎn)變成智能設(shè)備
發(fā)布時(shí)間:2016-02-02 責(zé)任編輯:susan
【導(dǎo)讀】物聯(lián)網(wǎng)技術(shù)飛速發(fā)展,智能家居領(lǐng)域也跟著愈演愈烈,成為互聯(lián)網(wǎng)巨頭及家電大佬們爭(zhēng)相深耕的“肥沃土壤”,本文主要針對(duì)智能家居的軟硬件架構(gòu)技術(shù)做詳細(xì)分析。
HOW-想清楚要做哪些事情
以一款智能插座為例,我講的主題就是這個(gè)插座該怎么樣來(lái)生產(chǎn)、怎么樣來(lái)研發(fā)。第一步,我們先要把它分解。插座有很多結(jié)構(gòu)件,比如五金件這些東西,所以我們要搭建一個(gè)團(tuán)隊(duì),包括做工業(yè)設(shè)計(jì)、結(jié)構(gòu)設(shè)計(jì)的人,硬件工程師、電子類工程師、軟件的工程師,以及生活端的,甚至是運(yùn)營(yíng)和銷售的。如下圖所示。
我們從傳統(tǒng)的一個(gè)設(shè)備到智能設(shè)備轉(zhuǎn)變的過(guò)程中,這一個(gè)東西非常重要,即WiFi模塊。這個(gè)地方?jīng)Q定了這個(gè)設(shè)備到底能不能跟我們的App進(jìn)行交互以及交互的效率如何。
大家可以看一下我們大概要做的事情,包括元器件選型、原理圖、結(jié)構(gòu)、工業(yè)設(shè)計(jì)、PCBA、打手板、開(kāi)模,這些東西完成的話代表著傳統(tǒng)的部分完成了,這里不再贅述。比較重要的是智能設(shè)備要怎樣實(shí)現(xiàn)通訊。現(xiàn)在ZigBee、WiFi、Z-Wave、BLE,這四種用得比較普遍,還有433、315等設(shè)備。谷歌也有一套協(xié)議,但是應(yīng)用得稍微少一點(diǎn)。我今天主要是從WiFi設(shè)備方面來(lái)講,看到底一個(gè)WiFi設(shè)備到底要怎么樣來(lái)做。
WiFi聯(lián)網(wǎng)的難題
WiFi設(shè)備面臨一個(gè)很大的難題,比如說(shuō)我做一個(gè)智能的水杯、一個(gè)智能的插座,這個(gè)水杯和插座是沒(méi)有交互界面的。但是我們必須解決一個(gè)問(wèn)題,即這個(gè)設(shè)備一定要聯(lián)網(wǎng),要連路由器。大家想到最直接的辦法是手機(jī)連路由器,打開(kāi)手機(jī)的設(shè)置,進(jìn)入WiFi列表,然后再輸入密碼。但是智能硬件里面沒(méi)有辦法進(jìn)行操作,這就是要面臨的第一個(gè)難題了,所以很多人內(nèi)心是非常憂傷的。
這里介紹幾種給WiFi設(shè)備配置的方法。第一種是AP,AP是最傳統(tǒng)的方式,在AP里面主要是讓智能設(shè)備首先進(jìn)入AP模式里面,這樣能夠共享一個(gè)熱點(diǎn)出來(lái)。我們的手機(jī)直接連到這個(gè)設(shè)備里面,然后再把路由器的SSID推送給那個(gè)設(shè)備,那個(gè)設(shè)備可以在線連路由器。這里面AP有一個(gè)很麻煩的事情,就是它的交互特別復(fù)雜,特別是在iOS手機(jī)里面不允許手機(jī)的App直接調(diào)用WiFi的設(shè)置或是直接切換過(guò)去,我們可能要先退出后臺(tái),然后切換到蘋(píng)果的那一套設(shè)置里面,設(shè)置好了之后又要切換回來(lái),這樣特別麻煩。所以在演進(jìn)過(guò)程中就進(jìn)入了WPS。
WPS解決了第一步的問(wèn)題,可以在路由器里面有一個(gè)按鍵,智能設(shè)備里面也有一個(gè)按鍵,可以根據(jù)WPS的協(xié)議交換它的密鑰。但是這里面有一個(gè)很大的問(wèn)題,WPS需要進(jìn)行專門(mén)的認(rèn)證,而且現(xiàn)在支持的路由器非常少,所以用WPS技術(shù)來(lái)做的話可能會(huì)比較差一點(diǎn)。
再接下來(lái)又出了一個(gè)Smart Config,這一款應(yīng)用非常多,因?yàn)樗浅:?jiǎn)單,直接在手機(jī)上面向路由器發(fā)送SSID和密鑰,這個(gè)芯片再去抓路由器的包,抓到這個(gè)包之后再解密,解密出來(lái)之后就知道了路由器的SSID和密鑰,然后就可以去連。在這個(gè)基礎(chǔ)上微信也出了air kiss和另外的Smart link,也這個(gè)原理。
接下來(lái)又出現(xiàn)了光配置,屏幕按照一定的亮變把信息傳輸過(guò)去,但是這個(gè)應(yīng)用比較少一點(diǎn),問(wèn)題也比較多。
再接下來(lái)是聲波配置,AA付款和面對(duì)面收款里面就用到這個(gè)技術(shù)。
總體來(lái)說(shuō),AP和第三個(gè)稍微比較好一點(diǎn),但是我們?cè)趯?shí)際產(chǎn)品應(yīng)用里面也會(huì)發(fā)現(xiàn),這一類技術(shù)面臨很多問(wèn)題,就是對(duì)路由器的一些芯片、兼容性都會(huì)有比較高得要求。我們以前出現(xiàn)很多這樣的例子,測(cè)試的時(shí)候拿了幾十款、上百種路由器測(cè)得沒(méi)有問(wèn)題,到了用戶家里,那一款路由器我們沒(méi)有測(cè)試過(guò),結(jié)果發(fā)現(xiàn)不行,這是一方面的限制。為了解決這種限制,后面又改成了不抓路由器的包,就抓手機(jī)發(fā)出來(lái)的包。抓手機(jī)發(fā)出來(lái)的包之后又帶來(lái)更大的問(wèn)題,正常手機(jī)的包是OK的,沒(méi)有那么多兼容性的問(wèn)題。去年iOS包出來(lái)的之后,蘋(píng)果的iPhone6會(huì)有一個(gè)問(wèn)題,連上WiFi離開(kāi)一段時(shí)間再回來(lái)WiFi就會(huì)丟失了,這時(shí)候不重啟手機(jī)就永遠(yuǎn)連不上WiFi了。蘋(píng)果為了解決這個(gè)問(wèn)題又更新部件,然后對(duì)這個(gè)又沒(méi)有用了,又抓不了包了,所以對(duì)傳統(tǒng)應(yīng)有還是有限制。還有一些跟技術(shù)沒(méi)有關(guān)系的限制,比如說(shuō)現(xiàn)在比較好一點(diǎn)的路由器是支持2.5G和4G的?,F(xiàn)在我們使用的模塊都是只有2.4G的,如果手機(jī)是雙頻、路由器是雙頻的默認(rèn)是是5G。所以我們又回到最原始的AP模式來(lái),因?yàn)槲覀儾挥酶脩艚忉屇敲炊鄸|西,也沒(méi)有很多兼容性的問(wèn)題。
軟件架構(gòu)的選擇
這是一個(gè)軟件架構(gòu)要怎么樣選擇的問(wèn)題,就是我們現(xiàn)在智能設(shè)備聯(lián)網(wǎng)最基本的需求是什么。我們來(lái)看一下這個(gè)圖,智能設(shè)備聯(lián)網(wǎng)之后要實(shí)現(xiàn)跟手機(jī)APP的交互,一方面APP如果要去控制它,它必須能夠接收到APP發(fā)過(guò)來(lái)的控制信號(hào)。另一方面,如果直接在上面按,按完了之后這里面的狀態(tài)要能夠反饋到APP里面來(lái)。所以,我們?cè)谧黾夹g(shù)選型的時(shí)候,最基本要實(shí)現(xiàn)這兩個(gè)需求。
控制命令的上傳和下發(fā)的問(wèn)題,這里面決定了到底我們?cè)趺磥?lái)架構(gòu)的問(wèn)題。這是我昨天提出的問(wèn)題,就是為了解釋剛剛提出的需求。比如說(shuō)我在QQ上發(fā)布信息說(shuō)插座開(kāi)一下燈,然后它說(shuō)已經(jīng)開(kāi)了。我問(wèn)它是什么狀態(tài),然后它告訴我它已經(jīng)關(guān)了。我們要對(duì)智能設(shè)備進(jìn)行控制,這里面基本的需求一個(gè)是數(shù)據(jù),我要把想要的數(shù)據(jù)控制命令發(fā)給它,控制了之后又發(fā)回給我,這個(gè)做的事情其實(shí)就是IM的事情。我們做服務(wù)器端的架構(gòu)的時(shí)候,最初考慮的方案就是選擇了IM的方案。
物聯(lián)網(wǎng)跟互聯(lián)網(wǎng)實(shí)際上看起來(lái)有很大的差異,真正我們?cè)谧龅臅r(shí)候還是殊途同歸,我們還是都選擇了IM的方案。
看一下最簡(jiǎn)單的IM架構(gòu),這里面要保持長(zhǎng)連接,接下來(lái)做一些業(yè)務(wù)處理,下面是存儲(chǔ),如果App要去控制Device的時(shí)候,發(fā)到業(yè)務(wù)層處理完了之后,這里面有一個(gè)推送的,可以找到Device到底連了哪一臺(tái)機(jī),然后再把數(shù)據(jù)推送過(guò)來(lái)。如果Device自己的狀態(tài)發(fā)生變化,它的數(shù)據(jù)要推送給APP,基本上是這樣的工作流。如果App是黑莓等設(shè)備的,我們可能要專門(mén)推送到APNS里面來(lái)。
通信協(xié)議的選擇
接下來(lái)我們還需要一個(gè)好的通信協(xié)議,現(xiàn)在很多通信協(xié)議是XMPP,很多社交軟件都個(gè)在用,因?yàn)樗_(kāi)源做得比較好。MQTT是專門(mén)用來(lái)做物聯(lián)網(wǎng)的協(xié)議。另外,PROTOBUF是谷歌的,這三個(gè)比較的話,MQTT和PROTOBUF是最適合做物聯(lián)網(wǎng)通信協(xié)議的,因?yàn)檫@兩個(gè)協(xié)議對(duì)數(shù)據(jù)量利用率非常高,不會(huì)帶來(lái)額外的開(kāi)銷的。
快速構(gòu)建云服務(wù)
再回到上圖,如果我們要做這樣一個(gè)系統(tǒng),為了要簡(jiǎn)單快速的出這樣一個(gè)產(chǎn)品,要利用很多開(kāi)源的組件,比如說(shuō)負(fù)載均衡這里,傳統(tǒng)的里面是比較難做的,我們用的比較多硬件負(fù)載均衡是F5或者是淘寶的LVS,我認(rèn)為L(zhǎng)VS對(duì)于目前做硬件的來(lái)說(shuō)肯定是夠的。再下面Connect Server現(xiàn)在也有很現(xiàn)成的開(kāi)源技術(shù),如果采用XMPP協(xié)議的話可能要用F5,像很多也完完全全做好了,如果在TTP這一層優(yōu)化比較好,做到八十到一百萬(wàn)長(zhǎng)連接也沒(méi)有問(wèn)題,而且會(huì)特別簡(jiǎn)單。像很多軌道函數(shù)都寫(xiě)的非常好,我們都不用關(guān)心怎么管理這些線程質(zhì)量、怎么管理連接,只要在上面寫(xiě)我們的業(yè)務(wù)代碼就行了。另外,我們這里面要做集群,我們有很多服務(wù)的時(shí)候直接在上面注冊(cè),后面調(diào)用的時(shí)候不用關(guān)心今天多了一臺(tái)機(jī)器、明天少了一臺(tái)機(jī)器以及這個(gè)機(jī)器的ID是什么。另外,服務(wù)要遠(yuǎn)程交易,我們要考慮IPC框架,像淘寶和Facebook的一些,都是開(kāi)源領(lǐng)域利用的非常好的。
我們肯定還要用到很多緩存,緩存方面我們用的比較多的。如果我們對(duì)開(kāi)源的框架用得比較好,簡(jiǎn)單的這個(gè)系統(tǒng)很快就可以完成了,不需要我們寫(xiě)很多東西,只需要在上面寫(xiě)業(yè)務(wù)代碼就能夠直接做好了。
這里面就是剛剛說(shuō)到的,如果你用Netty,只要在這里面寫(xiě)業(yè)務(wù)代碼,當(dāng)你接收到數(shù)據(jù)的時(shí)候這里面應(yīng)該怎么做,包括這里面出了異常的時(shí)候要怎么做。如果選用Netty還要考慮到一個(gè)情況,高并發(fā)的時(shí)候需要對(duì)數(shù)據(jù)包做拆包的事情。我們經(jīng)常發(fā)現(xiàn)這里接收到的數(shù)據(jù)并不是一個(gè)完整的數(shù)據(jù),比如說(shuō)我們發(fā)了大概2K左右的數(shù)據(jù),它給到你的可能只有很少。如果這里面不完整,把組包放進(jìn)來(lái)就可以了。具體的拆包、組包也提供了編碼性和解碼性,最重要的是在這個(gè)函數(shù)里面寫(xiě)你的業(yè)務(wù)代碼。
嵌入式開(kāi)發(fā)
我們要在設(shè)備端也實(shí)現(xiàn)接入,還要考慮嵌入式的開(kāi)發(fā)。嵌入式也有一個(gè)問(wèn)題,我們的設(shè)備都是需要成本的,不像寫(xiě)服務(wù)代碼一樣,服務(wù)器資源非常多,給到你很好的服務(wù)器可以用。在嵌入式方面,我們必須用最低的成本、最少的資源做最多的事情。每一個(gè)產(chǎn)品研發(fā)出來(lái),第一代選用的芯片可能比較好一點(diǎn),第二代為了這個(gè)產(chǎn)品能夠賣(mài)得更好,可能會(huì)做更改,對(duì)我們來(lái)說(shuō)可用的資源更多。通常我們用單片機(jī),我們比較常用FreeRTOS,它沒(méi)有TCPP協(xié)議的。做嵌入式開(kāi)發(fā)的時(shí)候我們還會(huì)遇到更多的問(wèn)題,像LWIP之類的,寫(xiě)這個(gè)協(xié)議站的人可能并沒(méi)有用到很多產(chǎn)品,所以里面還是殘留了很多BUG。這里面舉了兩個(gè)非常明顯而且一定會(huì)遇到的問(wèn)題,一個(gè)是TIME_WAIT,還有一個(gè)是CLOSE_WAIT,如果對(duì)方?jīng)]有按照正常流程關(guān)閉,假如說(shuō)我們的APP直接刷了,可能就會(huì)產(chǎn)生這個(gè)CLOSE_WAIT,它一直在那里等,我們可能只開(kāi)放十多個(gè)端口接入,如果一直在等待,可能它就認(rèn)為這個(gè)請(qǐng)求還是正常的,就不會(huì)把它釋放出來(lái)。等我們給它分配的端口滿了之后,下一個(gè)請(qǐng)求就再也接不進(jìn)來(lái)了。一般有三次握手,如果斷開(kāi)了標(biāo)志著有四次握手,我們發(fā)現(xiàn)它沒(méi)有按照正常的四次握手,導(dǎo)致斷開(kāi)的時(shí)候少發(fā)了一些命令,所以就一直在等待,等待的時(shí)候數(shù)據(jù)怎么發(fā)也發(fā)不出來(lái)了。
還有我們經(jīng)??赡軙?huì)遇到一些問(wèn)題,比如說(shuō)這里面可用的只有10幾K、64K,我們要在上面寫(xiě)代碼,如果寫(xiě)了多線程,又是單核的CPU,這里面用的時(shí)間長(zhǎng)了會(huì)產(chǎn)生很多的內(nèi)存碎片。當(dāng)內(nèi)存碎片產(chǎn)生了之后,多線程再申請(qǐng)內(nèi)存做其他事情的時(shí)候,比如說(shuō)有一個(gè)線程需要申請(qǐng)的資源比較大的時(shí)候會(huì)申請(qǐng)不到,就會(huì)一直在那里等,就會(huì)發(fā)現(xiàn)是怎么回事,這個(gè)地方本來(lái)十幾毫秒就可以處理完的,可能等了一秒鐘或者兩秒鐘甚至?xí)r間更長(zhǎng)時(shí)間才能處理,這就是時(shí)間用了長(zhǎng)了之后產(chǎn)生了內(nèi)存碎片。我們回收內(nèi)存也做不了,所以經(jīng)常要做被動(dòng)的事情,要軟重啟一下,所有的線程再重新跑起來(lái)。
事情是否已經(jīng)結(jié)束
回到接下來(lái)的一個(gè)問(wèn)題,我們按照剛才的思路,我們把樣品做好了,模塊也開(kāi)發(fā)好了,APP也做好了,是不是所有事情都完成了呢?舉個(gè)例子,某手機(jī)廠商說(shuō)要做“東半球最好的手機(jī)”,這等于是他的情懷,為什么呢?做硬件和軟件非常大的區(qū)別是,純互聯(lián)網(wǎng)的硬件把程序代碼寫(xiě)好就可以使用了,但是硬件來(lái)說(shuō)的話還會(huì)涉及到很多生產(chǎn)工藝,還要做一些認(rèn)證。比如說(shuō)像我們的插座,我們要經(jīng)過(guò)3C認(rèn)證等等,如果過(guò)不了這個(gè)東西就不能賣(mài)。像這個(gè)手機(jī)當(dāng)時(shí)出了一個(gè)問(wèn)題,它那個(gè)表面的玻璃像普通的安卓手機(jī)一樣,下面開(kāi)了幾個(gè)孔,蘋(píng)果只開(kāi)了五個(gè)孔,它開(kāi)了三個(gè)孔,在生產(chǎn)里面要求的工藝非常高,開(kāi)三個(gè)孔的情況下可能真正的良品率只能達(dá)到30%、40%,大部分開(kāi)孔的時(shí)候會(huì)導(dǎo)致這個(gè)玻璃碎了。像這種情況下,我們會(huì)把一個(gè)產(chǎn)品設(shè)計(jì)的非常好,認(rèn)為這個(gè)東西非常漂亮、工藝非常好,但實(shí)際上也要考慮我們的生產(chǎn)能不能做。
我們現(xiàn)在做出來(lái)一個(gè)整體的架構(gòu),上面是一些產(chǎn)品,下面是模塊這里面是為了解決家里面的很多設(shè)備,所以有一個(gè)ZigBee的網(wǎng)關(guān),通過(guò)網(wǎng)關(guān)再來(lái)連接。
這是我們的一個(gè)系統(tǒng)構(gòu)架,比較復(fù)雜一點(diǎn),因?yàn)檫@里面整個(gè)系統(tǒng)涉及到的業(yè)務(wù)特別多,它的產(chǎn)品也特別多。這里面接入的時(shí)候,其實(shí)整體上來(lái)說(shuō)也都差不多,一個(gè)是設(shè)備層的接入,還有一些業(yè)務(wù)層,里面做了一些報(bào)表、數(shù)據(jù)分析,還有一些OTA,可能還有一塊沒(méi)有畫(huà)出來(lái),就是我們?cè)谧錾虡I(yè)智能的時(shí)候?qū)嶋H上是剛剛那位朋友問(wèn)了一個(gè)問(wèn)題,就是我們有沒(méi)有嘗試做一些更加智能的分析之類的,實(shí)際上我們?cè)诟鶕?jù)用戶的需求在梳理一些模型,我們希望這些數(shù)據(jù)能夠幫我們分析用戶現(xiàn)在是在做什么。一個(gè)最簡(jiǎn)單的例子,當(dāng)某一個(gè)開(kāi)關(guān),可能是它每天晚上一點(diǎn)鐘都會(huì)亮一下,亮一兩分鐘又滅了,這可能意味著那個(gè)用戶有一個(gè)生物鐘,因?yàn)樯镧姇r(shí)間非常準(zhǔn),他每天都是這個(gè)時(shí)間點(diǎn)做這個(gè)動(dòng)作,比如說(shuō)上廁所之類的,這個(gè)時(shí)候非常需要把房間的燈打開(kāi),包括走廊的燈、洗手間的燈都要打開(kāi)。我們把這個(gè)事件分析出來(lái),到了這個(gè)時(shí)間點(diǎn)之后就不用摸黑按這個(gè)開(kāi)關(guān)了,我們會(huì)把這個(gè)幾個(gè)開(kāi)關(guān)打開(kāi),這就是他的路線。如果要能夠做的更細(xì)致化一點(diǎn)的化,我們還會(huì)發(fā)現(xiàn),如果我們?cè)谒X(jué)的時(shí)候突然之間醒過(guò)來(lái),然后燈亮了,實(shí)際上是非常刺眼、非常難受的事情,我們?cè)诖蜷_(kāi)燈的時(shí)候,是不是把燈的亮度只調(diào)出一點(diǎn)點(diǎn),有一點(diǎn)微弱的光,不會(huì)刺眼,又有足夠的亮度可以照明,讓他走過(guò)去。這是我們做的更深層次的分析。
特別推薦
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 一文看懂電壓轉(zhuǎn)換的級(jí)聯(lián)和混合概念
- 第12講:三菱電機(jī)高壓SiC芯片技術(shù)
- 準(zhǔn) Z 源逆變器的設(shè)計(jì)
- 貿(mào)澤電子持續(xù)擴(kuò)充工業(yè)自動(dòng)化產(chǎn)品陣容
- 低功耗嵌入式設(shè)計(jì)簡(jiǎn)介
- 如何通過(guò)基本描述找到需要的電容?
技術(shù)文章更多>>
- 充電器 IC 中的動(dòng)態(tài)電源路徑管理
- 了解負(fù)電壓的概念
- 單個(gè)IC也能構(gòu)建緊湊、高效的雙極性穩(wěn)壓器
- ESR 對(duì)陶瓷電容器選擇的影響(下)
- 基于射頻無(wú)線電力傳輸供電的無(wú)電池資產(chǎn)跟蹤模塊的先進(jìn)監(jiān)控系統(tǒng)
技術(shù)白皮書(shū)下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門(mén)搜索
圖像傳感器
陀螺傳感器
萬(wàn)用表
萬(wàn)用表使用
網(wǎng)絡(luò)電容
微波
微波功率管
微波開(kāi)關(guān)
微波連接器
微波器件
微波三極管
微波振蕩器
微電機(jī)
微調(diào)電容
微動(dòng)開(kāi)關(guān)
微蜂窩
位置傳感器
溫度保險(xiǎn)絲
溫度傳感器
溫控開(kāi)關(guān)
溫控可控硅
聞泰
穩(wěn)壓電源
穩(wěn)壓二極管
穩(wěn)壓管
無(wú)焊端子
無(wú)線充電
無(wú)線監(jiān)控
無(wú)源濾波器
五金工具