基于安卓的智能家居控制系统的设计与实现

点赞:6964 浏览:22993 近期更新时间:2024-01-23 作者:网友分享原创网站原创

【摘 要】本项目采用单片机的主从式架构即怎么写作器/客户端的方式进行数据的交互,平板电脑客户端向控制主机发送控制命令,控制主机再分别控制窗帘、智能床、红外线传感器设备,实现窗帘的升降,电灯的开关,智能床的翻转,以及老人安全如厕的检测等功能.

【关键字】安卓,智能家居

引言

随着移动互联网的技术逐渐成熟,为人们的生活、工作及学习带来了极大便利的同时,也为物联网的发展带来崭新的机遇.特别是智能手机与移动通信业务的快速发展,为物联网的实现提供了成熟的平台.人们可以利用通用的智能手机在任何时间、任意地点远程控制着家中的任意电器.如果你觉得,晚上站在家门口找电灯开关很费劲,请拿出你的手机打开你的电灯开关.如果你认为烧开水需要花很长时间,而你又不想苦苦等待,请拿出你的手机打开热水器的开关.如果你厌烦了烧饭的话,也请拿出你的手机,让它帮助你解决烦恼.这就是数字化智能家居控制系统为我们带来的福利.另外,如果你是一个孝子,但是却无法陪伴在老人身边,你可以利用手机控制远程视频,让老人看到你.同时智能家居拥有的报警、远程监控等功能,在出现险情时能够第一时间获得消息,从而采取进一步行动.由此可见智能家居是移动互联的产物,是时怎么发表展的必要趋势,是现代化社会进步的标志.

1控制系统整体设计

该智能家居控制系统的整体结构如图1-1所示.本系统包括android手机端的智能家居控制系统客户端,中心控制单片机怎么写作器,以及各个电器的WIFI接收终端模块.程序设计包括基于安卓的智能家居系统控制软件,以及通过WIFI传输过程中用户协议的制定.该android客户端程序采用JA语言编写,老人通过触摸手机/平板电脑上的按钮进行操作可以控制连接在家庭网关上的电灯、窗帘等设备的开关,老人安全如厕检测的红外设备,智能床的翻转设备.若检测到老人处于危险状态下,可以利用平板电脑中的G短信模块为固定的发送报警信息,让子女第一时间了解到老人的状态.

2通信协议设计

2.1通信协议简介

通信协议是指双方实体完成通信或怎么写作所必须遵循的规则和约定.在系统中的通信协议是指手机客户端与中控怎么写作器间的规则.系统中的协议工作方式如下:用户通过软件客户端的触摸发送相应电器控制命令,经过无线信道(WIFI)的传输,中控怎么写作器接收到控制命令,对命令中的关键字进行识别后将命令发送给对应的的电器控制端,达到控制功能,电器工作完成后,将返回的响应命令传送给怎么写作器,进而传送给软件客户端,把结果显示在UI上.至此完成整个协议的通信过程.

2.2通信协议总览

本通信协议是由8Byte的16进制数据构成,该协议是由状态标志字(Sta),数据标志字(Tid),发送标志字(Sed),操作代码位(Opt),电器标志字(ID),数据校验位(Sum)等六部分构成.其格式为:<,Sta>,<,Tid>,<,Sed>,<,Opt>,<,ID>,<,Sum>其字段含义、长度及定义等详细信息如表2-1所示.

2.3通信协议详解

2.3.1电灯控制协议

电灯协议实现的功能为控制电灯单开和全开,只需改变操作码中对应的电灯(此处只有3个电灯),每次控制成功与否都将返回响应数据,将电灯的状态显示在软件的UI上,详细协议列表如表2-2所示.

2.3.2如厕检测协议

如厕检测协议主要接收红外监控设备发送的协议命令,并对数据进行解析识别,并显示在对应的灯泡上.刚进入厕所会经过红外设备1再经过红外设备2,此时两盏灯泡在手机UI上亮起,并计时,超过指定时间将通过平板电脑发送报警信息.出厕所时会先经过红外设备2再经过设备1,此时计时停止并重置.详细的协议如表2-3所示.

2.3.3窗帘控制协议

