單片機也能給手機發短信
沒錯!利用強大的GSM網絡,就可以實現單片機和手機之間互發短信。
我們知道,單片機以其強大的低成本優勢和強大的采集、控制、存儲功能在工業領域已經被廣泛使用,而今天我們所要說的,并不是要介紹是如何的強大,也不標榜其在哪個領域的杰出貢獻,我們今天所要說的,就是給單片機插上無線的翅膀,給它配上“手機”,讓其利用成熟的GSM網絡和遠在海外的您收發短信。
試想一下,如果單片機自身具備了收發短信功能,那將是多么令人欣喜若狂的一件事,我們可以利用手機向單片機發送一條短信,單片機可以根據不同的短信內容,進行不同的動作,比如控制某些管腳的電平,如果外部加個繼電器之類的,就可以用它來控制電源的開關等,單片機也可以將自身采集到的電壓、電流、壓力等模擬量值發送到指定的手機上。
下面我們具體來說一下如何使用單片機和手機進行短信收發。“巧婦難為無米之炊”,我們也需要幾個“零件”:
1、 單片機:無所謂什么型號,只要能提供串口就行,具體選型主要看其穩定性和自身要實現的功能,{zh1}就是xjb了。
2、 GSM短信模塊:這個市面上很多,價格也是參差不齊,我這里選擇西安達泰電子的T09C短信模塊,個人覺得相對比較穩定,主要是它提供標準的AT指令,這樣對于以后的產品升級或更換都有所保障;提供標準的RS232接口可以方便地與電腦的串口連接,通過提供的PC機測試軟件方便進行電腦調試,幫助我們盡快上手。好多公司的同類產品將AT指令封裝成自己的指令,這可能影響以后的產品改造和升級。
3、 相關配件:5V電源、GSM天線、SIM卡、一些電子元器件。其中的5V電源和GSM天線在購買時作為贈品已經提供給我們了,SIM卡就到當地移動服務廳辦一張就行了,注意不能使用CDMA和3G卡,電子元器件主要部分是RS232轉TTL的電平轉換,我推薦常用的MAX232。
我想對于單片機和MAX232以及RS232接口之間的連接,搞過單片機的朋友都是輕車熟路了,為了節省互聯網資源,我就不再重復。而SIM卡和GSM以及電源的連接,T09C都提供相關的接口,即所謂的零插撥式的,絕不會插錯。
下面我主要來說一下如何使用單片機程序實現短信收發,今天我們只談談英文短信的收發,中文短信收發相對比較麻煩一點兒,主要是中文的編碼部分,但其流程和英文短信是一致的(如需收發中文短信,請參見相關PDU短消息格式說明等相關文檔),這里只說一下短信收發的流程。
1、 短信發送(通過單片機串口收發指令,/**/內為注釋,<CR>表示回車,ASC碼為0x0D+0x0A)
發送:AT<CR> /*檢測模塊是否工作正常*/
接收:OK /*串口返回OK表示模塊工作正常*/
發送:AT+CMGF=1<CR> /*配置模塊工作于TEXT模式,用于發送英文短信*/
接收:OK /*配置成功*/
發送:AT+CMGS=”131XXXX4321”<CR>/*配置要接收的手機號碼*/
接收:> /*返回“>”符,表示可以發送短信*/
發送:Message Content /*要發送的短信內容“Message Content ”,
只能在接收到“>”符號后發送短信內容*/
其中“”符號為短信結束符,ASC碼值為(0x1A),不作為短信內容發送*/
接收:+CMGS:<mr><CR>
OK /*短信發送成功,<mr>為消息參考值,由模塊
自動分配*/
2、 讀取短信
接收:+CMTI: "SM",n<CR> /*收到新短信息提示*/
發送:AT+CMGR=n<CR> /*讀取第n條短信*/
接收:+CMGR: "REC UNREAD", "86XXXX4321","98/10/01,18 :22 :11+00", 80.22<CR>
OK /*短信讀取成功,“86XXXX4321”為
目標電話號碼,“80.22”為短信內容*/
如何判斷當前接收到的短信為第幾條短信,從而使用AT+CMGR=n來讀取該短信呢?當然,我們可以使用串口中斷來接收串口數據,當有新的短信到達時,串口會接收到諸如“+CMTI: "SM",n”的字符串,其中n就是新收到的短信存儲位置,通過字符串截取可以獲取n的值,這樣就可以利用AT+CMGR=n來讀取新收到的短信內容了,然后通過字符串分隔,分別獲取短信接收時間、目標電話號碼、短信內容等。
既然可以收發短信了,通俗點兒講,就是使單片機與手機之間建立了一條數據通道,可以利用這條數據通道來進行數據傳輸,如果通過手機向單片機發送不同的短信內容,單片機根據短信內容進行相關動作,比如控制外部繼電器等,那樣手機控制遠程設備將不再是夢想;同理,單片機也可以通過短信的形式,將采集到的相關信息發送到指定的手機上。
如果在PC機上通過RS232串口連接一臺DTP-S09C短信模塊, PC機上開發一套管理軟件,該軟件負責短信的收發及處理,這樣以來,不需要額外申請什么短信網關之類的,就可以建立強大的遠程監控系統平臺。