基于Android的智能家居远程控制系统设计
摘要:针对智能家居远程控制问题,结合Android终端设备,设计了一套控制信息对用户透明的远程空调控制系统。系统底层控制信息通过基于GSM的短消息方式传输,实现了对由6台空调组成系统的远程控制。系统采用自定义通信协议,在Android端讨论并实现了两种接收返回信息方式——BroadcastReceiver和ContentObserver方式,对Android中的Handler机制进行讲解应用。测试结果表明,系统结构设计合理,操作简单,性能稳定。
本文引用地址:http://www.amcfsurvey.com/article/245796.htm引言
远程控制作为智能家居的一种标志性技术,被广泛应用于各种智能家居系统中。本文设计并实现了一种智能家居中远程空调控制方案。本系统基于Android系统客户端用户友好型界面和GSM模块,屏蔽控制信息传输处理细节,客户端采用控件绑定号码的方式,用户只需根据终端Android界面提示,即可完成远程空调控制。相比于以往方案中GSM模块采用PDU方式进行通信,用户端需要手动输入具体命令的模式,本系统采用text文本方式进行通信,传输的控制命令仅为数字即可。
本文实现了两种Android应用中接收短消息的方式BroadcastReceiver(广播接收者)方式和ContentObserver(内容观察者)方式,采用Hand ler机制将接收到信息显示,且对安卓中SQLite数据库的操作进行阐述及应用。本系统通过接收GSM控制消息的基于LPC1766芯片的集中器传输控制消息到各个分控制器,可以同时控制6台空调,每台空调对应一个分控制器,具体系统控制端架构见图1。
1 系统控制端设计
1.1 硬件设计
本系统采用NXP公司的LPC1766芯片作为集中器的SoC。系统GSM模块采用华为公司的GTM900-B型号无线模块,该模块具有标准的AT命令接口,并提供无线接口用于短消息的收发,且可通过串口通信和嵌入式MCU相连。
本系统叶GSM模块和集中器通过串口相连。GTM900-B模块的串口与LPC1766的UART0相连,具体连接见图2。
1.2 AT指令
GTM900-B模块使用了GSM Rec.07.07中规定的标准AT命令,本系统需要使用到的AT命令如表1所列。
1.3 通信协议
本系统主要通过GSM短消息的方式完成对每个房间的温度获取(通过分控制器上的温度传感器)和每个房间空调工作模式、温度的设置,以及关闭房间空调的功能。从安卓终端的角度包括两个方面的通信——发送和接收。
从安卓终端发送到GSM模块的控制信息包括三个方面:获取温度值,设置某个房间空涮参数,关闭某个房间李调。GSM模块采用text方式通信,系统将发送的三种控制信息数字化为相同规格:
其中Sent1表示控制信息类型:“1”表示获取温度,“2”表示设置某个房间空调,“3”表示关闭某个房间空调。Sent2表示房间号,取值1~6对应相应房间。Sent3表示当Sent1为“2”时,设置号码为Sent2的房间空调的工作模式:“1”表示制热,“2”表示制冷,“3”表示送风,“4”表示除湿。Sent4表示当Sent1为“2”时,设置号码为Sent2房间的工作温度。分隔符用冒号表示,主要作为区别控制信息与初始化返回信息的标识符。所以,Android发送端发送的控制信息格式表示为“Sent1:Sent2:Sent3:Sent4”。
对安卓终端接收的反馈消息也包括三个方面:集中器从分控制器得到的温度信息,设置某个房间空调成功的返回消息,某个房间空调关闭的返回消息。因为这三种消息长度不一致,处理方式不同,系统只对接收消息的前两位格式化即可完成系统功能,具体如下:
其中:Rec1表示反馈信息类型:“1”表示温度信息,“2”表示设置空调返回信息,“3”表示关闭空调返回信息。Rec2表示当Rec1为“2”或“3”时空调返回信息,“1”表示设置或者关闭成功,“0”表示失败。所以,Android接收端接收的由系统控制端返回的信息中,首先会判断第1位(即Rec1位),如果是“1”,则表示返回的是各个房间的温度;如果是“2”,表示的是设置空调(Sent1等于“2”时)的返回消息;如果是“3”,表示的是关闭空调(Sent1等于“3”时)的返回消息;对于Rce1等于“2”或者“3”,再根据Rce2来判断相应的返回消息状态。
1.4 集中器软件设计
集中器上的程序主要完成系统模块和GSM模块初始化,判断控制信息类型及作相应的处理,向终端用户返回消息。具体程序流程见图3。
其中GucRcvNew=1表示集中器从UART0接收到来自GSM模块的返回消息,recvfg用来对GSM模块进行初始化,其初值为0。集中器发送命令at到GSM模块,如果接收到GSM模块的“at ok”返回消息,则设置recvfg=1,然后进入switch语句,当recvfg=1时,向GSM模块发送命令at+cmgf =1,如果返回值为“at+cmgf=1 ok”,设置recvfg=2。当recvfg=2时,向GSM模块发送命令“at+cnmi=2,2,,1”,如果返回值为“at+cnmi =2,2,,1 ok”,设置recvfg=3,到此GSM模块初始化结束。如果初始化过程中当集中器发送AT命令后,接收到的不是正确返回值,则设置recvfg=0,重新开始初始化。
评论