Blog | Phodal - A Growth Engineerhttp://www.phodal.com/blog/2015-05-28T01:27:17.223179+00:00Blog最小物联网系统(一)——系统组成2013-12-22T19:45:33+00:002015-02-06T06:15:20.314797+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/bare-minimum-iot-system-structure/##关于物联网##
<blockquote>物联网(Internet of Things,缩写IOT)是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络。</blockquote>
<blockquote>物联网一般为无线网,由于每个人周围的设备可以达到一千至五千个,所以物联网可能要包含500万亿至一千万亿个物体,在物联网上,每个人都可以应用电子标签将真实的物体上网联结,在物联网上都可以查找出它们的具体位置。通过物联网可以用中心计算机对机器、设备、人员进行集中管理、控制,也可以对家庭设备、汽车进行遥控,以及搜寻位置、防止物品被盗等各种应用。</blockquote>
简单的来说
Internet是一个由计算机组成的网络,那么物联网就是一个由物体(Things)组成的网络,只不过其依赖于Internet,是Internet的一部分。
##最小物联网系统##
这个也就是我们要讨论的主题了,我们要做的最小物联网系统其实也就相当于是一个平台。我们可以上传我们各种物体的信息,同时给予这些物体一些属性,我们也可以通过网络来控制这些物体,而他们之间也可以相互控制。因此,我们需要给他们提供一个网络,这就是RESTful的由来。
所以我们也稍微了解一下RESTful吧。
###RESTful###
<blockquote>REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移(Representational State Transfer)。</blockquote>
我们的世界是由资源来组成的,一个物体也就相当于是一个资源,以这种方式来构建我们的物联网系统,在目前来说是再好不过的一个方案了。
<blockquote>REST架构就是希望能够统一这一类的Hypermedia Controls, 赋予他们标准的, 高度可扩展的标准语义及表现形式, 使得甚至无人工干预的机器与机器间的通用交互协议边的可能.</blockquote>
这个也就是我们的目的了,物联网最后的核心就是使物体与物体之间的交互成为可能。
那么,这里也就解释了为什么我们要用RESTful来做这个最小系统的原因了。
###最小系统中的RESTful###
例如,一个简单的例子,
列举所有物体状态,
GET http://localhost/athome
呈现某一特定状态,
GET http://localhost/athome/1/
剩下的部分这里就不多说了,多说无益,可以自己谷歌去。
接着我们要讨论的就是系统框架
##系统框架##
![IOT Struct](https://raw.githubusercontent.com/gmszone/iot/master/doc/dot/struct.jpg)
###为什么是Raspberry PI###
Raspberry Pi在这里只是充当了数据的发送和接收,虽然我们可以直接将Raspberry PI作为控制的对象,但是将这个从中剥离来讲清楚系统的结构会更加简单。从而,可以让我们把核心注意力聚焦在要解决的问题上,也就是数据传送,每个部分都可以简单地从系统剥离出来,用另外的事物来替换。
###为什么是Arduino###
这个问题的答案和上面是一样的,只是因为有些搞物联网是从软件过来的,对于他们来说去理解端口的难道可能有点大。所以,我们在简化系统设计的同时,也把系统的代码简化了。因为Arduino足够的简单,我们可以关心问题的本质,而不是如何去编程。
###为什么是Ajax###
至于什么是Ajax,
<blockquote>AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。
</blockquote>
这里的目的只是在于演示如何运用这些数据,使它具有他应有的价值,而不在于技术本身。当然ajax不是必需的,如果你需要的只是用来控制这个灯。
###为什么是Laravel###
只是因为个人喜爱,你也可以用Ruby On Rails来搭建这样一个功能,或者是Java。只不过PHP在我的服务器上运行得挺不错的,而且我又不需要重新去写配置那些配置。
同时Laravel可以简单的开发我们所需要的功能,换句话说他是PHP世界的Ruby On Rails。一个最小的物联网系统设计方案及源码2013-12-22T11:25:33+00:002015-05-28T01:27:17.223179+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/bare-minimum-iot/<p>
或许这个可以当成是你的毕业设计又或者你可以用它来控制你想控制的东西,总之你可以用它来做一个最小的物联网系统。
</p>
<p>
不过,在这里可能没有那么复杂的功能,因为强调的是最小。BareMinimum,这也是为什么我没有改Arduino上面的工程名的原因,因为它是最小的,(PS:大家都懂的,如果玩硬件)。物联网,这个东西一直很复杂,也不是很复杂,只是从硬件到软件涉及到的东西过多了,不止一点点。当然写在本文的方案也有很多,不止这一个,只是这个算是基本的最小的,仅此而已。<span>(转载保留 </span><a href="http://www.phodal.com/blog/bare-minimum-iot/" target="_blank">Phodal's Blog</a><span> </span><a href="http://blog.csdn.net/phodal" target="_blank">Phodal's zenthink</a><span>) </span>
</p>
<p>
<span><br/>
</span>
</p>
<h2>
关于
</h2>
<p>
源码:<a href="https://github.com/phodal/iot" target="_blank">https://github.com/phodal/iot</a>
</p>
<p>
文档可能没有足够的详细,因为剩下的部分都可以Google到,这里就不写详细了。
</p>
<h3>
框架:
</h3>
<p>
</p><ul>
<li>
PHP Laravel
</li>
<li>
jQuery (Javascript 主要用于Ajax)
</li>
<li>
jQuery Mobile(可选)(我觉得我有点懒,于是从原来做的项目直接拿了出来)
</li>
<li>
Bootstrap (可选) (其实没有多大实际用处,只是因为好看和jQuery Mobile一样)
</li>
</ul>
<p></p>
<h3>
语言:
</h3>
<p>
Processing/C/C++ Arduino用
</p>
<p>
Python 如果你有Raspberry Pi或者与之相近的都可以,只要可以与Arduino串口通信
</p>
<p>
PHP 我学得不是很好,因为Laravel没有让我学好,但是让我能做想做的事。
</p>
<h3>
相关文章
</h3>
[一个最小的物联网系统设计方案及源码](http://www.phodal.com/blog/bare-minimum-iot)
[最小物联网系统(一)——系统组成](http://www.phodal.com/blog/bare-minimum-iot-system-structure/)
[最小物联网系统(二)——RESTful](http://www.phodal.com/blog/bare-minimum-iot-system-restful/)
[最小物联网系统(三)——创建RESTful](http://www.phodal.com/blog/bare-minimum-iot-system-create-restful/)
[最小物联网系统(四)——详解Laravel的RESTful](http://www.phodal.com/blog/bare-minimum-iot-system-about-restful/)
[最小物联网系统(五)——Laravel
RESTful模板化](http://www.phodal.com/blog/bare-minimum-iot-system-restful-template/)
[最小物联网系统(六)——Ajax打造可视化](http://www.phodal.com/blog/bare-minimum-iot-system-ajax/)
[最小物联网系统(七)——与服务器通讯](http://www.phodal.com/blog/bare-minimum-iot-system-date-commucation/)
[最小物联网系统(八)——与单片机通讯](http://www.phodal.com/blog/bare-minimum-iot-system-mcu-commucation/)
[最小物联网系统(九)——Android客户端](http://www.phodal.com/blog/bare-minimum-iot-system-android-example/)
[最小物联网系统设计——给Laravel添加测试](http://www.phodal.com/blog/bare-minimum-iot-system-add-test-for-laravel/)
[最小物联网系统设计——使用说明](http://www.phodal.com/blog/bare-minimum-iot-system-how-to-use/)
[最小物联网系统设计——如何添加硬件](http://www.phodal.com/blog/bare-minimum-iot-system-add-hardware-devices/)
<h3>
相关知识
</h3>
<h4>
搞硬件的同学需要重点了解的知识
</h4>
<p>
</p><ul>
<li>
RESTful
</li>
<li>
Ajax
</li>
<li>
JSON
</li>
</ul>
<p></p>
<h4>
搞软件的同学需要重要了解的知识
</h4>
<p>
</p><ul>
<li>
串口通信
</li>
<li>
高低电平
</li>
</ul>
<p></p>
<h3>
关于服务器
</h3>
<p>
</p><ul>
<li>
Nginx 需要配置,具体配置可以参照github上面的代码
</li>
<li>
LNMP 直接用上面的会比较简单,但是可能也会遇到一些问题。
</li>
<li>
Phpmyadmin 最好需要有这个,如果不是很精通MYSQL
</li>
</ul>
<p></p>
<h3>
补充说明
</h3>
<p>
Arduino不是必需的,只要你懂得如何用你的芯片进行串口通信。
</p>
<p>
考虑到Raspberry PI的成本可能会有点高,你可以试着用OpenWRT Linux,主要用在路由器用的,上面可以跑Python。或者等等过些时候的小米路由器,可以加这个在上面。
</p>
<p>
如果你没有服务器没有Raspberry PI,那就找个路由器来当服务器吧,相关文章如下
</p>
<p>
<a href="http://blog.csdn.net/phodal/article/details/8521712" target="_blank">Openwrt python,openwrt上使用Python<br/>
</a>对了,如果你觉得哪里有问题记得在GITHUB上提出来,而不是在原文。
</p>
<h3>
注意
</h3>
<p>
<span>!请尽可能少我的用我的网站做测试</span>
</p>
<p>
<br/>
</p>
<h2>
设计方案
</h2>
<h3>
系统框架图
</h3>
<p>
<img alt="" src="http://img.blog.csdn.net/20131222115240562?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGhvZGFs/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast"/><br/>
</p>
<h2>
如何开始
</h2>
git clone https://github.com/phodal/iot.git
cp iot/rest PATH_OF_HTDOCS/
创建一个新的数据库,如iot
编辑 app/config/database.php
<pre><code class="php">
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'iot',
'username' => 'root',
'password' => '940217',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
</code></pre>
配置nginx,添加,详细可参考nginx下面的配置
<pre><code class="">
# 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;
}
</code></pre>
测试
<pre><code class="bash">
sudo python python/get.py
</code></pre>
再根据需要修改端口,视真实的端口而修改。