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

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

不過,在這裡可能沒有那麼複雜的功能,因為強調的是最小。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沒有讓我學好,但是讓我能做想做的事。

相關文章

  1. 一個最小的物聯網系統設計方案及原始碼
  2. 最小物聯網系統(一)——系統組成
  3. 最小物聯網系統(二)——RESTful
  4. 最小物聯網系統(三)——建立RESTful
  5. 最小物聯網系統(四)——詳解Laravel的RESTful
  6. 最小物聯網系統(五)——Laravel RESTful模板化
  7. 最小物聯網系統(六)——Ajax打造視覺化
  8. 最小物聯網系統(七)——與伺服器通訊
  9. 最小物聯網系統(八)——與微控制器通訊
  10. 最小物聯網系統(九)——Android客戶端

相關知識

搞硬體的同學需要重點了解的知識

  • RESTful
  • Ajax
  • JSON

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

  • 串列埠通訊
  • 高低電平

關於伺服器

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

注意

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

設計方案

系統框架圖

如何開始

git clone https://github.com/gmszone/iot.git
cp 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 exists
if (!-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/

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

系統框架

為什麼是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