朱正國
(攀枝花學院數(shù)學與計算機學院,攀枝花 617000)
隨著計算技術(shù)的不斷進步,各種智能化的產(chǎn)品逐漸出現(xiàn)在市場上,例如智能監(jiān)控系統(tǒng)和智能家居系統(tǒng)。特別是智能家居系統(tǒng),用戶可以通過手機短信了解家里的情況并通過手機發(fā)送命令進行遠程控制,實現(xiàn)了對家人及財產(chǎn)安全進行實時監(jiān)控。家、芯片、手機三者通過短信連接在一起,通過手機短信來實現(xiàn)對家庭的監(jiān)控和管理也就應運而生了。
通過手機和PC終端能夠讓家居和人緊密的聯(lián)系在一起。短信在家庭中做監(jiān)控使用,能夠很好地了解家庭情況,特別是對家中老人和孩子而言,非常方便。安防方面的作用,如果有小偷闖入家中,警報短信就會被安裝好的監(jiān)控系統(tǒng)發(fā)送到管理者的手機中,機主可以通過這些信息及時了解目前監(jiān)控環(huán)境的狀況。對我們的家庭很實用,即使遠在千里之外的地方上班,我們對家里的狀況也能了如指掌。
本系統(tǒng)是基于Linux操作系統(tǒng)的小型家居智能化控制系統(tǒng)的設計與實現(xiàn),本系統(tǒng)采用GTK+源碼實現(xiàn)的,并且應用了Linux下的Glade開發(fā)軟件進行開發(fā)。本系統(tǒng)不僅實現(xiàn)了可以向管理者發(fā)送信息,而且可以針對不同的用戶,還可以發(fā)送中文信息或者英文信息;管理者還可以向系統(tǒng)發(fā)送命令,例如家里來客人了,如果自己不在家的話,可以給系統(tǒng)發(fā)送一條短信命令打開門,讓客人進入家里,以免客人在外面等著主人回來。本系統(tǒng)通過模擬一個小型芯片能夠?qū)崿F(xiàn)的通信功能和執(zhí)行的相關功能,具體實現(xiàn)的流程如圖1所示。
圖1 功能模塊
本系統(tǒng)的界面是使用GTK+和Glade圖形界面工具制作和編寫的,整個界面就是一個容器,可以向其中添加選項框。通過鏈接函數(shù),得到操作圖形界面的對象,在主函數(shù)中調(diào)用對象,可以直接對其操作。在整個界面中,左邊有個消息顯出處框、時間顯示框、消息顯示的文本框;在右邊是服務開啟按鈕、號碼輸入框、發(fā)送按鈕、消息文本框。制作的界面如圖2所示:
圖2 系統(tǒng)界面
短信發(fā)送界面,主要實現(xiàn)的是小型家居智能化控制系統(tǒng)中的通信功能,實現(xiàn)用戶的手機與家里的芯片進行通信,當滿足一定的條件的時候,就會觸發(fā)短信發(fā)送功能,根據(jù)主人的需要,我們可以設置發(fā)送的內(nèi)容是中文的信息還是英文的信息。例如家里著火了,溫度會升高,溫度傳感器就會觸發(fā)短信發(fā)送功能提醒主人家里著火了。如圖3所示。
圖3 發(fā)送中文界面
本系統(tǒng)還可以實現(xiàn)發(fā)送中文信息,把信息傳遞給英文用戶。如圖4所示。
如果短信發(fā)送成功后就會彈出一個對話框提示發(fā)送成功。如果短信發(fā)送失敗會提醒重新發(fā)送,同時用戶也要檢查自己的電話號碼以及消息內(nèi)容是否有錯誤。如圖5所示:
圖4 發(fā)送英文界面
圖5 發(fā)送失敗界面
本文設計了接收函數(shù),實現(xiàn)了接收主人發(fā)來的一些短信命令,例如主人不在家,家里來客人了,主人可以通過手機發(fā)送一條短信命令把門打開;如果家里著火了,主人也可以發(fā)送短信,實現(xiàn)家里的消防系統(tǒng)打開;如果主人有想要看的電視節(jié)目,而自己不在家,主人可以發(fā)送短信打開電視機,錄制電視節(jié)目,回家后可以觀看錄制的節(jié)目。本系統(tǒng)還可以實現(xiàn)其他家居的智能化控制,下圖展示的是接收“打開電視機開始錄制節(jié)目”的短信并執(zhí)行操作的界面,如圖6所示:
圖6 接收短信界面
詳細接收代碼實現(xiàn):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("打開安防系統(tǒng) ");
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("打開電視機錄制節(jié)目 ");
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;
}
①短信息操作
短信操作步驟及相關命令:
設置短信格式——AT+CMGF
設置短信存儲載體——AT+CPMS
讀短信——AT+CMGR
發(fā)送短信——AT+CMGS
刪除短信——AT+CMGD
顯示短信——AT+CMGL
②AT+CPMS選擇短信存儲的載體。
測試結(jié)果:a.AT+CPMS=”SM”
+CPMS:8,15,8,15,1,40
OK
返回OK表示設置成功,說明當前顯示狀態(tài):SIM儲器總?cè)萘繛?5,當前存儲量8。
③命令格式:AT+CPMS?主要用于顯示當前短信存儲載體設置。
測試結(jié)果:a.AT+CPMS?
+CPMS:"SM",8,15,"SM",8,15,"ME",1,40
OK
當前短信存儲載體設置為:mem1為SM,mem2為 SM,mem3為ME;
④命令格式:AT+CPMS=?用于顯示命令支持的相關參數(shù)
⑤AT+CMGF設置短信格式,看用戶是發(fā)送英文還是中文,選著為1,發(fā)送英文;選擇0,則是發(fā)送中文。設置成功后要返回OK。
測試結(jié)果:AT+CMGF=?顯示可以等于幾。
+CMGF:(0,1)
OK
AT+CMGF=1設置為發(fā)送英文
OK
AT+CMGF=0設置為發(fā)送中文
+CMGF:1
OK
⑥AT+CMGS發(fā)送短信內(nèi)容命令,發(fā)送后有一個<ctrl-z>,用字符代替是x1a。
測試結(jié)果:a.AT+CMGS=18782966350<CR>
>adc123.123<ctrl-z>
+CMS ERROR:500
ERROR:500表示命令錯誤;⑦AT+CMGR讀短信,后面跟讀第幾條短信。測試結(jié)果:a.AT+CMGR=1
+CMS
OK
短消息被保存在一些緩存中,也可以把消息存放在SIM卡中,MODEM從手機中接收短消息,具體的是把SIM中的消息讀出來,讀短信要利用AT+CMGR和AT+CMGD兩條指令來完成。與接收短信息一樣,發(fā)送時也要先建立聯(lián)接,傳送一些初始化指令,然后發(fā)送短消息內(nèi)容。收發(fā)流程圖如下:
圖7 短信發(fā)送流程