原文出處:https://www.phodal.com/blog/bare-minimum-iot-system-structure/
物聯(lián)網(wǎng)(Internet of Things,縮寫(xiě)IOT)是一個(gè)基于互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)等信息承載體,讓所有能夠被獨(dú)立尋址的普通物理對(duì)象實(shí)現(xiàn)互聯(lián)互通的網(wǎng)絡(luò)。
物聯(lián)網(wǎng)一般為無(wú)線(xiàn)網(wǎng),由于每個(gè)人周?chē)脑O(shè)備可以達(dá)到一千至五千個(gè),所以物聯(lián)網(wǎng)可能要包含500萬(wàn)億至一千萬(wàn)億個(gè)物體,在物聯(lián)網(wǎng)上,每個(gè)人都可以應(yīng)用電子標(biāo)簽將真實(shí)的物體上網(wǎng)聯(lián)結(jié),在物聯(lián)網(wǎng)上都可以查找出它們的具體位置。通過(guò)物聯(lián)網(wǎng)可以用中心計(jì)算機(jī)對(duì)機(jī)器、設(shè)備、人員進(jìn)行集中管理、控制,也可以對(duì)家庭設(shè)備、汽車(chē)進(jìn)行遙控,以及搜尋位置、防止物品被盜等各種應(yīng)用。
簡(jiǎn)單的來(lái)說(shuō) Internet是一個(gè)由計(jì)算機(jī)組成的網(wǎng)絡(luò),那么物聯(lián)網(wǎng)就是一個(gè)由物體(Things)組成的網(wǎng)絡(luò),只不過(guò)其依賴(lài)于Internet,是Internet的一部分。
這個(gè)也就是我們要討論的主題了,我們要做的最小物聯(lián)網(wǎng)系統(tǒng)其實(shí)也就相當(dāng)于是一個(gè)平臺(tái)。我們可以上傳我們各種物體的信息,同時(shí)給予這些物體一些屬性,我們也可以通過(guò)網(wǎng)絡(luò)來(lái)控制這些物體,而他們之間也可以相互控制。因此,我們需要給他們提供一個(gè)網(wǎng)絡(luò),這就是RESTful的由來(lái)。
所以我們也稍微了解一下RESTful吧。
REST 從資源的角度來(lái)觀察整個(gè)網(wǎng)絡(luò),分布在各處的資源由URI確定,而客戶(hù)端的應(yīng)用通過(guò)URI來(lái)獲取資源的表征。獲得這些表征致使這些應(yīng)用程序轉(zhuǎn)變了其狀態(tài)。隨著不斷獲取資源的表征,客戶(hù)端應(yīng)用不斷地在轉(zhuǎn)變著其狀態(tài),所謂表征狀態(tài)轉(zhuǎn)移(Representational State Transfer)。
我們的世界是由資源來(lái)組成的,一個(gè)物體也就相當(dāng)于是一個(gè)資源,以這種方式來(lái)構(gòu)建我們的物聯(lián)網(wǎng)系統(tǒng),在目前來(lái)說(shuō)是再好不過(guò)的一個(gè)方案了。
REST架構(gòu)就是希望能夠統(tǒng)一這一類(lèi)的Hypermedia Controls, 賦予他們標(biāo)準(zhǔn)的, 高度可擴(kuò)展的標(biāo)準(zhǔn)語(yǔ)義及表現(xiàn)形式, 使得甚至無(wú)人工干預(yù)的機(jī)器與機(jī)器間的通用交互協(xié)議邊的可能.
這個(gè)也就是我們的目的了,物聯(lián)網(wǎng)最后的核心就是使物體與物體之間的交互成為可能。
那么,這里也就解釋了為什么我們要用RESTful來(lái)做這個(gè)最小系統(tǒng)的原因了。
例如,一個(gè)簡(jiǎn)單的例子, 列舉所有物體狀態(tài),
GET http://localhost/athome
呈現(xiàn)某一特定狀態(tài),
GET http://localhost/athome/1/
剩下的部分這里就不多說(shuō)了,多說(shuō)無(wú)益,可以自己谷歌去。
接著我們要討論的就是系統(tǒng)框架
Raspberry Pi在這里只是充當(dāng)了數(shù)據(jù)的發(fā)送和接收,雖然我們可以直接將Raspberry PI作為控制的對(duì)象,但是將這個(gè)從中剝離來(lái)講清楚系統(tǒng)的結(jié)構(gòu)會(huì)更加簡(jiǎn)單。從而,可以讓我們把核心注意力聚焦在要解決的問(wèn)題上,也就是數(shù)據(jù)傳送,每個(gè)部分都可以簡(jiǎn)單地從系統(tǒng)剝離出來(lái),用另外的事物來(lái)替換。
這個(gè)問(wèn)題的答案和上面是一樣的,只是因?yàn)橛行└阄锫?lián)網(wǎng)是從軟件過(guò)來(lái)的,對(duì)于他們來(lái)說(shuō)去理解端口的難道可能有點(diǎn)大。所以,我們?cè)诤?jiǎn)化系統(tǒng)設(shè)計(jì)的同時(shí),也把系統(tǒng)的代碼簡(jiǎn)化了。因?yàn)锳rduino足夠的簡(jiǎn)單,我們可以關(guān)心問(wèn)題的本質(zhì),而不是如何去編程。
至于什么是Ajax,
AJAX即“Asynchronous JavaScript and XML”(異步的JavaScript與XML技術(shù)),指的是一套綜合了多項(xiàng)技術(shù)的瀏覽器端網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。
這里的目的只是在于演示如何運(yùn)用這些數(shù)據(jù),使它具有他應(yīng)有的價(jià)值,而不在于技術(shù)本身。當(dāng)然ajax不是必需的,如果你需要的只是用來(lái)控制這個(gè)燈。
只是因?yàn)閭€(gè)人喜愛(ài),你也可以用Ruby On Rails來(lái)搭建這樣一個(gè)功能,或者是Java。只不過(guò)PHP在我的服務(wù)器上運(yùn)行得挺不錯(cuò)的,而且我又不需要重新去寫(xiě)配置那些配置。 同時(shí)Laravel可以簡(jiǎn)單的開(kāi)發(fā)我們所需要的功能,換句話(huà)說(shuō)他是PHP世界的Ruby On Rails。
更多建議: