在互联网迅猛发展的今天,我们不再是需要家中有人才能控制家中的一些设备的运作情况了,我们可以借助网络来帮助我们远程控制家中的一些设备。例如:突然有紧急情况出门,想起走的时候窗户没关上,这时候不需要你再返回家中关窗户,而是拿起手机,保证手机的网络是畅通的就可以实现关窗户,真正的实现了智能化地控制家中的设备。
下面再说说智能家居实现的效果和每部分模型完成的功能。
首先智能家居项目实现的效果:用手机或者是平板可以控制家中设备的运行状态,如开灯关灯、开门关门和空调的开关等;也可以获取家中环境的信息,如温度、湿度和光照等;将这些信息显示到手机上。
项目主要分为四个模块:APP模块、服务器模块、ZigBee模块、M0模块
①APP模块(手机或者平板):主要的功能是用于与用户之间的交互,界面的跳转及信息的显示。将用户的操作按照一定的通信协议发送给服务器,接收服务器的回馈信息,完成相应的界面跳转和界面的信息显示。
②服务器模块(A9开发板):主要的功能有:用户注册信息的保存、用户登录检测、修改密码和忘记密码,将用户对硬件操作的信息发送给ZigBee模块,获取ZigBee模块的反馈信息。
③ZigBee模块:实现无线传输,将服务器的数据包发送给M0模块,接收到M0模块的反馈信息。
④M0模块:对ZigBee发送过来的包做解析,判断出对哪个硬件实现什么样的操作,完成对硬件的相关操作后,给ZigBee发送反馈信息数据包。
下面分别对各个模块的详细实现做简单介绍:
一、APP模块
APP模块最终能实现的功能包括账户注册、登录、赢家控制,远端信息的实时获取等,在编写这个客户端的时候,我首先基于基本MVC的开发框架对自己的项目框架进行了构思,并且结合项目的功能需求展开了代码的编写。
我的Module模块使用的是QT自带的数据库接口QSqlDatabase实现的。中间的Control主要用于接收完数据之后的解析逻辑等;View当然是用QWidget和QGraphicsView的框架来搭建UI效果;能够实现远端控制,服务器信息获取与显示,本地数据库和服务器实时同步等功能;对于网络不稳定,数据包丢包问题等,我也设置相应的心跳包检测,断线重连等功能。
当然,为了我们的客户能够使用方便,我们该APP进行了Android项目的移植,值得一提的是,我们并没有真正使用Android语言对项目进行重写,而是通过QT可跨平台的特点,进行来电QT for Android的移植工作,运行功能正常,流畅。当然,这么多功能的整合不可避免的使我的程序有一些bug的出现,特别涉及到不同位制、不同大小端模式的电脑之间传递信息可能出现数据乱码的问题,当时采用的解决措施尽量使用通用数据包的形式传输数据,如JSON数据包。
二、服务器模块
智能家居的服务端程序主要完成两部分的功能:
第一部分完成和客户端APP进行网络通信。主要完成的功能有:
①接收用户注册的信息,并将用户注册的信息存放到数据库中
②接收用户登录的信息,并且验证用户名和密码是否正确
③接收修改用户信息的请求,并将修改后的信息存放到数据中
④接收用户对家里电器设备控制以及获取家里环境信息的请求
第二部分完成通过对ZigBee和家里电器以及环境信息的采集传感器设备进行通信。主要完成的功能有:
①根据客户的请求,通过ZigBee向家电设备发送的打开和关闭命令
②根据客户端的请求,通过ZigBee向环境信息采集的传感器设备发送获取温湿度信息的命令
为了让两部分功能独立运行,在服务器端程序设计的时候,使用了多进程的思想。
第一部分功能由父进程完成,第二部分功能由子进程完成。为了让服务器端能同时响应多个客户端的需求,使用select函数实现了并发服务器架构。为了让服务器端能快速响应客户端请求,使用了线程池机制。每个客户端的每一个请求到服务器端之后,都会有单独的子线程处理它的请求。
三、数据采集终端模块
这个其实就是终端数据采集与硬件反馈的模块,这个模块使用的是ARM系列Cortex-M0芯片,在这个芯片的基础之上,分别外接了以下几个设备,有温度、湿度、光照、三轴传感器与RFID射频模块,还有风扇、LED、蜂鸣器、OLED硬件。同时集成了RS485、CAN总线。在这个项目中,使用到了温度、湿度、光照、三轴传感器获取当前的环境信息,发送到ZigBee的节点;还有就是从ZigBee节点接收命令控制风扇、LED、蜂鸣器等来模拟家中的电器设备。在这个模块中使用了ARM开发的一些流程,如配置寄存器让硬件工作。一些总线设备的使用,如SPI、I2C。还有中断的机制和定时器的使用,在本项目中启用了一个32位的定时器来做延时操作。
四、短距离信息传输模块
这个模块主要实现的是数据的透传工作,一个ZigBee节点接收服务器的消息无线转发到ZigBee的另外一个节点上,另外一个节点把数据发送给终端设备,完成操作。同时也可以反过来,是终端设备的环境信息。我使用的是CC2530的单片机。它是一款完全兼容8051的内核,同时支持IEEE 802.15.4协议的无线射频的单片机。这个项目主要是使用ZigBee提供的协议栈来进行开发。使用了其中的函数接口完成项目需求的应用程序。