物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案-RESTful_第1頁
物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案-RESTful_第2頁
物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案-RESTful_第3頁
物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案-RESTful_第4頁
物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)方案-RESTful_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、關(guān)于物聯(lián)網(wǎng)物聯(lián)網(wǎng)(Internet of Things,縮寫IOT)是一個(gè)基于互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)等信息承載體,讓所有能夠被獨(dú)立尋址的普通物理對象實(shí)現(xiàn)互聯(lián)互通的網(wǎng)絡(luò)。物聯(lián)網(wǎng)一般為無線網(wǎng),由于每個(gè)人周圍的設(shè)備可以達(dá)到一千至五千個(gè),所以物聯(lián)網(wǎng)可能要包含500萬億至一千萬億個(gè)物體,在物聯(lián)網(wǎng)上,每個(gè)人都可以應(yīng)用電子標(biāo)簽將真實(shí)的物體上網(wǎng)聯(lián)結(jié),在物聯(lián)網(wǎng)上都可以查找出它們的具體位置。通過物聯(lián)網(wǎng)可以用中心計(jì)算機(jī)對機(jī)器、設(shè)備、人員進(jìn)行集中管理、控制,也可以對家庭設(shè)備、汽車進(jìn)行遙控,以及搜尋位置、防止物品被盜等各種應(yīng)用。簡單的來說 Internet是一個(gè)由計(jì)算機(jī)組成的網(wǎng)絡(luò),那么物聯(lián)網(wǎng)就是一個(gè)由物體(Things)組

2、成的網(wǎng)絡(luò),只不過其依賴于Internet,是Internet的一部分。最小物聯(lián)網(wǎng)系統(tǒng)這個(gè)也就是我們要討論的主題了,我們要做的最小物聯(lián)網(wǎng)系統(tǒng)其實(shí)也就相當(dāng)于是一個(gè)平臺。我們可以上傳我們各種物體的信息,同時(shí)給予這些物體一些屬性,我們也可以通過網(wǎng)絡(luò)來控制這些物體,而他們之間也可以相互控制。因此,我們需要給他們提供一個(gè)網(wǎng)絡(luò),這就是RESTful的由來。所以我們也稍微了解一下RESTful吧。RESTfulREST 從資源的角度來觀察整個(gè)網(wǎng)絡(luò),分布在各處的資源由URI確定,而客戶端的應(yīng)用通過URI來獲取資源的表征。獲得這些表征致使這些應(yīng)用程序轉(zhuǎn)變了其狀態(tài)。隨著不斷獲取資源的表征,客戶端應(yīng)用不斷地在轉(zhuǎn)變著其

3、狀態(tài),所謂表征狀態(tài)轉(zhuǎn)移(Representational State Transfer)。我們的世界是由資源來組成的,一個(gè)物體也就相當(dāng)于是一個(gè)資源,以這種方式來構(gòu)建我們的物聯(lián)網(wǎng)系統(tǒng),在目前來說是再好不過的一個(gè)方案了。REST架構(gòu)就是希望能夠統(tǒng)一這一類的Hypermedia Controls, 賦予他們標(biāo)準(zhǔn)的, 高度可擴(kuò)展的標(biāo)準(zhǔn)語義及表現(xiàn)形式, 使得甚至無人工干預(yù)的機(jī)器與機(jī)器間的通用交互協(xié)議邊的可能.這個(gè)也就是我們的目的了,物聯(lián)網(wǎng)最后的核心就是使物體與物體之間的交互成為可能。那么,這里也就解釋了為什么我們要用RESTful來做這個(gè)最小系統(tǒng)的原因了。最小系統(tǒng)中的RESTful例如,一個(gè)簡單的例子,

4、 列舉所有物體狀態(tài),GET 呈現(xiàn)某一特定狀態(tài),GET 剩下的部分這里就不多說了,多說無益,可以自己谷歌去。接著我們要討論的就是系統(tǒng)框架系統(tǒng)框架為什么是Raspberry PIRaspberry Pi在這里只是充當(dāng)了數(shù)據(jù)的發(fā)送和接收,雖然我們可以直接將Raspberry PI作為控制的對象,但是將這個(gè)從中剝離來講清楚系統(tǒng)的結(jié)構(gòu)會更加簡單。從而,可以讓我們把核心注意力聚焦在要解決的問題上,也就是數(shù)據(jù)傳送,每個(gè)部分都可以簡單地從系統(tǒng)剝離出來,用另外的事物來替換。為什么是Arduino這個(gè)問題的答案和上面是一樣的,只是因?yàn)橛行└阄锫?lián)網(wǎng)是從軟件過來的,對于他們來說去理解端口的難道可能有點(diǎn)大。所以,我們在

