SIM900A 各功能指令 詳細(xì)版
1 AT 指令簡介關(guān)鍵詞:發(fā)送第一條指令;同步波特率;AT 即Attention ,指令集是從終端設(shè)備(TerminalEquipment,ATTE) 或數(shù)據(jù)終端設(shè)備(DataTerminalEqu
1 AT 指令簡介
關(guān)鍵詞:發(fā)送第一條指令;同步波特率;
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ù)進(jìn)行交互。用戶可以通過AT 指令進(jìn)行呼叫、短信、電話本、數(shù)據(jù)業(yè)務(wù)、傳真等方面的控制。
AT 指令必須以"AT" 或"at" 開頭(第一條發(fā)給模塊的指令要都大寫),以回車(
我們通過串口調(diào)試助手SSCOM 來測試一下,打開:選擇正確的COM 號(連接到SIM900A 模塊的COM 端口,我電腦是COM3),然后設(shè)置波特率為115200,勾選發(fā)送新行(必選!即sscom 自動添加回車換行功能),然后發(fā)送AT 到SIM900A 模塊,如下圖所示:
我們發(fā)送了2次AT 指令,第一次看到有亂碼,這是因?yàn)槟K上電后,還沒有實(shí)現(xiàn)串口同步,在收到第一次數(shù)據(jù)(不一定要AT 指令) 后,模塊會自動實(shí)現(xiàn)串口同步后續(xù)通信就不會出現(xiàn)亂碼了。因?yàn)镾IM900A 具有自動串口波特率識別功能(識別范圍:1200~115200),所以我們的電腦(或設(shè)備) 可以隨便選擇一個波特率(不超過識別范圍即可)
,來和模塊進(jìn)行通
,信,這里我們選擇最快的115200。從上圖可以看出,我們現(xiàn)在已經(jīng)可以和SIM900A 模塊進(jìn)行通信了,我們通過發(fā)送不同的AT 指令,就可以實(shí)現(xiàn)對SIM900A 的各種控制了。
SIM900A 模塊提供的AT 命令包含符合GSM07.05、GSM07.07和ITU-TRecommendationV.25ter 的指令,以及SIMCOM 自己開發(fā)的指令。接下來我們介紹幾個常用的AT 指令:
1,AT CPIN?該指令用于查詢SIM 卡的狀態(tài),主要是PIN 碼,如果該指令返回: CPIN:READY,則表明SIM 卡狀態(tài)正常,返回其他值,則有可能是沒有SIM 卡。
2,AT CSQ 該指令用于查詢信號質(zhì)量,返回SIM900A 模塊的接收信號強(qiáng)度,如返回: CSQ:30,0,
表示信號強(qiáng)度是30(最大有效值是31)。如果信號強(qiáng)度過低,則要檢查天線是否接好了? 3,AT COPS?該指令用于查詢當(dāng)前運(yùn)營商,該指令只有在連上網(wǎng)絡(luò)后,才返回運(yùn)營商,否則返回空,如返回: COPS:0,0,"CHINAMOBILE",表示當(dāng)前選擇的運(yùn)營商是中國移動。
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該指令用于查詢本機(jī)號碼,必須在SIM 卡在位的時候才可查詢,如返回: CNUM:"","15902020353",129,7,4,則表明本機(jī)號碼為:15902020353。另外,不是所有的SIM 卡都支持這個指令,有個別SIM 卡無法通過此指令得到其號碼。
8,ATE1該指令用于設(shè)置回顯模式(默認(rèn)開啟),即模塊將收到的AT 指令完整的返回給發(fā)送端,啟用該功能,有利于調(diào)試模塊。如果不需要開啟回顯模式,則發(fā)送ATE0指令即可關(guān)閉,這樣收到的指令將不再返回給發(fā)送端,這樣方便程序控制。
以上就是我們介紹的幾個常用的AT 指令,當(dāng)然還有其他一些常用的AT 指令,比如ATD/ATA/ATH等,我們在后面的章節(jié)會慢慢介紹。關(guān)于SIM900A 詳細(xì)的AT 指令介紹,SIM900A_AT命令手冊這個文檔。發(fā)送給模塊的指令,如果執(zhí)行成功,則會返回對應(yīng)信息和"OK" ,如果執(zhí)行失敗/指令無效,則會返回"ERROR" 。
另外,提醒大家,所有的指令都必須是以ASCII 編碼字符格式發(fā)送,不要在指令里面夾
,雜中文符號。同時,很多指令都帶有查詢或提示功能,可以通過指令 "?"來查詢當(dāng)前設(shè)置,通過指令 "=?"的方式來獲取設(shè)置提示。
2 撥打/接聽電話
關(guān)鍵詞:接打電話;DTMF;
本節(jié),我們將介紹如何使用SIM900A 模塊進(jìn)行撥打和接聽電話。本節(jié),將要用到的指令有:ATE1/ATD/ATA/ATH/AT COLP/AT CLIP/AT VTS等7條AT 指令。
ATE1,用于設(shè)置回顯,即模塊將收到的指令完整的返回給發(fā)送設(shè)備,方便調(diào)試。ATD ,用于撥打任意電話號碼,格式為:ATD 號碼 ;,末尾的’; ’一定要加上,否則不能成功撥號,如發(fā)送:ATD10086; ,即可實(shí)現(xiàn)撥打10086。ATA ,用于應(yīng)答電話,當(dāng)收到來電的時候,給模塊發(fā)送:ATA ,即可接聽來電。ATH ,用于掛斷電話,要想結(jié)束正在進(jìn)行的通話,只需給模塊發(fā)送:ATH ,即可掛斷。AT COLP,用于設(shè)置被叫號碼顯示,這里我們通過發(fā)送:AT COLP=1,開啟被叫號碼顯示,當(dāng)成功撥通的時候(被叫接聽電話),模塊會返回被叫號碼。AT CLIP,用于設(shè)置來電顯示,通過發(fā)送:AT CLIP=1,可以實(shí)現(xiàn)設(shè)置來電顯示功能,模塊接收到來電的時候,會返回來電號碼。AT VTS=*,產(chǎn)生DTMF 音,該指令只有在通話進(jìn)行中才有效,用于向?qū)Ψ桨l(fā)送DTMF 音,比如在撥打10086查詢的時候,我們可以通過發(fā)送:AT VTS=1,模擬發(fā)送按鍵1。
在介紹了本節(jié)要用到的幾個AT 指令之后,我們開始實(shí)現(xiàn)本節(jié)功能,不過有前提條件:那就是模塊必須開機(jī),并且找到了運(yùn)營商。通過發(fā)送:AT COPS?,如果返回: COPS:0,0,"CHINAMOBILE",則可以開始下面的測試了。
2.1撥打電話
本節(jié),我們將利用SIM900A 模塊來撥打10086,并進(jìn)行話費(fèi)查詢。首先發(fā)送:ATE1,設(shè)置回顯,再發(fā)送:AT COLP=1,設(shè)置被叫號碼顯示。如圖下圖所示:
,然后,我們發(fā)送:ATD10086; ,撥打10086,在接通后,SIM900A 模塊返回: COLP:"10086",129,"","",此時,待一堆話結(jié)束后,我們發(fā)送:AT VTS=1,即可查詢本機(jī)電話號碼。最后,通過發(fā)送:ATH ,掛斷,結(jié)束本次通話。
查詢話費(fèi)余額至此,我們就完成了一次撥號、發(fā)送DTMF 音、結(jié)束通話的操作。十分簡單,所以用SIM900A 模塊來實(shí)現(xiàn)打電話,那實(shí)在是小菜一碟。
2.2接聽電話
本節(jié),我們將通過SIM900A 模塊實(shí)現(xiàn)電話接聽。首先,我們發(fā)送:AT CLIP=1,開啟來電顯示功能,然后我們用其他電話機(jī)/手機(jī)撥打模塊上SIM 卡的號碼。然后,模塊在接收到來電的時候,會通過耳機(jī)輸出來電鈴聲,并且可以在串口接收到來電號碼,如: CLIP:"15124532672",161,"",,"ailin",0,表示當(dāng)前接入號碼為:15124532672。此時,我們發(fā)送:ATA ,即可接聽來電,并進(jìn)行通話。當(dāng)對方掛斷電話的時候,SIM900A 模塊會返回:NOCARRIER ,并結(jié)束此次通話。當(dāng)然,我們也可以通過發(fā)送:ATH ,來主動結(jié)束通話。
2.3 短信的讀取與發(fā)送
本節(jié),我們將介紹如何使SIM900A 模塊進(jìn)行短信的讀取與發(fā)送。本節(jié),將要用到的指令有:AT CNMI/AT CMGF/AT CSCS/AT CSMP/AT CMGR/AT CMGS/AT CPMS等7條AT
指令。
,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 字符集,默認(rèn)的為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ù)字)。該指令我們在后面詳細(xì)介紹。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é),我們將用其他手機(jī)先發(fā)送一條英文短信到SIM900A 模塊上,然后讀取模塊接收到的這條英文短信。
首先,我們發(fā)送:AT CMGF=1,設(shè)置為文本模式,然后發(fā)送:AT CSCS="GSM",設(shè)置GSM 字符集,然后發(fā)送:AT CNMI=2,1,設(shè)置新消息提示。接著,我們用別的手機(jī)發(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 模塊來給指定手機(jī)號碼發(fā)送一條英文短信。這里,我們用到AT CMGS指令來發(fā)送短信,發(fā)送全英文/數(shù)字短信的時候,我們先設(shè)置為:"GSM" 字符集(AT CSCS="GSM"),文本模式(AT CMGF=1)假設(shè)我們要給手機(jī)號:。15124532672,發(fā)送
,一條短信,則發(fā)送:AT CMGS="15124532672",然后模塊返回:>,此時我們輸入我們需要發(fā)送的內(nèi)容:SIM900A TEST,注意,此可以不用發(fā)送回車了。在發(fā)送完內(nèi)容以后,最后以十六進(jìn)制(HEX)格式單獨(dú)發(fā)送:1A (即0X1A ),即可啟動一次短信發(fā)送. 注1:0X1A, “CTRL Z”的鍵值,即用于告訴SIM900A ,要執(zhí)行發(fā)送操作。另外還可以發(fā)送:0X1B ,即“ESC ”的鍵值,用于告訴SIM900A ,取消本次操作,不執(zhí)行發(fā)送。稍等片刻,在短信成功發(fā)送后,模塊返回如: CMGS:156,的確認(rèn)信息,表示短信成功發(fā)送,其中156為模塊內(nèi)部的短信計數(shù)器,一般不用理會。
2.6 中英文短信的發(fā)送
本節(jié),我們將利用SIM900A 模塊來給指定手機(jī)號碼發(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 編碼。假定我們要給手機(jī)號: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)容以后,最后以十六進(jìn)制(HEX)格式單獨(dú)發(fā)送(不用添加回車):1A (即0X1A ),啟動一次短信發(fā)送。
短信的讀取與發(fā)送,我們就介紹到這里,我們?nèi)渴鞘褂梦谋荆═EXT )模式來實(shí)現(xiàn)的,當(dāng)然還可以用PDU 模式,不過PDU 模式稍微復(fù)雜點(diǎn),有興趣的朋友,可以參考相關(guān)資料自行研究下。
2.7 GPRS 通信
本節(jié),我們將介紹如何使用SIM900A 模塊進(jìn)行GPRS 通信,實(shí)現(xiàn)模塊與電腦的TCP 和
,UDP 數(shù)據(jù)傳輸。本節(jié),將要用到的指令有:
AT CGCLASS/AT CGDCONT/AT CGATT/AT CIPCSGP/AT CLPORT/AT CIPSTART/AT CIPSEN/AT CIPSTATUS/AT CIPCLOSE/AT CIPSHUT等10條AT 指令。AT CGCLASS,用于設(shè)置移動臺類別。SIM900A 模塊僅支持類別"B" 和"CC" ,發(fā)送:AT CGCLASS="B",設(shè)置移動臺類別為B 。即,模塊支持包交換和電路交換模式,但不能同時支持。AT CGDCONT,用于設(shè)置PDP 上下文。發(fā)送:AT CGDCONT=1,"IP","CMNET",設(shè)置PDP 上下文標(biāo)志為1,采用互聯(lián)網(wǎng)協(xié)議(IP ),接入點(diǎn)為"CMNET" 。AT CGATT,用于設(shè)置附著和分離GPRS 業(yè)務(wù)。發(fā)送:AT CGATT=1,附著GPRS 業(yè)務(wù)。AT CIPCSGP,用于設(shè)置CSD 或GPRS 鏈接模式。發(fā)送:AT CIPCSGP=1,"CMNET",設(shè)置為GPRS 連接,接入點(diǎn)為”CMNET ”。AT CLPORT,用于設(shè)置本地端口號。發(fā)送:
AT CLPORT="TCP","8888",即設(shè)置TCP 連接本地端口號為8888。AT CIPSTART,用于建立TCP 連接或注冊UDP 端口號。發(fā)送:AT CIPSTART="TCP","180.120.52.222","8086",模塊將建立一個TCP 連接,連接目標(biāo)地址為:180.120.52.222,連接端口為8086,連接成功會返回:CONNECT OK 。AT CIPSEND,用于發(fā)送數(shù)據(jù)。在連接成功以后發(fā)送:AT CIPSEND,模塊返回:>,此時可以輸入要發(fā)送的數(shù)據(jù),最大可以一次發(fā)送1352字節(jié),數(shù)據(jù)輸入完后,同發(fā)短信一樣,輸入十六進(jìn)制的:1A (0X1A ),啟動發(fā)送數(shù)據(jù)。在數(shù)據(jù)發(fā)送完成后,模塊返回:SENDOK ,表示發(fā)送成功。
AT CIPSTATUS,用于查詢當(dāng)前連接狀態(tài)。發(fā)送:AT CIPSTATUS,模塊即返回當(dāng)前連接狀態(tài)。
AT CIPCLOSE,用于關(guān)閉TCP/UDP連接。發(fā)送:AT CIPCLOSE=1,即可快速關(guān)閉當(dāng)
前TCP/UDP連接。
AT CIPSHUT,用于關(guān)閉移動場景。發(fā)送:AT CIPSHUT,則可以關(guān)閉移動場景,關(guān)閉場景后連接狀態(tài)為:IPINITIAL ,可以通過發(fā)送:AT CIPSTATUS,查詢。另外,在連接建立后,如果收到: PDP:DEACT,則必須發(fā)送:AT CIPSHUT,關(guān)閉場景后,才能實(shí)現(xiàn)重連。
以上就是我們本節(jié)可能將要用到的一些AT 指令的簡單介紹,要實(shí)現(xiàn)模塊與電腦的GPRS 通信,需要確保所用電腦具有公網(wǎng)IP ,否則無法實(shí)現(xiàn)通信,推薦在ADSL 網(wǎng)絡(luò)下進(jìn)行測試,并最好關(guān)閉防火墻/殺毒軟件。
擁有1個公網(wǎng)IP ,你可以通過百度,搜索:IP ,第一個條目,就是本機(jī)IP ,如圖下圖所示。
,該IP 將與你的電腦IP (開始--運(yùn)行--cmd--IPCONFIG/ALL)進(jìn)行對比,不一致的,對于使用了路由器的ADSL 用戶,如下圖所示
可以看到,我們電腦IP 為192.168.1.103,與公網(wǎng)IP 不一致,此時我們需要對路由器進(jìn)行一下轉(zhuǎn)發(fā)規(guī)則設(shè)置:登錄路由器控制頁面,然后選擇轉(zhuǎn)發(fā)規(guī)則DMZ 主機(jī),如下圖所示:
2.7.1 TCP 連接
TCP 是基于連接的協(xié)議,在收發(fā)數(shù)據(jù)前,必須先和對方建立可靠連接,是一種可靠的數(shù)據(jù)傳輸方式,不過速度慢。本節(jié),我們將在SIM900A 模塊和電腦之間建立一個TCP 連接,并實(shí)現(xiàn)數(shù)據(jù)的互相收發(fā)。首先,在電腦端,我們需要用到一個軟件:網(wǎng)絡(luò)調(diào)試助手.exe ,該軟件在:網(wǎng)絡(luò)調(diào)試助手文件夾下可以找到。打開該軟件,設(shè)置協(xié)議類型為:TCPServer ,本地IP 地址直接用默認(rèn)的即可,設(shè)置本地端口為:8086,注意,這里的端口號可以隨便設(shè)置,范圍為0~65535,只要該端口沒有被其他程序占用即可。設(shè)置好之后,點(diǎn)擊“連接”按鈕(點(diǎn)擊后變?yōu)椤皵嚅_”,此時電腦端的)TCPServer 已經(jīng)開始工作,等待連接接入,如下圖所示:
在SIM900A 模塊這邊,先發(fā)送4個指令:
AT CGCLASS="B"
AT CGDCONT=1,"IP","CMNET"
AT CGATT=1
AT CIPCSGP=1,"CMNET"
這幾條指令前面已經(jīng)介紹過,用于設(shè)置移動臺類別、連接方式、接入點(diǎn)和附著GPRS 業(yè)務(wù)等。起到一個前期準(zhǔn)備的作用。之后,發(fā)送AT CLPORT="TCP","2000",設(shè)置本地TCP 連接端口為2000,然后發(fā)送:AT CIPSTART="TCP","180.120.52.222","8086",建立TCP 連接,連接到IP :180.120.52.222,連接端口為:8086。等待TCP 連接成功建立,模塊返回:CONNECT OK。
此時,SIM900A 模塊和電腦便建立了一個TCP 連接,可以互相發(fā)送數(shù)據(jù)了。首先,我們來看如何通過SIM900A 模塊給電腦發(fā)送數(shù)據(jù)。通過串口調(diào)試助手發(fā)送:AT CIPSEND,此時模塊返回:>,然后我們發(fā)送字符串(不用發(fā)送新行):SIM900A TCP連接測試,最后發(fā)送十六進(jìn)制的:1A ,啟動數(shù)據(jù)發(fā)送。然后等待模塊回應(yīng):SEND OK,說明發(fā)送成功。在串口調(diào)試助手收到:SEND OK,之后,表明我們的數(shù)據(jù)已經(jīng)成功發(fā)送出去了,此時在電腦端的網(wǎng)絡(luò)調(diào)試助手,會顯示收到的數(shù)據(jù)。
最后,我們要關(guān)閉TCP 連接,發(fā)送:AT CIPCLOSE=1,關(guān)閉當(dāng)前TCP 連接,再發(fā)送:AT CIPSHUT,關(guān)閉場景。
2.7.2 UDP 連接
UDP 與TCP 對應(yīng),是面向非連接的協(xié)議,在收發(fā)數(shù)據(jù)時,不需要建立連接,是一種不可靠的數(shù)據(jù)傳輸方式,不過速度快。本節(jié),我們將在-SIM900A 模塊和電腦之間建立一個UDP 連接,并實(shí)現(xiàn)數(shù)據(jù)的互相收發(fā)。同樣,我們先在電腦端,打開網(wǎng)絡(luò)調(diào)試助手,設(shè)置協(xié)議類型為:UDP ,使用默認(rèn)的IP 地址,并設(shè)置本地端口為:8086。設(shè)置好之后,點(diǎn)擊“連接”按鈕(點(diǎn)擊后變?yōu)椤皵嚅_”,此)時電腦端的UDP 通信就準(zhǔn)備好了,等待發(fā)送和接收數(shù)據(jù),如下圖所示。