基于Linux 操作系统的小型家居智能化控制系统的设计与实现

2018-08-01 01:10朱正国
现代计算机 2018年20期
关键词:命令家居短信

朱正国

(攀枝花学院数学与计算机学院,攀枝花 617000)

0 引言

随着计算技术的不断进步,各种智能化的产品逐渐出现在市场上,例如智能监控系统和智能家居系统。特别是智能家居系统,用户可以通过手机短信了解家里的情况并通过手机发送命令进行远程控制,实现了对家人及财产安全进行实时监控。家、芯片、手机三者通过短信连接在一起,通过手机短信来实现对家庭的监控和管理也就应运而生了。

通过手机和PC终端能够让家居和人紧密的联系在一起。短信在家庭中做监控使用,能够很好地了解家庭情况,特别是对家中老人和孩子而言,非常方便。安防方面的作用,如果有小偷闯入家中,警报短信就会被安装好的监控系统发送到管理者的手机中,机主可以通过这些信息及时了解目前监控环境的状况。对我们的家庭很实用,即使远在千里之外的地方上班,我们对家里的状况也能了如指掌。

1 系统功能模块设计

本系统是基于Linux操作系统的小型家居智能化控制系统的设计与实现,本系统采用GTK+源码实现的,并且应用了Linux下的Glade开发软件进行开发。本系统不仅实现了可以向管理者发送信息,而且可以针对不同的用户,还可以发送中文信息或者英文信息;管理者还可以向系统发送命令,例如家里来客人了,如果自己不在家的话,可以给系统发送一条短信命令打开门,让客人进入家里,以免客人在外面等着主人回来。本系统通过模拟一个小型芯片能够实现的通信功能和执行的相关功能,具体实现的流程如图1所示。

图1 功能模块

2 系统主界面设计与实现

本系统的界面是使用GTK+和Glade图形界面工具制作和编写的,整个界面就是一个容器,可以向其中添加选项框。通过链接函数,得到操作图形界面的对象,在主函数中调用对象,可以直接对其操作。在整个界面中,左边有个消息显出处框、时间显示框、消息显示的文本框;在右边是服务开启按钮、号码输入框、发送按钮、消息文本框。制作的界面如图2所示:

图2 系统界面

3 短信发送界面与实现

短信发送界面,主要实现的是小型家居智能化控制系统中的通信功能,实现用户的手机与家里的芯片进行通信,当满足一定的条件的时候,就会触发短信发送功能,根据主人的需要,我们可以设置发送的内容是中文的信息还是英文的信息。例如家里着火了,温度会升高,温度传感器就会触发短信发送功能提醒主人家里着火了。如图3所示。

图3 发送中文界面

本系统还可以实现发送中文信息,把信息传递给英文用户。如图4所示。

如果短信发送成功后就会弹出一个对话框提示发送成功。如果短信发送失败会提醒重新发送,同时用户也要检查自己的电话号码以及消息内容是否有错误。如图5所示:

图4 发送英文界面

图5 发送失败界面

4 短信接收编程与实现

本文设计了接收函数,实现了接收主人发来的一些短信命令,例如主人不在家,家里来客人了,主人可以通过手机发送一条短信命令把门打开;如果家里着火了,主人也可以发送短信,实现家里的消防系统打开;如果主人有想要看的电视节目,而自己不在家,主人可以发送短信打开电视机,录制电视节目,回家后可以观看录制的节目。本系统还可以实现其他家居的智能化控制,下图展示的是接收“打开电视机开始录制节目”的短信并执行操作的界面,如图6所示:

图6 接收短信界面

