開源IOT——一個最小的物聯網系統設計方案及原始碼
或許這個可以當成是你的畢業設計又或者你可以用它來控制你想控制的東西,總之你可以用它來做一個最小的物聯網系統。
不過,在這裡可能沒有那麼複雜的功能,因為強調的是最小。BareMinimum,這也是為什麼我沒有改Arduino上面的工程名的原因,因為它是最小的,(PS:大家都懂的,如果玩硬體)。物聯網,這個東西一直很複雜,也不是很複雜,只是從硬體到軟體涉及到的東西過多了,不止一點點。當然寫在本文的方案也有很多,不止這一個,只是這個算是基本的最小的,僅此而已。(轉載保留 Phodal's BlogPhodal's zenthink)
關於
文件可能沒有足夠的詳細,因為剩下的部分都可以Google到,這裡就不寫詳細了。
框架:
- PHP Laravel
- jQuery (Javascript 主要用於Ajax)
- jQuery Mobile(可選)(我覺得我有點懶,於是從原來做的專案直接拿了出來)
- Bootstrap (可選) (其實沒有多大實際用處,只是因為好看和jQuery Mobile一樣)
語言:
Processing/C/C++ Arduino用
Python 如果你有Raspberry Pi或者與之相近的都可以,只要可以與Arduino串列埠通訊
PHP 我學得不是很好,因為Laravel沒有讓我學好,但是讓我能做想做的事。
相關文章
相關知識
搞硬體的同學需要重點了解的知識
- 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
相關推薦
開源IOT——一個最小的物聯網系統設計方案及原始碼
或許這個可以當成是你的畢業設計又或者你可以用它來控制你想控制的東西,總之你可以用它來做一個最小的物聯網系統。 不過,在這裡可能沒有那麼複雜的功能,因為強調的是最小。BareMinimum,這也是為什麼我沒有改Arduino上面的工程名的原因,因為它是最小的,(PS:大家都懂
菜鳥江濤帶你學最小物聯網系統之模組篇(01)—— WIFI模組ESP12F初次親密接觸
最近想搞下物聯網相關的東西,淘寶上買了兩塊ESP12F的WiFi模組,於是大張旗鼓(偷偷摸摸)的搞起來,自己每天的學習進度在部落格上做個記錄,也給有類似想法的同學一個踩坑避雷的借鑑,大家共同進步,好了,閒話不多說,開始進入正題。 1.WIFI模組ESP12F的初次親密接觸。
菜鳥江濤帶你學最小物聯網系統之模組篇(02)——STM32通過串列埠傳送AT指令控制ESP模組連線伺服器
接著上一篇繼續,這篇部落格我將帶大家使用STM32的串列埠來發送AT指令給ESP模組連線伺服器。當然目前測試使用的是區域網,自己的電腦當伺服器使用。使用TCP連線伺服器,STM32通過ESP12F模組透傳上傳溫溼度資料到伺服器。看下效果圖片 好了,看下主要的實現程式
基於 Arduino 和 IoT 雲平臺搭建物聯網系統
來看 需要 padding .... nal maker post 分層結構 car 在這篇文章中,我們將介紹如何搭建一款監測土壤水分的物聯網系統,用於在土壤幹燥時發出警報,提醒用戶。本項目使用了IoT 雲平臺來管理警報系統,同時存儲來自傳感器的數據。眾所周知,物聯網是當今
mqtt伺服器搭建成功,微信端可以通過websocket訪問,計算機可以訪問,安卓可以訪問,stm32嵌入式可以訪問,一個完整的物聯網系統!
mqtt伺服器搭建成功,微信端可以通過websocket訪問,計算機可以訪問,安卓可以訪問,stm32嵌入式可以訪問,一個完整的物聯網系統!伺服器採用activemq,啟動的時候要用./activemq start來看啟動資訊。另外可以用網頁來監控和除錯。
[分享]我發現了一個快速完成物聯網畢業設計的好方法!
對於計算機相關專業的畢業生來說,畢業論文真的是一件特別令人頭疼的事情,當然學霸除外…… 畢設、程式設計……每每想到這裡!是不是很想原地爆炸?! 莫著急往下看--確認過眼神,你就是我要幫助的人! 下面就給大家介紹一個快速完成畢業設計的方法(絕對的親身實踐哦!) 作為一名計算機專
物聯網 畢業設計——方案選擇
物聯網畢業設計 系統總體設計方案 Arduino+Raspberry Pi+Laravel+JSON+RESTful+Ajax+Python+HighCharts 硬體方案選擇 微控制器選擇 Arduino Arduino,是一個開放原始碼的單晶片微電腦,它
從0開始打造一個最小系統的資料庫
本篇趟個雷,把資料庫納入到輪子中,在我看來,資料庫比輪子複雜多了,是一個和作業系統差不多複雜度的東西,所以才能通過一個Oracle養活一家全球50強的公司。本文為後端輪子系列的第一篇,我們先來談談如何造個資料庫吧。 先來聊聊關係型資料庫 關係型資料庫(Relational Datab
在VS裡建立Windows窗體,讓其最小化在系統托盤,並顯示一個Icon圖示
C#實現系統托盤,C#窗體最小化時隱藏為工作列圖示的Window appllication 1.設定窗體屬性showintask=false 2.加notifyicon控制元件notifyicon1,為控制元件notifyicon1的屬性icon新增一個icon圖示。
IOT(5)---物聯網系統框架介紹
轉載: https://blog.csdn.net/robert_tin物聯網系統框架介紹下面將談到幾個關鍵問題:裝置如何接入網路?裝置間如何通訊?物聯網資料的用途?如何搭建起一個物聯網系統框架呢?它的技術架構又是怎麼樣呢?物聯網終端軟體系統架構?物聯網雲平臺系統架構?1.
最適合物聯網的開源資料庫
the Internet of Things (IoT) can be regarded as a network in which various things are connected to each other through a common platform. J
國內物聯網平臺初探(五) ——機智雲IoT物聯網雲服務平臺及智能硬件自助開發平臺
str gen smart 權限 頁面 方式 手動 開始 udp 平臺定位 機智雲平臺是致力於物聯網、智能硬件雲服務的開放平臺。平臺提供了從定義產品、設備端開發調試、應用開發、產測、運營管理等覆蓋智能硬件接入到運營管理全生命周期服務的能力。 機智雲平臺為開發者提供了自助式
物聯網系統的三個層次
這一 核心 解決 人機界面 感知 物聯網系統 進行 以及 標識 綜合國內各權威物聯網專家的分析,將物聯網系統劃分為三個層次: 感知層 網絡層 應用層 感知層解決的是人類世界和物理世界的數據獲取問題,由各種傳感器以及傳感器網關構成。該層被認為是物聯網的核心層,主要是物品標
物聯網系統開發如何選擇時序數據庫
壓縮 磁盤 可能性 服務器 至少 存儲設備 互聯 寫入 內容 在很多物聯網系統中,都需要對聯網的設備進行監控,並對監控采樣到的數據進行持久化。對采樣數據進行持久化,其實很多年前在工業領域已經有專門的數據庫來完成這個任務了。在工業領域,這個叫實時數據庫。 工業領域的實時數據
動手寫一個最小的作業系統(vmvare+img版)
文中提到要用軟盤,天哪嚕,這個年代我在哪去找軟盤。本來準備用u盤替代,但是搜了一下,說是很複雜。於是找到了以下替代方法: 在win10系統上,使用vmvare,從映象檔案啟動。 操作步驟如下: 1. 將書中的編譯程式碼儲存成檔案boot.asm org 07c00
物聯網系統的四種物理模型
物聯網的三層概念模型影響廣泛,這對於理解物聯網與網際網路的不同之處很有幫助,不過具體到開發的時候,從物理檢視看物聯網的架構,更容易看到組成物聯網系統的軟體模組,硬體模組,更容易理解如何架構和開發物聯網系統。 這裡抽象出四種最基礎的最典型的物聯網系統的物理模型。在這些模型裡,雲表示物聯
Python_Flask入門,一個最小的應用
1.windows安裝Flask 1.本示例只Python3以上版本軟體上執行如沒安裝Python的小夥伴請新安裝Python這裡就不多講述了。 pip install Flask 建立一個.py的檔案 # -*- coding utf-8 -*- #從flaks模組
busybox(三)最小根檔案系統
目錄 busybox(三)最小根檔案系統 引入 構建終端 構造inittab 配置應用程式 構建C庫 製作映像檔案yaffs title: busybox(三)最小根檔案系統 tag: arm date: 2018-11-14 1
ACM 給你一個整數Q,找出一個最小的正整數N,使得它的各位之積等於Q,如果不存在,請輸出-1 輸入:第一行為組數,
#include<iostream> #include<stdio.h> using namespace std; bool smallten(int data) { if((data<10)
建立最小根檔案系統
開發板 : JZ2440 Linux核心 : Linux-2.6.22.6 Busybox1.29.3 最小根檔案系統所需的部分: 1./dev/console /dev/null :建立根檔案系統所必備的,指出了所需要的標準輸入,標準輸出,標準錯誤裝置終端。 2.init