窗帘控制协议主要控制窗帘上升、下降、停止的功能,利用软件的三个按钮点击可发送相应命令,同时接收返回的数据响应,将状态显示在UI界面上.详细的协议如表2-4所示.

2.3.4智能床控制协议

智能床控制协议主要控制智能床的翻转功能,主要通过软件的切换模式实现,软件上有两个按钮,分别为普通模式和睡眠模式,在睡眠模式下进行智能床翻转的控制,进入睡眠模式后,软件检测智能床的状态,如果一段时间智能床没有发送响应命令,软件将发送智能床的翻转指令,指令包括:开启睡眠模式、开启普通模式、左右翻身、左右翻身停止、左右放平等.通过智能床的护理功能可以帮助老人在睡觉的时候避免同一姿势保持时间太长导致的疾病.智能床控制协议详细信息如表2-5所示.

3.安卓控制系统设计

3.1安卓设计流程图

安卓程序设计流程图如图3-1所示.首先是通过TCP/IP连接中控怎么写作器端,需增加IP及端口的编辑功能,线程的初始化需要对线程进行开发,线程初始化完毕等待用户操作,用户需要交互则需设计UI,用户触摸相应开关按钮,则打包相应的命令,通过已连接的IP传送到怎么写作器对应端口完成控制,之后接收响应命令,对命令进行解析,解析完成再进行软件UI的更新,等待用户的下一次操作.

3.2安卓程序客户端设计

3.2.1客户端设计简介

安卓客户端采用ja语言编写,运行于android2.2及以上版本.

该软件针对老人特别对页面进行单页化设计,字体放大设计,方便老人的操作与查看.软件实现了电灯的单开与全开功能,窗帘的上升、下降控制功能,如厕安全检测功能,智能床模式控制、翻转控制功能.软件在设计过程中加入线程机制,每次触摸屏幕发送指令时都将要开辟新的线程,这样保证了程序指令在传输过程的可靠性,网络连接使用TCP协议也是为了提高程序的可靠性.

3.2.2客户端设计分析

按照程序的设计流程,我们将对主要模块功能进行设计,其中包括IP及端口的连接、线程开辟与处理、命令的打包与解析、UI界面更新四部分.客户端界面如图3-2所示

1.IP及端口连接

在怎么写作器与客户端之间需要建立一种联系通道,在本系统中需要利用TCP/IP协议,经过无线电磁播传输介质建立连接,此连接非常稳定不易丢失,确保连接稳定性.TCP的连接有一个特点就是在同一时间同一线程不能建立一个以上的连接,因此建立连接之前需要对Socket连接进行判断是否之前有建立,接着将端口和地址转换为系统识别的形式,并尝试连接,同时建立线程,阅读传送的数据.因此实现该主要功能代码片段为:

if(socket.isClosed())socket等于newSocket(),

SocketAddressremoteAddr等于newISocketAddress(ip,port),

socket.connect(remoteAddr,2000),

socket等于newSocket(),

this.readThread等于newReadThread(hOptMsg,sData,socket),

readThread.start(),

代码中主要调用的是系统自带Socket类的功能,阅读线程涉及到用户自定义的ReadThread类的功能,该类中涉及到响应过程中数据命令的解析.

2.线程开辟与处理

线程是配合主线程,能够在不堵塞UI主线程的情况下,实现数据传送与处理功能的.本系统中开启线程后等待用户选择指令,指令发送完毕后又进行响应数据的接收和处理.实现该主要功能代码片段为:

ReadThread构造方法:

publicReadThread(HandleMsghmsg,byte[]sData,Socketsocket){hOptMsg等于hmsg,

this.sData等于sData,

this.socket等于socket,}

连接时开启线程:

this.readThread等于newReadThread(hOptMsg,sData,socket),

readThread.start(),

线程中的数据处理:

while(state)