详细接收代码实现:int get_message(int fd){

char rbuf[MAXBUF];

int nread,nwrite;

char cmd_at[MAXBUF];

char cmd_cmgr[]="at+cmgr=1 ";

char cmd_cmgd[]="at+cmgd=1 ";

memset(cmd_at,0,sizeof(cmd_at)); //----at<CR>----

strcpy(cmd_at,"at ");

nwrite=pdu_write(fd,cmd_at,strlen(cmd_at),TINMEOUNT);

printf("nwrite=%d,%s ",nwrite,cmd_at);

memset(rbuf,0,sizeof(rbuf)); sleep(2);

nread=pdu_read(fd,rbuf,TINMEOUNT);

printf("nread=%d,%s ",nread,rbuf);

if(NULL==strstr(rbuf,"OK")){

return 1;}

//读第一条短信

memset(rbuf,0,MAXBUF);

nwrite=pdu_write(fd,cmd_cmgr,strlen(cmd_cmgr),TINMEOUNT);

nread=pdu_read(fd,rbuf,TINMEOUNT);

printf("nread=%d,%s ",nread,rbuf);

if(NULL==strstr(rbuf,"OK")){

return 1;

}

if((NULL!=strstr(rbuf,"62535F005B8996327CFB7EDF"))||(NULL!=strstr(rbuf,"Open the security system"))){

printf("打开安防系统 ");

memset(rbuf,0,MAXBUF);

nwrite=pdu_write(fd,cmd_cmgd,strlen(cmd_cmgd),TINMEOUNT);

nread=pdu_read(fd,rbuf,TINMEOUNT);

printf("nread=%d,%s ",nread,rbuf);

return 2;

}

if((NULL != strstr(rbuf, "62535F00996E6C34673A")) ||(NULL!=strstr(rbuf,"Open the water dispenser"))){

printf("打开饮水机 ");

memset(rbuf,0,MAXBUF);

nwrite=pdu_write(fd,cmd_cmgd,strlen(cmd_cmgd),TINMEOUNT);

nread=pdu_read(fd,rbuf,TINMEOUNT);

printf("nread=%d,%s ",nread,rbuf);

return 3;

}

if((NULL!=strstr(rbuf,"62535F00753589C6673A5F555236828 276EE"))||(NULL!=strstr(rbuf,"Turn on the TV recording programs"))){

printf("打开电视机录制节目 ");

memset(rbuf,0,MAXBUF);

nwrite=pdu_write(fd,cmd_cmgd,strlen(cmd_cmgd),TINMEOUNT);

nread=pdu_read(fd,rbuf,TINMEOUNT);

printf("nread=%d,%s ",nread,rbuf);

return 4;

}

if((NULL!=strstr(rbuf,"62535F00592795E8"))||(NULL!=strstr(rbuf,"Open the door"))){

printf("打开大门 ");

memset(rbuf,0,MAXBUF);

nwrite=pdu_write(fd,cmd_cmgd,strlen(cmd_cmgd),TINMEOUNT);

nread=pdu_read(fd,rbuf,TINMEOUNT);

printf("nread=%d,%s ",nread,rbuf);

return 5;

}

//删除短信

printf("删除短信! ");

memset(rbuf,0,MAXBUF);

nwrite=pdu_write(fd,cmd_cmgd,strlen(cmd_cmgd),TINMEOUNT);

nread=pdu_read(fd,rbuf,TINMEOUNT);

printf("nread=%d,%s ",nread,rbuf);

return 0;

}

5 短信收发设计与实现

5.1 相关AT命令功能介绍

①短信息操作

短信操作步骤及相关命令:

设置短信格式——AT+CMGF

设置短信存储载体——AT+CPMS

读短信——AT+CMGR

发送短信——AT+CMGS

删除短信——AT+CMGD

显示短信——AT+CMGL

②AT+CPMS选择短信存储的载体。

测试结果:a.AT+CPMS=”SM”

+CPMS:8,15,8,15,1,40

OK

返回OK表示设置成功,说明当前显示状态:SIM储器总容量为15,当前存储量8。

③命令格式:AT+CPMS?主要用于显示当前短信存储载体设置。

测试结果:a.AT+CPMS?

+CPMS:"SM",8,15,"SM",8,15,"ME",1,40

OK

当前短信存储载体设置为:mem1为SM,mem2为 SM,mem3为ME;

④命令格式:AT+CPMS=?用于显示命令支持的相关参数

⑤AT+CMGF设置短信格式,看用户是发送英文还是中文,选着为1,发送英文;选择0,则是发送中文。设置成功后要返回OK。

测试结果:AT+CMGF=?显示可以等于几。

+CMGF:(0,1)

OK

AT+CMGF=1设置为发送英文

OK

AT+CMGF=0设置为发送中文

+CMGF:1

OK

⑥AT+CMGS发送短信内容命令,发送后有一个<ctrl-z>,用字符代替是x1a。

测试结果:a.AT+CMGS=18782966350<CR>

>adc123.123<ctrl-z>

+CMS ERROR:500

ERROR:500表示命令错误;⑦AT+CMGR读短信,后面跟读第几条短信。测试结果:a.AT+CMGR=1

+CMS

OK

5.2 PDU格式下短信收发流程图

短消息被保存在一些缓存中,也可以把消息存放在SIM卡中,MODEM从手机中接收短消息,具体的是把SIM中的消息读出来,读短信要利用AT+CMGR和AT+CMGD两条指令来完成。与接收短信息一样,发送时也要先建立联接,传送一些初始化指令,然后发送短消息内容。收发流程图如下:

图7 短信发送流程

猜你喜欢
命令家居短信
打造日常家居“氛围感”
管理Windows10的PowerShell命令行使用记录
安装和启动Docker
道歉短信
台北家居
移防命令下达后
代发短信
解析Windows10的内部命令
“八一”节日短信之一
《数码家居》2009年下半年推荐榜