5、簡化系統(tǒng)設(shè)計(jì)的同時(shí),也把系統(tǒng)的代碼簡化了。因?yàn)锳rduino足夠的簡單,我們可以關(guān)心問題的本質(zhì),而不是如何去編程。為什么是Ajax至于什么是Ajax,AJAX即“Asynchronous JavaScript and XML”(異步的JavaScript與XML技術(shù)),指的是一套綜合了多項(xiàng)技術(shù)的瀏覽器端網(wǎng)頁開發(fā)技術(shù)。這里的目的只是在于演示如何運(yùn)用這些數(shù)據(jù),使它具有他應(yīng)有的價(jià)值,而不在于技術(shù)本身。當(dāng)然ajax不是必需的,如果你需要的只是用來控制這個(gè)燈。為什么是Laravel只是因?yàn)閭€(gè)人喜愛,你也可以用Ruby On Rails來搭建這樣一個(gè)功能,或者是Java。只不過PHP在我的服務(wù)器上運(yùn)行得挺

6、不錯(cuò)的,而且我又不需要重新去寫配置那些配置。 同時(shí)Laravel可以簡單的開發(fā)我們所需要的功能,換句話說他是PHP世界的Ruby On Rails。這里不會再重述之前的問題,這里只是將需要的步驟一個(gè)個(gè)寫下來,然后丟到這里好好說一下。至于RESTful是什么,前面已經(jīng)介紹了,就不再重復(fù)了。那么下面,我們就用Laravel來搭建一個(gè)平臺給物聯(lián)網(wǎng)用的。安裝Laravel這個(gè)就比較簡單了,不過在那之前你要有g(shù)it以及安裝了php環(huán)境,這個(gè)在linux上面比較好實(shí)現(xiàn),可以用Raspberry PI或者是你的電腦來做這個(gè),不一定用用上你的服務(wù)器。git clone 先clone這個(gè)git,如果你沒有安裝好

7、PHP,請安裝好,and go on。cd laravellaravel用到了php的包管理工具composer,于是我們還需要用到composer,與Laravel相比也算是一個(gè)優(yōu)雅的工具。curl -sS | php這里推薦的是linux系統(tǒng),如果你是*nix都是可以的(ps:mac os x屬于unix分支),除了windows,所以如果是windows,請直接下載Composer-Setup然后讓我們安裝所需要的那些包php composer.phar install當(dāng)然這里用的是比較通用的,如果你是*nix,有支持可以直接composer install配置MySQL這里并不會列舉M

8、ySQL的安裝方法,如果你是openSUSE,可以zypper install mysql這個(gè)也可以,不過最近我盡量到遷移到MariaDB了。zypper install mariadb當(dāng)然,最簡單的方法是直接上官網(wǎng)。這里說的是修改database.phpapp/config/database.php要修改的就是這個(gè) 'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database'

9、; => 'iot', 'username' => 'root', 'password' => '940217', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),如果你已經(jīng)有phpmyadmin,似乎對你來說已經(jīng)很簡單了,如果沒有的話,就直

10、接用mysql -uroot -p來創(chuàng)建一個(gè)新CREATE DATABASE IF NOT EXISTS bbs default charset utf8 COLLATE utf8_general_ci;數(shù)據(jù)庫的目的在于存儲數(shù)據(jù)等等的閑話這里就不多說了,創(chuàng)建一個(gè)RESTful的目的在于產(chǎn)生下面的JSON格式數(shù)據(jù),以便于我們在Android、Java、Python、jQuery等語言框架或者平臺上可以調(diào)用,最主要的是可以直接用Ajax來產(chǎn)生更炫目的效果。id: 1,temperature: 14,sensors1: 12,sensors2: 12,led1: 0數(shù)據(jù)庫遷移這個(gè)名字是源自于Ruby

11、 On Rails在那時(shí)候的印象,不直接使用MySQL的目的在于讓我們可以專注于過程。創(chuàng)建表表的概念,類似于在Excel中的表,如果你真實(shí)不懂?dāng)?shù)據(jù)庫。 讓我們創(chuàng)建一個(gè)athomes的表,為什么是athomes,因?yàn)橐郧霸趯慳ndroid程序的時(shí)候就叫的是athome,忽略掉這些將要的因素吧。php artisan migrate:make create_athomes_table打開 app/database/create_athomes_table.php這里的是由日期和某些東西組成的,修改生成的代碼為下面。<!-?phpuse IlluminateDatabaseSchemaBlue

12、print; use IlluminateDatabaseMigrationsMigration;class CreateAthomesTable extends Migration public function up() Schema:create('athomes', function(Blueprint $table) $table->increments('id'); $table-&gt;float('temperature'); $table-&gt;float('sensors1'); $ta

13、ble-&gt;float('sensors2'); $table-&gt;boolean('led1'); $table-&gt;timestamps(); ); public function down() Schema:drop('athomes'); 意思大致就是id是自加的,也就是我們在localhost/athome/id,當(dāng)我們創(chuàng)建一個(gè)新的數(shù)據(jù)的時(shí)候,會自動(dòng)加上去,最后一個(gè)timestamps批的是時(shí)間,會包含創(chuàng)建時(shí)間和修改時(shí)間。 剩下的temperature,sensors1,sensors2是小數(shù),以及只

