AT 即 Attention,指令集是從終端設(shè)備 (TerminalEquipment, ATTE)或數(shù)據(jù)終端設(shè)備 (DataTerminalEquipment, DTE)向終端適配器(TerminalAdapter, TA)或數(shù)據(jù)電路終端設(shè)備 (DataCircuitTerminalEquipment, DCE)發(fā)送的。通過 TA, TE 發(fā)送 AT 指令來控制移動臺 (MobileStation, MS)的功能,與 GSM 網(wǎng)絡(luò)業(yè)務(wù)進行交互。用戶可以通過 AT 指令進行呼叫、 短信、電話本、數(shù)據(jù)業(yè)務(wù)、傳真等方面的控制。
AT 指令必須以“AT”或“at”開頭( 第一條發(fā)給模塊的指令要都大寫),以回車( 《CR》)結(jié) 尾。模塊的響應(yīng)通常緊隨其后,格式為: 《回車》《換行》《響應(yīng)內(nèi)容》《回車》《換行》。 我們通過串口調(diào)試助手 SSCOM 來測試一下,打開:選擇正確的 COM 號(連接到 SIM900A 模塊的 COM 端口,我電腦是 COM3),然后設(shè)置波特率為 115200, 勾選發(fā)送新行( 必選! 即 sscom 自動添加回車換行功能),然后發(fā)送 AT 到 SIM900A 模塊,如下圖所示:
我們發(fā)送了 2 次 AT 指令,第一次看到有亂碼,這是因為模塊上電后,還沒有實現(xiàn)串口同步,在收到第一次數(shù)據(jù)(不一定要 AT 指令)后,模塊會自動實現(xiàn)串口同步后續(xù)通信就不會出現(xiàn)亂碼了。 因為 SIM900A 具有自動串口波特率識別功能(識別范圍: 1200~115200),所以我們的電腦(或設(shè)備)可以隨便選擇一個波特率(不超過識別范圍即可),來和模塊進行通信,這里我們選擇最快的 115200。從上圖可以看出,我們現(xiàn)在已經(jīng)可以和 SIM900A 模塊進行通信了,我們通過發(fā)送不同的 AT 指令,就可以實現(xiàn)對 SIM900A 的各種控制了。 常用的 AT 指令:
1, AT+CPIN? 該指令用于查詢 SIM 卡的狀態(tài),主要是 PIN 碼,如果該指令返回+CPIN:READY,則表明 SIM 卡狀態(tài)正常,返回其他值,則有可能是沒有 SIM 卡。
2, AT+CSQ 該指令用于查詢信號質(zhì)量,返回 SIM900A 模塊的接收信號強度,如返回+CSQ:30,0,表示信號強度是 30 (最大有效值是 31)。如果信號強度過低,則要檢查天線是否接好了?
3, AT+COPS? 該指令用于查詢當(dāng)前運營商,該指令只有在連上網(wǎng)絡(luò)后,才返回運營商, 否則返回空,如返回: +COPS:0,0,“CHINAMOBILE”,表示當(dāng)前選擇的運營商是中國移動。 4, AT+CGMI 該指令用于查詢模塊制造商,如返回: SIMCOM_Ltd,說明 SIM900A 模塊 是 SIMCOM 公司生產(chǎn)的。
5, AT+CGMM 該指令用于查詢模塊型號,如返回: SIMCOM_SIM900A,說明模塊型號是 SIM900A。
6, AT+CGSN 該指令用于查詢產(chǎn)品序列號(即 IMEI 號),每個模塊的 IMEI 號都是不一樣 的,具有全
球唯一性,如返回: 869988012018905,說明模塊的產(chǎn)品序列號是: 869988012018905。
7, AT+CNUM 該指令用于查詢本機號碼,必須在 SIM 卡在位的時候才可查詢,如返回: +CNUM:“”,“15902020353”,129,7,4,則表明本機號碼為: 15902020353。另外,不是所有的 SIM 卡都支持這個指令,有個別 SIM 卡無法通過此指令得到其號碼。
8, ATE1 該指令用于設(shè)置回顯模式(默認開啟),即模塊將收到的 AT 指令完整的返回給 發(fā)送端,啟用該功能,有利于調(diào)試模塊。如果不需要開啟回顯模式,則發(fā)送 ATE0 指令即可 關(guān)閉,這樣收到的指令將不再返回給發(fā)送端,這樣方便程序控制。
發(fā)送給模塊的指令,如果執(zhí)行成功,則會返回對應(yīng)信息和“OK”,如果執(zhí)行失敗/指令無效,則會返回“ERROR”。另外,提醒大家,所有的指令都必須是以 ASCII 編碼字符格式發(fā)送,不要在指令里面夾雜中文符號。同時,很多指令都帶有查詢或提示功能,可以通過指令+“?”來查詢當(dāng)前設(shè)置,通過指令+“=?”的方式來獲取設(shè)置提示。
2 撥打/接聽電話
ATE1,用于設(shè)置回顯,即模塊將收到的指令完整的返回給發(fā)送設(shè)備,方便調(diào)試。 ATD, 用于撥打任意電話號碼,格式為: ATD+號碼+;, 末尾的’ ;’一定要加上,否則不能成功撥 號, 如發(fā)送: ATD10086;,即可實現(xiàn)撥打 10086。 ATA,用于應(yīng)答電話,當(dāng)收到來電的時候, 給模塊發(fā)送: ATA,即可接聽來電。 ATH,用于掛斷電話,要想結(jié)束正在進行的通話,只需 給模塊發(fā)送: ATH,即可掛斷。 AT+COLP,用于設(shè)置被叫號碼顯示,這里我們通過發(fā)送: AT+COLP=1,開啟被叫號碼顯示,當(dāng)成功撥通的時候(被叫接聽電話),模塊會返回被叫號 碼。 AT+CLIP,用于設(shè)置來電顯示,通過發(fā)送: AT+CLIP=1,可以實現(xiàn)設(shè)置來電顯示功能,模 塊接收到來電的時候,會返回來電號碼。 AT+VTS=*,產(chǎn)生 DTMF 音,該指令只有在通話進行 中才有效,用于向?qū)Ψ桨l(fā)送 DTMF 音,比如在撥打 10086 查詢的時候,我們可以通過發(fā)送: AT+VTS=1,模擬發(fā)送按鍵 1。
在介紹了本節(jié)要用到的幾個 AT 指令之后,我們開始實現(xiàn)本節(jié)功能,不過有前提條件: 那就是模塊必須開機,并且找到了運營商。通過發(fā)送: AT+COPS?,如果返回: +COPS:0,0,“CHINAMOBILE”,則可以開始下面的測試了。 2.1 撥打電話
本節(jié),我們將利用 SIM900A 模塊來撥打 10086,并進行話費查詢。首先發(fā)送: ATE1,設(shè) 置回顯,再發(fā)送: AT+COLP=1,設(shè)置被叫號碼顯示。如圖下圖所示:
然后,我們發(fā)送: ATD10086; ,撥打 10086 ,在接通后, SIM900A 模塊返回:
+COLP:“10086”,129,“”,“”,此時,待一堆話結(jié)束后,我們發(fā)送: AT+VTS=1,即可查詢本機電 話號碼。最后,通過發(fā)送: ATH,掛斷,結(jié)束本次通話。
查詢話費余額至此,我們就完成了一次撥號、發(fā)送 DTMF 音、結(jié)束通話的操作。十分簡 單,所以用 SIM900A 模塊來實現(xiàn)打電話,那實在是小菜一碟。
2.2 接聽電話
首先,我們發(fā)送: AT+CLIP=1,開啟來電顯示功能,然后我們用其他電話機/手機撥打模塊上 SIM 卡的號碼。然后,模塊在接收到來電的時候,會通過耳機輸出來電鈴聲,并且可以在串口接收到來電號碼,如:+CLIP:“15124532672”,161,“”,,“ailin”,0,表示當(dāng)前接入號碼為:15124532672。此時,我們發(fā)送:ATA,即可接聽來電,并進行通話。當(dāng)對方掛斷電話的時候, SIM900A 模塊會返回: NOCARRIER,并結(jié)束此次通話。當(dāng)然,我們也可以通過發(fā)送: ATH,來主動結(jié)束通話。
2.3 短信的讀取與發(fā)送
AT+CNMI,用于設(shè)置新消息指示。發(fā)送: AT+CNMI=2,1,設(shè)置新消息提示,當(dāng)收到新消息, 且 SIM 卡未滿的時候, SIM900A 模塊會返回數(shù)據(jù)給串口,如: +CMTI:“SM”,2,表示收到接收 到新消息,存儲在 SIM卡的位置 2;存滿了就不會提示,可以通過刪除短信來解決。AT+CMGF, 用于設(shè)置短消息模式, SIM900A 支持 PDU 模式和文本( TEXT)模式等 2 種模式,發(fā)送: AT+CMGF=1,即可設(shè)置為文本模式。 AT+CSCS,用于設(shè)置 TE 字符集,默認的為 GSM7 位缺省 字符集,在發(fā)送純英文短信的時候,發(fā)送: AT+CSCS=“GSM”,設(shè)置為缺省字符集即可。在發(fā)送中英文短信的時候,需要發(fā)送: AT+CSCS=“UCS2”,設(shè)置為 16 位通用 8 字節(jié)倍數(shù)編碼字符 集。 AT+CSMP,用于設(shè)置短消息文本模式參數(shù),在使用 UCS2 方式發(fā)送中文短信的時候,需 要發(fā)送: AT+CSMP=17,167,2,25,設(shè)置文本模式參數(shù)。 AT+CMGR,用于讀取短信,比如發(fā)送: AT+CMGR=1,則可以讀取 SIM 卡存儲在位置 1 的短信。 AT+CMGS,用于發(fā)送短信,在“GSM” 字符集下,最大可以發(fā)送 180 個字節(jié)的英文字符,在“UCS2”字符集下,最大可以發(fā)送 70 個 漢字(包括字符/數(shù)字)。該指令我們在后面詳細介紹。 AT+CPMS,用于查詢/設(shè)置優(yōu)選消息 存儲器,通過發(fā)送: AT+CPMS?,可以查詢當(dāng)前 SIM 卡最大支持多少條短信存儲,以及當(dāng)前 存儲了多少條短信等信息。如返回: +CPMS:用戶手冊“SM”,1,50,“SM”,1,50,“SM”,1,50,表示當(dāng) 前 SIM 卡最大存儲 50 條信息,目前已經(jīng)有 1 條存儲的信息。
2.4 英文短信的讀取
本節(jié),我們將用其他手機先發(fā)送一條英文短信到 SIM900A 模塊上,然后讀取模塊接收 到的這條英文短信。
首先,我們發(fā)送: AT+CMGF=1,設(shè)置為文本模式,然后發(fā)送: AT+CSCS=“GSM”,設(shè)置 GSM 字符集,然后發(fā)送: AT+CNMI=2,1,設(shè)置新消息提示。接著,我們用別的手機發(fā)送一條 英文短信“ SIM900AModule”到我們的模塊上(如果不知道模塊號碼,可以發(fā)送: AT+CNUM, 查詢模塊號碼)。模塊接收到短信后,會提示如: +CMTI:“SM”,2,表明收到了新的短信,存 放在 SIM 卡位置 2。然后,我們發(fā)送 AT+CMGR=2,即可讀取該短信。
注意:某些時候,模塊收到了短信,但卻不發(fā)送提示,原因是:模塊存儲容量有限,不 能繼續(xù)存儲短信。解決方法:可以刪除一些短信,例如發(fā)送: AT+CMGD=1,刪除全部短信 命令。
2.5 英文短信的發(fā)送
本節(jié),我們將利用 SIM900A 模塊來給指定手機號碼發(fā)送一條英文短信。這里,我們用 到 AT+CMGS 指令來發(fā)送短信,發(fā)送全英文/數(shù)字短信的時候,我們先設(shè)置為: “GSM”字符集 ( AT+CSCS=“GSM”),文本模式( AT+CMGF=1)假設(shè)我們要給手機號:。 15124532672,發(fā)送 一條短信,則發(fā)送: AT+CMGS=“15124532672”,然后模塊返回: 》,此時我們輸入我們需要 發(fā)送的內(nèi)容: SIM900A TEST,注意,此可以不用發(fā)送回車了。在發(fā)送完內(nèi)容以后,最后以十 六進制(HEX)格式單獨發(fā)送: 1A(即 0X1A),即可啟動一次短信發(fā)送。注 1: 0X1A,“ CTRL+Z” 的鍵值,即用于告訴 SIM900A,要執(zhí)行發(fā)送操作。另外還可以發(fā)送: 0X1B,即“ ESC”的鍵 值,用于告訴 SIM900A, 取消本次操作,不執(zhí)行發(fā)送。稍等片刻,在短信成功發(fā)送后,模塊 返回如: +CMGS:156,的確認信息,表示短信成功發(fā)送, 其中 156 為模塊內(nèi)部的短信計數(shù)器, 一般不用理會。
2.6 中英文短信的發(fā)送
本節(jié),我們將利用 SIM900A 模塊來給指定手機號碼發(fā)送一條中英文短信。同樣,我們 用到 AT+CMGS 指令來發(fā)送中英文短信。還是采用文本模式發(fā)送,發(fā)送步驟如下: 首先,發(fā)送: AT+CMGF=1,設(shè)置為文本模式。然后,發(fā)送: AT+CSMP=17,167,2,25,設(shè) 置文本模式參數(shù)。最后發(fā)送: AT+CSCS=“UCS2”,設(shè)置為 UCS2 編碼字符集。此時,我們便可 以發(fā)送 AT+CMGS 指令來發(fā)送中英文短信了,不過由于使用了 UCS2 字符集,所有字符/數(shù)字/ 漢字,都必須使用 UNICODE 編碼。假定我們要給手機號: 15124532672,發(fā)送一條中英文短 信,內(nèi)容為“ SIM900A 中英文短信發(fā)送測試”。我們首先要用:漢字 UNICODE 互換工具.exe, 這個軟件將號碼和發(fā)送內(nèi)容轉(zhuǎn)換為 UNICODE 字符串(需要手動去掉空格),得到:
15124532672 轉(zhuǎn)換后的 UNICODE 字符串(去掉空格后)
為:00310035003100320034003500330032003600370032.SIM900A。 中英文短信發(fā)送測試,轉(zhuǎn)換后的 UNICODE 字符串為:
00530049004D00390030003000414E2D82F1658777ED4FE153D190016D4B8BD5,然后,發(fā)送: AT+CMGS=“00310035003100320034003500330032003600370032”,這個指令,然后模塊返回: 》 此時我們輸入我們需要發(fā)送的內(nèi)容:
00530049004D00390030003000414E2D82F1658777ED4FE153D190016D4B8BD5, 注意,此處不 發(fā)送回車。 在發(fā)送完內(nèi)容以后,最后以十六進制(HEX)格式單獨發(fā)送(不用添加回車): 1A(即0X1A),啟動一次短信發(fā)送。
評論
查看更多