【技術(shù)博客推薦】創(chuàng)客程序員設(shè)計(jì)實(shí)現(xiàn)最小物聯(lián)網(wǎng)系統(tǒng)
來(lái)源:程序員人生 發(fā)布時(shí)間:2014-10-16 21:08:29 閱讀次數(shù):3430次
【編者按】物聯(lián)網(wǎng)就是物物相連的互聯(lián)網(wǎng),編者一直覺(jué)得物聯(lián)網(wǎng)將會(huì)是有創(chuàng)客精神的程序員能夠大展拳腳的領(lǐng)域。在屬于創(chuàng)客們的盛會(huì)深圳Maker Faire即將舉辦之際,編者也為大家推薦一個(gè)關(guān)于物聯(lián)網(wǎng)的技術(shù)博客,博主黃峰達(dá)目前就職于ThoughtWorks,主要的研究方向是物聯(lián)網(wǎng)和數(shù)據(jù)可視化。黃峰達(dá)將自己的畢業(yè)設(shè)計(jì)成果開(kāi)源,并將設(shè)計(jì)概要整理成為物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)專欄,以下為專欄部分內(nèi)容節(jié)選:
關(guān)于物聯(lián)網(wǎng)
物聯(lián)網(wǎng)(Internet of Things,縮寫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ú)線網(wǎng),由于每個(gè)人周圍的設(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è)備、汽車進(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ò)其依賴于Internet,是Internet的一部分。
最小物聯(lián)網(wǎng)系統(tǒng)
因?yàn)閺?qiáng)調(diào)的是最小,BareMinimum,這也是為什么我沒(méi)有改Arduino上面的工程名的原因,因?yàn)樗亲钚〉模?PS:大家都懂的,如果玩硬件)。物聯(lián)網(wǎng),這個(gè)東西一直很復(fù)雜,也不是很復(fù)雜,只是從硬件到軟件涉及到的東西過(guò)多了,不止一點(diǎn)點(diǎn)。當(dāng)然寫在本文的方案也有很多,不止這一個(gè),只是這個(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吧。
RESTful
REST從資源的角度來(lái)觀察整個(gè)網(wǎng)絡(luò),分布在各處的資源由URI確定,而客戶端的應(yīng)用通過(guò)URI來(lái)獲取資源的表征。獲得這些表征致使這些應(yīng)用程序轉(zhuǎn)變了其狀態(tài)。隨著不斷獲取資源的表征,客戶端應(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)一這一類的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)的原因了。
最小系統(tǒng)中的RESTful
例如,一個(gè)簡(jiǎn)單的例子,列舉所有物體狀態(tài):
GET http://localhost/athome
呈現(xiàn)某一特定狀態(tài),
GET http://localhost/athome/1/
剩下的部分這里就不多說(shuō)了,多說(shuō)無(wú)益,可以自己谷歌去。
接著我們要討論的就是系統(tǒng)框架:

系統(tǒng)框架圖
為什么是Raspberry PI
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)替換。
為什么是Arduino
這個(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,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è)燈。
為什么是Laravel
只是因?yàn)閭€(gè)人喜愛(ài),你也可以用Ruby On Rails來(lái)搭建這樣一個(gè)功能,或者是Java。只不過(guò)PHP在我的服務(wù)器上運(yùn)行得挺不錯(cuò)的,而且我又不需要重新去寫配置那些配置。
同時(shí)Laravel可以簡(jiǎn)單的開(kāi)發(fā)我們所需要的功能,換句話說(shuō)他是PHP世界的Ruby On Rails。
關(guān)于項(xiàng)目
源碼:https://github.com/gmszone/iot
首頁(yè):http://iot.phodal.com/
文檔可能沒(méi)有足夠的詳細(xì),因?yàn)槭O碌牟糠侄伎梢訥oogle到,這里就不寫詳細(xì)了。
框架:
- PHP Laravel
- jQuery (Javascript 主要用于Ajax)
- jQuery Mobile(可選)(我覺(jué)得我有點(diǎn)懶,于是從原來(lái)做的項(xiàng)目直接拿了出來(lái))
- Bootstrap (可選) (其實(shí)沒(méi)有多大實(shí)際用處,只是因?yàn)楹每春蚸Query Mobile一樣)
語(yǔ)言:
- Processing/C/C++:Arduino用
- Python,如果你有Raspberry Pi或者與之相近的都可以,只要可以與Arduino串口通信
- PHP:我學(xué)得不是很好,因?yàn)長(zhǎng)aravel沒(méi)有讓我學(xué)好,但是讓我能做想做的事。
相關(guān)知識(shí)
搞硬件的同學(xué)需要重點(diǎn)了解的知識(shí)
搞軟件的同學(xué)需要重要了解的知識(shí)
關(guān)于服務(wù)器
- Nginx 需要配置,具體配置可以參照github上面的代碼
- LNMP 直接用上面的會(huì)比較簡(jiǎn)單,但是可能也會(huì)遇到一些問(wèn)題。
- Phpmyadmin 最好需要有這個(gè),如果不是很精通MYSQL
注意
!請(qǐng)盡可能少我的用我的網(wǎng)站做測(cè)試
如何開(kāi)始
git clone https://github.com/gmszone/iot.git
cp iot/rest PATH_OF_HTDOCS/
創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),如iot,編輯 app/config/database.php
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'iot',
'username' => 'root',
'password' => ' ',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
配置Nginx,添加,詳細(xì)可參考Nginx下面的配置
# include /etc/nginx/includes/enforce_non_www;
if ($host ~* ^www.(.*))
{
set $host_without_www $1;
rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
}
# Check if file exists
if (!-e $request_filename)
{
rewrite ^/(.*)$ /index.php?/$1 last;
break;
}
測(cè)試
sudo python python/get.py
再根據(jù)需要修改端口,視真實(shí)的端口而修改。
物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)專欄:
- 開(kāi)源IOT――一個(gè)最小的物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案及源碼
- 一個(gè)最小物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案及源碼――Android客戶端
- 一個(gè)最小的物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案及源碼――與服務(wù)器通訊
- 最小物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)――給Laravel添加測(cè)試
- 最小物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)――使用說(shuō)明
- 最小物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)――添加硬件
- 物聯(lián)網(wǎng) 畢業(yè)設(shè)計(jì)――社交物聯(lián)網(wǎng)系統(tǒng)的思考
- 物聯(lián)網(wǎng) 畢業(yè)設(shè)計(jì)――方案選擇
- 物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)工具箱――Dashboard框架Dashing
- 最小物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)――添加Dashboard
技術(shù)博客是學(xué)習(xí)新技術(shù)的渠道之一,他們的實(shí)踐經(jīng)驗(yàn)更有參考性,可讀性較高。CSDN及ITeye的博客匯集了大批的優(yōu)秀博主,近期我們會(huì)挖掘冰山下蘊(yùn)藏的巨大寶藏,讓這些作者的潛心研究浮出水面,惠及更多的技術(shù)愛(ài)好者。如果你也是云計(jì)算技術(shù)愛(ài)好者,有云計(jì)算相關(guān)技術(shù)經(jīng)驗(yàn),并發(fā)表過(guò)數(shù)量不少、質(zhì)量也不錯(cuò)的技術(shù)文章,歡迎通過(guò)評(píng)論或@CSDN云計(jì)算微博聯(lián)系我們。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)