14、有真和假的led1。數(shù)據(jù)庫遷移我們只是寫了我們需要的數(shù)據(jù)的格式而并沒有丟到數(shù)據(jù)庫里,php artisan migrate這個(gè)就是我們執(zhí)行遷移的命令,如果你用phpmyadmin可以直接打開查看,沒有的話,可以。mysql -uroot -puse iot;select * from athomes;就可以看到我們寫的東西,那么接下來就是創(chuàng)建RESTful 服務(wù)了創(chuàng)建RESTful用下面的代碼實(shí)現(xiàn)我們稱之為Athomes控制器的創(chuàng)建php artisan controller:make AthomesController就會在app/controllers下面生成下面的代碼<!-?php

15、class AthomesController extends BaseController /* * Display a listing of the resource. * * return Response */ public function index() / /* * Show the form for creating a new resource. * * return Response */ public function create() / /* * Store a newly created resource in storage. * * return Respons

16、e */ public function store() / /* * Display the specified resource. * * param int $id * return Response */ public function show($id) / /* * Show the form for editing the specified resource. * * param int $id * return Response */ public function edit($id) / /* * Update the specified resource in stora

17、ge. * * param int $id * return Response */ public function update($id) / /* * Remove the specified resource from storage. * * param int $id * return Response */ public function destroy($id) / ->Laravel Resources上面的代碼過于沉重,請讓我用Ctrl+C來帶來點(diǎn)知識吧。VerbPathActionRoute NameGET/resourceindexresource.indexGET

18、/resource/createcreateresource.createPOST/resourcestoreresource.storeGET/resource/resourceshowresource.showGET/resource/resource/editeditresource.editPUT/PATCH/resource/resourceupdateresource.updateDELETE/resource/resourcedestroyresource.destroy所以我們只需要專注于創(chuàng)建create,edit,show,destory,等等。好吧,你可能沒有耐心了,但是在

19、修改這個(gè)之前我們需要先在 app/model加個(gè)class<!-?phpclass Athomes extends Eloquent protected $table = 'athomes'如果你想要的只是控制器Athomes的代碼的話。<?phpclass AthomesController extends BaseController /* * Display a listing of the resource. * * return Response */ public $restful=true; protected $athome; public func

20、tion _construct(Athomes $athome) $this->athome = $athome ; public function index() $maxid=Athomes:all(); return Response:json($maxid); /* * Show the form for creating a new resource. * * return Response */ public function create() $maxid=Athomes:max('id'); return View:make('athome.cre

21、ate')-&gt;with('maxid',$maxid); /* * Store a newly created resource in storage. * * return Response */ public function store() / validate / read more on validation at $rules = array( 'led1'=&gt;'required', 'sensors1' =&gt; 'required|numeric|Min:-50

22、|Max:80', 'sensors2' =&gt; 'required|numeric|Min:-50|Max:80', 'temperature' =&gt; 'required|numeric|Min:-50|Max:80' ); $validator = Validator:make(Input:all(), $rules); / process the login if ($validator-&gt;fails() return Redirect:to('athome/creat

23、e') -&gt;withErrors($validator) -&gt;withInput(Input:except('password'); else / store $nerd = new Athomes; $nerd-&gt;sensors1 = Input:get('sensors1'); $nerd-&gt;sensors2 = Input:get('sensors2'); $nerd-&gt;temperature = Input:get('temperature');

24、 $nerd-&gt;led1 = Input:get('led1'); $nerd-&gt;save(); / redirect Session:flash('message', 'Successfully created athome!'); return Redirect:to('athome'); /* * Display the specified resource. * * param int $id * return Response */ public function show($id) $myi

25、d=Athomes:find($id); $maxid=Athomes:where('id','=',$id) -&gt;select('id','temperature','sensors1','sensors2','led1') -&gt;get(); return Response:json($maxid); /* * Show the form for editing the specified resource. * * param int $id * re

26、turn Response */ public function edit($id) / get the nerd $athome = Athomes:find($id); / show the edit form and pass the nerd return View:make('athome.edit') -&gt;with('athome', $athome); /* * Update the specified resource in storage. * * param int $id * return Response */ public

27、 function update($id) / validate / read more on validation at $rules = array( 'led1'=&gt;'required|', 'sensors1' =&gt; 'required|numeric|Min:-50|Max:80', 'sensors2' =&gt; 'required|numeric|Min:-50|Max:80', 'temperature' =&gt; 'required|numeric|Min:-50|Max:80' ); $validator = Validator:make(Input:all(), $rules); / process the login if ($validator-&gt;fails()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論