摘要:针对智能家居长途操控问题,结合Android终端设备,规划了一套操控信息对用户通明的长途空调操控体系。体系底层操控信息经过依据GSM的短音讯办法传输,完结了对由6台空调组成体系的长途操控。体系选用自界说通讯协议,在Android端评论并完结了两种接纳回来信息办法——BroadcastReceiver和ContentObserver办法,对Android中的Handler机制进行解说运用。测验结果表明,体系结构规划合理,操作简略,功用安稳。
导言
长途操控作为智能家居的一种标志性技能,被广泛运用于各种智能家居体系中。本文规划并完结了一种智能家居中长途空调操控计划。本体系依据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,重新开始初始化。
依据操控信息类型设置flag子程序和依据flag值进行相应处理的子程序首要是在初始化完毕后完结体系功用,程序流程见图4、图5。
本体系集中器选用UART中止办法和GSM模块通讯,当有数据回来集中器时,会触发UART中止,在UART中止处理程序中从U0RBR寄存器读数据到GucRcvBur[Gu1Num]数组中。由于每次通讯回来的字节数不相等,本体系在UART中止处理函数中引进定时器中止,在定时器中止处理函数中设置GucRcvNew==1。即每次进入UART中止处理函数时,敞开定时器,UART在初始化时设定的中止触发点是1个字节,当一切回来字节都接纳完结时,定时器超时会触发定时器中止处理函数,设置GucRcvNew==1,主程序检测到有数据回来。体系中设置定时器的触发时刻是0.5 s。
2 Android端规划
本体系选用Android运用程序的用户友爱型界面作为与用户的接口,Android终端程序经过控件绑定办法对固定号码进行短信接纳与发送,用户只需经过点击控件办法即可传递和接纳操控信息,详细依据体系自界说通讯协议发送的操控信息则彻底被程序屏蔽,对用户彻底通明。其间发送短信和接纳短息都会对Android体系的SQLite数据库作出改动,需求对数据库中的相关信息进行删去来确保对用户通明。别的关于控件之间音讯传递选用Android中的Handler机制。
2.1 发送操控信息
Android中发送音讯首要经过SmsManager类来完结,它承继自java.lang.Object类。其首要的办法阐明略——编者注。
发送短信程序首要调用SmsManager. getDefault()获取SmsManager目标,然后经过PendingIntent的getActivity办法获得一个Pending Intent目标。依据短信长度Message.length()与短信长度最大值比较来判别是否需求调用smsManager.divideMessage(Message)将短信切割,然后再调用smsManager的sendTextMessage办法发送短信。代码略——编者注。
发送短信模块需求在清单文件AndroidManifest.xml中参加答应发送短信的权限:
2.2 接纳回来信息
在Android端接纳音讯,能够选用两种办法,一种经过BroadcastReceiver播送接纳器的办法,别的一种是经过调查数据库改变的内容调查者类ContentObserver来完结。
2.2.1 BroadcastReceiver接纳短信
Android中的播送是一种在运用程序之间传递信息的机制,在Android中有多种播送,依据GSM短信的接纳会发生一个播送,运用程序能够监听这些播送并依据播送类型作出相应的处理。BroadcastReceiver便是对接纳到的播送进行过滤并呼应的一类组件。
当运用程序接纳到播送发送来的intent目标,BroadcastReceiver类依据其注册的播送地址与接纳到的intent目标进行比较,假如匹配则调用BroadcastReceiver的onReceive()办法。
BroadcastReceiver类的注册有两种办法,第一种是静态注册办法,即在AndroidManifest.xml文件中运用intent—filter指明需求过滤的播送地址。静态注册办法会使程序一直监听播送音讯,并主动调用程序承继自BroadcastReceiver的类。第二种是动态注册办法,其在activity中调用函数registerReceiver来注册,当运用程序封闭后,就不在进行监听。在动态注册的activity被毁掉前,需求调用unregist er Receiver免除注册。
短音讯播送是一个有序播送,即每次只被优先级最高的接纳者处理,然后由优先级高的接纳者传递到优先级低的接纳者。优先级高的接纳者能够停止这个播送。关于有序播送而言,动态注册的优先级高于静态注册。
体系中界说SmsReceiver类承继自BroadcastReceiver类,选用动态注册的办法,在activity中用于动态注册的代码略——编者注。
接纳短信模块需求在清单文件AndroidManifest.xml中参加答应发送短信的权限:
2.2.2 ContentObserver接纳短信
体系实际运用中,关于用BroadcastReceiver接纳短信往往作用欠好,首要由于用户在Android终端装置的第三方软件,比方接纳短信软件、安全软件等,这类软件从底层获取体系权限,优先级一直高于运用层软件,导致运用层软件不能优先接纳到播送音讯,所以在规划短信接纳客户端时一般选用监听数据库办法。
当客户端接纳到短信后会将其刺进SQLite数据库,数据库发生改变会触发内容调查者——ContentObserver。
ContentObserver类似于一个触发器,当其所调查的Uri发生改变,这个触发器就会触发来履行相应的处理。首要办法的阐明略——编者注。
本体系在onChange的办法中,运用Context实例目标的getContentResolver办法获得一个ContentResolver目标,然后调用Content Reso lver的query办法获取当时数据库中的短音讯。详细代码略——编者注。
关于得到的短音讯经过Cursor目标的getColumnIndexOrThrow办法获取其thread_id,id和body内容。关于在数据库中的短音讯,为了确保对用户的通明传输,要调用ContentResolver目标的delete办法将收件箱中的短音讯删去。详细代码略——编者注。
ContentObserver接纳短信模块需求在清单文件AndroidManifest.xml中参加答应接纳短信的权限:
2.3 Handler机制
关于运用ContentObserver接纳到房间温度信息后,经过Android的Handler机制将信息传送到主activity显现。在Android中,主程序会创立一个Looper目标,在Looper目标初始化时分会创立一个音讯行列Message Queue用来寄存线程放入的音讯。用户能够结构一个Handler目标与Looper交流,以便将音讯push到音讯行列中。当主线程检测到有新音讯进入音讯行列后,首要判别该音讯对应的Handler,然后将音讯分发到指定的Handler处理。
体系中经过ContentObserver承继类SMSContentObserver的结构函数将在activity中界说的Handler目标传入SMSContentObserver中,然后调用Handler目标的obtainMessage办法获得一个message目标,终究调用message目标的sendToTarget办法将操控音讯发送到音讯行列,在activity中界说了handleMessage函数用来处理得到的操控音讯。详细代码略——编者注。
2.4 Android终端作用
Android客户端操控界面见图6,当点击“获取温度”按钮,Android端会主意向体系操控端发送短信“1:O:O:00”,这样体系操控端会检测到是1类操控信息,则回来每个房间温度。
当需求设置某个房间空调的丁作办法,则经过点击“设置空调”按钮左边的“房间号”、“空调形式”和“设置温度”等三个下拉列表(Spinner)来设置。如设置房间号为“房间二”,空调形式为“制冷”,设置温度为“25℃”,然后点击“设置空调”按钮,安卓端会主动发送2类操控信息“2:2:2:25”到体系操控端,体系接纳到操控信息会处理后回来设置是否成功音讯。安卓端解析后将其显现。当需求封闭某个房间空调,能够经过“封闭空渊”按钮左边的“要封闭空调地点房间号”下拉列表完结,比方挑选“房间五”,然后点击“封闭空调”按钮,Android端即把3类操控信息“3:5:0:00”发送到体系操控端,体系操控端处理后将空调封闭状况回来。
结语
智能家居中的长途操控办法有许多,本体系结合Androld终端的用户友爱型界面,选用自界说协议办法,规划了一套依据短音讯的空调操控体系。在Android终端接纳回来信息的两种办法中,ContentObserver因其安稳性在工程实践中运用较多,本体系终究也是选用了Cont entOb—server的办法,并获得很好的作用。本体系规划合理,功用安稳,对其他工程规划也具有必定参考价值。