{rlRead等于socket.getInputStream().read(sData),//从输入流中读取数据

if(rlRead>,0)

{unpackageCmd(sData,rlRead),//解开接收到的数据命令}

else{state等于false,hOptMsg.sendEmptyMessage(DataProcess.CLOSETCP),//HandleMassage

break,}

}

在代码中通过线程的处理可以有效地解决响应的数据的处理,只要连接是处于连接状态,即state等于1,则一直读取输入流中的数据,从而实现数据处理.

3.命令打包与解析

通过命令的封装,并加入检验机制可以有效地检测传送的数据和接受数据的有效性,增加了数据的可靠性.打包时并非简单的协议罗列而是在用户单击按钮时,对应id控件将自身信息传送给打包命令的方法,执行该方法后可以获得更加有效的指令字符串,每次打包时的头部数据为0x55.解析数据时对数据头部进行识别,为0x22为响应数据,在进行数据解析再进行下一步操作.实现该主要功能代码片段为:

基于安卓的智能家居控制系统的设计与实现参考属性评定
有关论文范文主题研究: 关于控制系统的文章 大学生适用: 研究生毕业论文、本科论文
相关参考文献下载数量: 48 写作解决问题: 如何怎么撰写
毕业论文开题报告: 论文模板、论文前言 职称论文适用: 论文发表、高级职称
所属大学生专业类别: 如何怎么撰写 论文题目推荐度: 经典题目

打包代码:

byte[]cmd等于newbyte[]{0x55,0x01,0x01,0,0,0,0,0},

if(id等于等于9)

{cmd[2]等于0,}

elseif(id等于等于0)//全开电灯

{cmd[3]等于opt,cmd[4]等于opt,cmd[5]等于opt,cmd[6]等于0x01,}

elseif(id等于等于4||id等于等于5||id等于等于6)

{cmd[6]等于0x03,cmd[id-1]等于opt,

}elseif(id等于等于7||id等于等于8)

{cmd[6]等于0x04,cmd[id-4]等于opt,

}elseif(id<,4&,&,id>,0)

{cmd[2+id]等于opt,cmd[6]等于0x01,}cmd[7]等于(byte)(cmd[0]+cmd[1]+cmd[2]+cmd[3]+cmd[4]+cmd[5]+cmd[6]),

数据解析代码片段:

if(cmd[i]等于等于sum)

{if(hOptMsg等于等于null)return,

Messagemsg等于newMessage(),

msg.what等于DataProcess.RELAYSTATE,msg.arg1等于cmd[i-1]*1000+cmd[i-2]*100+cmd[i-3]*10+cmd[i-4],hOptMsg.sendMessage(msg),}

在代码中打包和解析数据中包含了多种语句,包括循环语句、选择语句等,简单的逻辑可以实现强大的功能,这是算法的重要性.

4.UI更新

本系统为UI界面定义了UIProcess类,专门用于UI的更新使用,利用msg.what与msg.arg1实现解析出数据数组的子线程与UIProcess类之间的数据传送.由于msg.arg1传送的数据为整形,则需通过简单计算将数据进行分组.实现该主要功能代码片段为:

state_l[3]等于(byte)(state/1000),

state_l[2]等于(byte)((state%1000)/100),

state_l[1]等于(byte)((state%100)/10),

state_l[0]等于(byte)(state%10),

setOpt(state_l),

更新UI代码片段:

publicvoidsetOpt(byte[]state)

{byteid等于state[3],

if(id等于等于0x01)//开灯的反馈

{setRelayOnoff(im1,state[0]),

setRelayOnoff(im2,state[1]),

setRelayOnoff(im3,state[2]),

}

elseif(id等于等于0x02)//如厕的反馈


{等.}

elseif(id等于等于0x03)//窗帘的反馈

{等.}

等.

}

在该段代码中,实现了主要的控制设备的界面更新,特别是如厕控制先进入红外设备1后进入红外设备2开启计时,出来时先进入红外设备2再进入红外设备1取消计时的功能及代码较为复杂,可以完成如厕检测的功能.

4小结

经试验证明通过安卓客户端连接中控怎么写作器端,在人机交互的过程中可以很好的传输命令,可以控制电灯单开与多开、窗帘的升降,可以实现如厕计时,智能床的翻转等功能.

该项目的优点如下:

(1)软件采用单界面化设计,方便老人的操作.

(2)软件添加如厕报警装置,有效防止如厕时老人发生危险的几率.

(3)软件采用Android平台,较为通用,具有稳定,高效,快速的特点.

(4)软件通过Wifi为家用电器发送各种指令由单片机接收指令进行控制,节约了成本.