基于MQTT的物联网应用(智能家居)
1. 需求背景
在我们的日常生活当中,我想大家都会发现一些现象:
比如在一个公共场合,不管是办公区还是商业区,其实并没有人,但是灯却亮着,比如这是一个会议室,其实并没有人,里面的空调却一直开着,对于一个特定的环境下,这样的浪费可能不能引起特别大的损失,但是想一下,对于一个城市或者一个国家来说,这样的损失将会变得非常大,我们仔细想一下为什么会这样子呢?因为我们的生活环境是一个不会思考的环境,好比有一人把一个办公区的所有灯打开之后,如果他自己没有去关的话,这些灯就会一直亮下去。但是如果我们的灯要是变得稍微”智能“一点呢?好比在一个环境内,如果检测到没有人了,他就会自己把灯关掉,如果有人又来了,然后在打开对应区域的灯光,这样会不会能帮助我们节省很多的财力。再回到我们的会议室,如果会议室变得稍微智能一点,好比,有人来开会,或者获取到了预约请求之后,在合适的时间打开空调保持在一个相对舒适的温度,等到会议结束之后,空调就自动关闭。这样一来不光省电节能,而且还让我们的办公效率等到提升。
我们在说一下我们每天都居住的家,你是不是也有过类似的经历,比如我刚出门走了,我却忘了我自是否把门锁好了?有的时候你可能不得不在走回去确认一下,但是结果发现门是锁着的。还有就是假如我们要出去度假,如何确保我们房屋是安全的没有被人非法入侵?每个人都会有这样的困惑,如果能让我在离开家以后能确认房屋的状态的话,我们也不会被之前的问题所困扰。
那么我们如何才能把上述问题解决了呢?我们通过传感技术,根据采集的传感信息执行一些指定的操作,好比我们采用人体红外传感器和光照传感器我们就可以做到当检测到有人存在的时候保持灯光的开启,当人离开之后就关闭灯光,同时也可以根据光照强度传感器采集的数据来控制灯光的强与弱。这样就避免了有充足的光照的时候还开着灯。当然,以上只是一些例子而已,我们完全可以根据自己的实际需要去指定对应的规则,来实现智能化。同时我们可以加入大数据和云服务,让这些传感器更加有“想法”,从而也可以根据传感器的数据来创造更多的价值,我们在物联网技术中被广泛使用的就是MQTT(Message Queuing Telemetry Transport)协议,我们可以把传感器的数据通过mqtt协议上传到服务器,然后通过远程去获取数据以便于下发特定的命令,我们继续讨论家庭安防的问题,我们可以通过安装门磁(Doorsensor),使用MQTT上传门磁的状态,在门或窗在被开启的时候,我们就会在远程立刻获取到消息推送,同时可以触发摄像头进行拍照或者摄像,这样就可以达到就算我们离开了家,也可以检测家里的一举一动,以保证家庭的财产的安全。
2. MQTT
我们可以通过MQTT协议把所有的传感器的数据实时的上传到服务器,然后根据采集的数据做出相应的判断来实现上述想法,那么MQTT有哪些特点呢?
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
- 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
- 对负载内容屏蔽的消息传输;
- 使用 TCP/IP 提供网络连接;
- 有三种消息发布服务质量: “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数 据,丢失一次读记录无所谓,因为不久后还会有第二次发送。 “至少一次”,确保消息到达,但消息重复可能会发生。 “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
- 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
- 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制
3. 实践(基于树莓派的智能家居实践)
3. 1 前提
作为在校学习通信网络的的一个项目,我们的目标是并不是生产出一个可以立马销售的商品,而是把相关通信的知识应用的实际生产环境当中,做出一个可以展示的demo。
3. 2 概述
这个项目的目标是通过树莓派采集若干传感器(温湿度传感器,光照传感器,人体红外传感器等)的数值,实时上报于对外开放的公共的MQTT服务器,然后编写android应用和MQTT服务器对接获取传感器上传的信息,然后可以在手机上定制规则,下发到树莓派执行对应的操作。所以整个项目可以分为终端数据采集和执行对应操作的树莓派的开发和安卓应用的开发。而我负责的是树莓派的开发。
3. 3 内容
在树莓派上使用Python语言开发,获取传感器的数值,然后通过mqtt协议实时上传到mqtt的web服务器,这里我们使用的是中国移动提供的OpenNet服务,在主线程中注册mqtt的topic,这样实现了mqtt接收下行消息。
光.png
当手机app开启的时候,就会主动和服务器获取注册入网的所有传感器和接入设备。
光照.png
然后用户根据自己的想法和意愿制定相应的规则,比如在灯1光照强度超过某一个限定值得时候,关闭灯;在温度超过限定值得时候,自动开启风扇或者空调等自动化操作。应用在我们的家庭当中话,我们就可以很容易的实现当我快下班回到家的时候,就自己把空调开启,保持在一个舒适的温度,或者在办公区内当到达指定的时间的时候,全部的灯光自动关闭或者根据是否有人来决定是否开关灯。从而实现了智能家居。
4. 总结
在整个项目当中,需要深入研究mqtt以及其他相关联的通信网络的知识,才能够灵活的应用在该项目中并且得以实现。。