開源IOT——一個最小的物聯網系統設計方案及源碼

來源:互聯網
上載者:User

或許這個可以當成是你的畢業設計又或者你可以用它來控制你想控制的東西,總之你可以用它來做一個最小的物聯網系統。

不過,在這裡可能沒有那麼複雜的功能,因為強調的是最小。BareMinimum,這也是為什麼我沒有改Arduino上面的工程名的原因,因為它是最小的,(PS:大家都懂的,如果玩硬體)。物聯網,這個東西一直很複雜,也不是很複雜,只是從硬體到軟體涉及到的東西過多了,不止一點點。當然寫在本文的方案也有很多,不止這一個,只是這個算是基本的最小的,僅此而已。(轉載保留 Phodal's Blog Phodal's  zenthink) 


關於

源碼:https://github.com/gmszone/iot

首頁:http://iot.phodal.com/

文檔可能沒有足夠的詳細,因為剩下的部分都可以Google到,這裡就不寫詳細了。 架構:

PHP Laravel  jQuery (Javascript 主要用於Ajax) jQuery Mobile(可選)(我覺得我有點懶,於是從原來做的項目直接拿了出來) Bootstrap (可選) (其實沒有多大實際用處,只是因為好看和jQuery Mobile一樣)

語言:

Processing/C/C++ Arduino用 

Python 如果你有Raspberry Pi或者與之相近的都可以,只要可以與Arduino串口通訊

PHP 我學得不是很好,因為Laravel沒有讓我學好,但是讓我能做想做的事。 相關文章 一個最小的物聯網系統設計方案及源碼 最小物聯網系統(一)——系統組成 最小物聯網系統(二)——RESTful 最小物聯網系統(三)——建立RESTful
最小物聯網系統(四)——詳解Laravel的RESTful
最小物聯網系統(五)——Laravel RESTful模板化
最小物聯網系統(六)——Ajax打造可視化
最小物聯網系統(七)——與伺服器通訊
最小物聯網系統(八)——與單片機通訊 最小物聯網系統(九)——Android用戶端 相關知識 搞硬體的同學需要重點瞭解的知識

RESTful Ajax JSON

搞軟體的同學需要重要瞭解的知識

串口通訊 高低電平

關於伺服器

Nginx 需要配置,具體配置可以參照github上面的代碼 LNMP 直接用上面的會比較簡單,但是可能也會遇到一些問題。 Phpmyadmin 最好需要有這個,如果不是很精通MYSQL 注意

。請儘可能少我的用我的網站做測試


設計方案 系統架構圖


如何開始

git clone https://github.com/gmszone/iot.gitcp iot/rest PATH_OF_HTDOCS/


建立一個新的資料庫,如iot
編輯 app/config/database.php

'mysql' => array('driver' => 'mysql','host' => 'localhost','database' => 'iot','username' => 'root','password' => ' ','charset' => 'utf8','collation' => 'utf8_unicode_ci','prefix' => '',),


配置nginx,添加,詳細可參考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 existsif (!-e $request_filename){rewrite ^/(.*)$ /index.php?/$1 last;break;}


測試

sudo python python/get.py 

再根據需要修改連接埠,視真實的連接埠而修改。

關於物聯網 物聯網(Internet of Things,縮寫IOT)是一個基於互連網、傳統電信網等資訊承載體,讓所有能夠被獨立定址的普通物理對象實現互聯互連的網路。
物聯網一般為無線網,由於每個人周圍的裝置可以達到一千至五千個,所以物聯網可能要包含500萬億至一千萬億個物體,在物聯網上,每個人都可以應用電子標籤將真實的物體上網連接,在物聯網上都可以尋找出它們的具體位置。通過物聯網可以用中心電腦對機器、裝置、人員進行集中管理、控制,也可以對家庭裝置、汽車進行遙控,以及搜尋位置、防止物品被盜等各種應用。
簡單的來說

Internet是一個由電腦群組成的網路,那麼物聯網就是一個由物體(Things)組成的網路,只不過其依賴於Internet,是Internet的一部分。

最小物聯網系統 這個也就是我們要討論的主題了,我們要做的最小物聯網系統其實也就相當於是一個平台。我們可以上傳我們各種物體的資訊,同時給予這些物體一些屬性,我們也可以通過網路來控制這些物體,而他們之間也可以相互控制。因此,我們需要給他們提供一個網路,這就是RESTful的由來。

所以我們也稍微瞭解一下RESTful吧。
RESTful REST 從資源的角度來觀察整個網路,分布在各處的資源由URI確定,而用戶端的應用通過URI來擷取資源的表徵。獲得這些表徵致使這些應用程式轉變了其狀態。隨著不斷擷取資源的表徵,用戶端應用不斷地在轉變著其狀態,所謂表徵狀態轉移(Representational State Transfer)。

我們的世界是由資源來組成的,一個物體也就相當於是一個資源,以這種方式來構建我們的物聯網系統,在目前來說是再好不過的一個方案了。
REST架構就是希望能夠統一這一類的Hypermedia Controls, 賦予他們標準的, 高度可擴充的標準語義及表現形式, 使得甚至無人工幹預的機器與機器間的通用互動協議邊的可能.
這個也就是我們的目的了,物聯網最後的核心就是使物體與物體之間的互動成為可能。
那麼,這裡也就解釋了為什麼我們要用RESTful來做這個最小系統的原因了。
最小系統中的RESTful 例如,一個簡單的例子,
列舉所有物體狀態,

    GET http://localhost/athome

呈現某一特定狀態,

    GET http://localhost/athome/1/

剩下的部分這裡就不多說了,多說無益,可以自己Google去。
接著我們要討論的就是系統架構

系統架構

為什麼是Raspberry PI Raspberry Pi在這裡只是充當了資料的發送和接收,雖然我們可以直接將Raspberry PI作為控制的對象,但是將這個從中剝離來講清楚系統的結構會更加簡單。從而,可以讓我們把核心注意力聚焦在要解決的問題上,也就是資料傳送,每個部分都可以簡單地從系統剝離出來,用另外的事物來替換。

為什麼是Arduino 這個問題的答案和上面是一樣的,只是因為有些搞物聯網是從軟體過來的,對於他們來說去理解連接埠的難道可能有點大。所以,我們在簡化系統設計的同時,也把系統的代碼簡化了。因為Arduino足夠的簡單,我們可以關心問題的本質,而不是如何去編程。

為什麼是Ajax 至於什麼是Ajax,
AJAX即“Asynchronous JavaScript and XML”(非同步JavaScript與XML技術),指的是一套綜合了多項技術的瀏覽器端網頁開發技術。
這裡的目的只是在於示範如何運用這些資料,使它具有他應有的價值,而不在於技術本身。當然ajax不是必需的,如果你需要的只是用來控制這個燈。

為什麼是Laravel 只是因為個人喜愛,你也可以用Ruby On Rails來搭建這樣一個功能,或者是Java。只不過PHP在我的伺服器上運行得挺不錯的,而且我又不需要重新去寫配置那些配置。

同時Laravel可以簡單的開發我們所需要的功能,換句話說他是PHP世界的Ruby On Rails。


討論空間

QQ群:348100589

BBS: http://bbs.phodal.com

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.