1. 程式人生 > >AT指令簡訊息操作

AT指令簡訊息操作

一、英文簡訊
發:AT
收:OK
發:AT+CMGF=1 
收:OK
發:AT+CMGS=13902433649
收:>
發:data→        //test 為傳送內容,→為傳送符(ctrl+z,十六進位制0x1A)
收:+CMGS: 54 OK

二、中文PDU簡訊
本文以一個例項來解說AT指令傳送PDU簡訊的全過程,假如我要傳送下面的簡訊:
接收號碼:+8613902433649
簡訊內容:工作愉快!
簡訊中心號碼:+8613800100500

1、簡訊中心號碼處理:用字串 addr 表示
a、將簡訊息中心號碼去掉+號,看看長度是否為偶數,如果不是,最後新增F
     即 addr = "+8613800100500"
    => addr = "8613800100500F"
b、將奇數位和偶數位交換。
    => addr = "683108100005F0"
c、將簡訊息中心號碼前面加上字元91,91是國際化的意思
    => addr = "91683108100005F0"
d、算出 addr 長度,結果除2,格式化成2位的16進位制字串,16 / 2 = 8 => "08"
    => addr = "0891683108100005F0"

2、手機號碼處理:用字串 phone
a、將手機號碼去掉+號,看看長度是否為偶數,如果不是,最後新增F
    即 phone = "+8613902433649"
    => phone = "8613902433649F"
b、將手機號碼奇數位和偶數位交換。
    => phone = "683109423346F9"

3、簡訊息部分處理:用字串 msg 表示
a、轉字串轉換為Unicode程式碼,例如“工作愉快!”的unicode程式碼為 5DE54F5C61095FEBFF01,(轉換在linux裡可用iconv函式實現。)
b、將 msg 長度除2,保留兩位16進位制數,即 5DE54F5C61095FEBFF01 = 20 / 2 => "0A",再加上 msg
    => msg = "0A5DE54F5C61095FEBFF01"

4、組合
a、手機號碼前加上字串 11000D91(1100:固定,0D:手機號碼的長度,不算+號,十六進位制表示,91:傳送到手機為91,傳送到小靈通為81)
    即 phone = "11000D91" + phone
    => 11000D91683109423346F9
b、手機號碼後加上 000800 和剛才的簡訊息內容,000800也寫死就可以了
    即 phone = phone + "000800" + msg
    即 11000D91683109423346F9 + 000800 + 0A5DE54F5C61095FEBFF01
=> phone = 11000D91683109423346F90008000A5DE54F5C61095FEBFF01
c、phone 長度除以2,格式化成2位的十進位制數
    即 11000D91683109423346F90008000A5DE54F5C61095FEBFF01 => 50位 / 2 => 25

5、所以要傳送的內容為
發:AT
收:OK
發:AT+CMGF=0 
收:OK
發:AT+CMGS=25
收:>
發:addr+phone→   //→為傳送符(ctrl+z,十六進位制0x1A)
收:+CMGS: 54 OK

6、如果返回不是ERROR,恭喜你,傳送成功了

三、幾個要注意的問題
1、傳送的指令用0x0D結尾,注意不是通常認為的0x0D,0x0A。

特別是在傳送PDU簡訊的AT+CMGS=25命令時,

一定只能以0x0D結尾。
2、在傳送簡訊內容時,以0x1A(代表ctrl+Z的虛擬鍵值)結尾。
3、用AT+CMEE=1命令,可以在簡訊貓返回ERROR時帶上原因,這樣方便除錯。

=================================================

3、簡訊息操作
    簡訊操作步驟及相關命令:
(1)  設定簡訊格式——AT+CMGF
(2)  設定簡訊儲存載體——AT+CPMS
(3)  設定簡訊接收提示方式——AT+CNMI
(4)  傳送簡訊——AT+CMGS
(5)  顯示簡訊——AT+CMGL
3.1   AT+CPMS
命令解釋:選擇簡訊儲存載體
3.1.1命令格式:AT+CPMS=<mem1>[,<mem2>][,<mem3>]
設定簡訊儲存載體
命令返回:+CPMS:<used1>,<total1>,<used2>,<total2>,<used3>,<total3>
          OK
           ERROR
測試結果:a. AT+CPMS=” SM” 
           +CPMS: 8,15,8,15,1,40
           OK
            設定成功,並顯示狀態:SM(SIM卡)儲存器總容量為 15,當前儲存量 8; 
           ME(模組)儲存器總容量為 40,當前儲存量 1;mem1 定義為 SM;
         b. AT+CPMS=” SM” ,” SM” 
           +CPMS: 8,15,8,15,1,40
           OK
             設定成功,並顯示狀態:SM儲存器總容量為 15,當前儲存量 8;
           ME儲存器總容量為 40,當前儲存量 1;mem1 定義為SM;mem2
            定義為SM;
         c. AT+CPMS=” SM” ,” SM” ,” SM” 
           +CPMS: 8,15,8,15,8,15
           OK
            設定成功,並顯示狀態:SM儲存器總容量為 15,當前儲存量 8;
           ME儲存器總容量為 40,當前儲存量 1;mem1 定義為SM;mem2
            定義為SM;mem3 定義為 SM;
         d. AT+CPMS=” ME” ,” SM” ,” SM” 
           +CPMS: 1,40,8,15,8,15
           OK
            設定成功,並顯示狀態:SM儲存器總容量為 15,當前儲存量 8;
           ME儲存器總容量為 40,當前儲存量 1;mem1 定義為 ME;mem2
            定義為SM;mem3 定義為 SM;
         e. AT+CPMS=” ME” ,” SM” ,” ME” 
           +CPMS: 1,40,8,15,1,40
           OK Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  9  -
            設定成功,並顯示狀態:SM儲存器總容量為 15,當前儲存量 8;
           ME儲存器總容量為 40,當前儲存量 1;mem1 定義為 ME;mem2
            定義為SM;mem3 定義為 ME;
         f. AT+CPMS=” ME
           ERROR
            命令格式錯誤,缺少{” };  注: +CPMS 後面的引數必須使用大寫格式.
3.1.2命令格式:AT+CPMS?
      顯示當前簡訊儲存載體設定
       命令返回:+CPMS:<mem1>,<used1>,<total1>,<mem1>,<used2>,<total2>,
                     <mem1>,<used3>,<total3>
                   OK
                  ERROR
       測試結果:a.   AT+CPMS?
                     +CPMS: "SM",8,15,"SM",8,15,"ME",1,40
                     OK
             當前簡訊儲存載體設定為:mem1為 SM,mem2為 SM,mem3
             為 ME;
                       b.    AT+CPMS!
                          ERROR
                           命令錯誤;
3.1.3命令格式:AT+CPMS=?
               顯示本命令支援的引數
                命令返回:+CPMS: (list of supported<mem1>s),(list of supported<mem2>s), 
                    (list of supported<mem3>s)
                      OK
                      ERROR
               測試結果:AT+CPMS=?
                           +CPMS: ("ME","SM"),("ME","SM"),("ME","SM")
                           OK
3.2   AT+CMGF
命令解釋:設定簡訊格式
3.2.1命令格式:AT+CMGF=<mode>
命令返回:OK
          ERROR
                    設定簡訊格式
3.2.2命令格式:AT+CMGF=?
命令返回:OK
          ERROR
           顯示本命令支援的引數
3.2.3命令格式:AT+CMGF?
命令返回:OK
          ERROR
           顯示當前簡訊格式
測試結果:AT+CMGF=?
+CMGF: (0,1)   注: 0表示簡訊為 PDU格式, 1 表示簡訊為文字格式
OK
   Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  10  -
AT+CMGF?
+CMGF: 0
OK  
  
AT+CMGF=1
OK
  
AT+CMGF?
+CMGF: 1
OK
     
3.3   AT+CMGS
命令解釋:傳送簡訊
命令格式:AT+CMGS=xxx<CR>    注: xxx 代表接收簡訊的電話號碼.
命令返回:>                     注:  此時等待簡訊內容輸入.  輸入完簡訊
內容後,需要按 Ctrl+Z傳送簡訊.
       +CMGS: xxx           注: xxx 代表通道埠程式碼,它是隨機的.
          OK       (此返回值表示簡訊傳送成功)
          ERROR   (此返回值表示簡訊傳送不成功)
測試結果:a.    AT+CMGS=13798335220<CR>
              >ABCD1234.456<Ctrl+Z>
                +CMGS : 97
               OK
           b.    AT+CMGS="13798335220"<CR>
> IT IS TEST NOW<ctrl-z>
+CMGS: 98
OK
注:  以上測試結果是通過文字格式傳送測試. PDU格式的測試及簡訊傳送
方法請參照文件《pdu 格式傳送簡訊息例子》
 
3.4    AT+CMGR
命令解釋:讀簡訊
命令格式:AT+CMGR=<indes>
命令返回:+CMGR:<stat>,[<alpha>],<length>]<CR><LF><pdu>
           OK
          ERROR
測試結果:a. AT+CMGR=5
              OK
              返回值僅為 OK,表示 5 號簡訊位置為空;
            b. AT+CMGR=2
+CMGR: 2,"REC READ","+8613798335220",,"08/03/19, 17:30:35+32"
998B76844F60002E518D5FCD5FCD5427
OK
讀出 2 號簡訊;
 
3.5    AT+CMGW
命令解釋:寫簡訊,並儲存到儲存載體 Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  11  -
命令格式:AT+CMGW=<length>[,<stat>]<CR>
命令返回:+CMGW: <index>
          OK
          ERROR
測試結果:AT+CMGW="13798335220"<CR>
> SHELLEY123456<ctrl-z>
+CMGW: 1
OK
把目標地址為 13798335220 的簡訊存入儲存載體,且被分配的地址
為 1 號簡訊;
 
3.6   AT+CMGD
命令解釋:刪除簡訊
命令格式:AT+CMGD=<index>
命令返回:OK
          ERROR
測試結果:AT+CMGD=1
          OK
          1 號簡訊被刪除
 
3.7   AT+CMGL
命令解釋:顯示簡訊清單
命令格式:AT+CMGL=<stat>
命令返回:+CMGL:<index1>,<stat>,<oa/da>,[<alpha>],[<scts>][,<tooa/toda>,<length>]
<CR><LF><data>[<CR><LF>
測試結果:AT+CMGL=?
      +CMGL: (“ REC UNREAD” ,” REC READ” ,” STO UNSENT” ,” STO SENT” .” ALL” )
            注:   AT+CMGL="REC UNREAD"代表顯示未讀簡訊清單
           AT+CMGL= "REC READ"代表顯示已讀簡訊清單
           AT+CMGL= "STO SENT"代表顯示已傳送的儲存簡訊清單
           AT+CMGL= "STO UNSENT"代表顯示未傳送的儲存簡訊清單
           AT+CMGL= "ALL"代表顯示所有簡訊清單
 
3.8   AT+CMSS
命令解釋:傳送儲存載體中的簡訊
命令格式:AT+CMSS=<index>
命令返回:+CMSS:<mr>
          OK
           ERROR
測試結果:AT+CMSS=2
          +CMSS: 204
          OK
 
3.9   AT+CNMI
命令解釋:新簡訊提示
3.9.1命令格式:AT+CNMI=<mode>,<mt>,<bm>,<ds>,<bfr>
命令返回:OK Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  12  -
          ERROR
測試結果:AT+CNMI=3,2
             OK
3.9.2命令格式:AT+CNMI?
命令返回:+CNMI:  <mode>,<mt>,<bm>,<ds>,<bfr>
OK
           ERROR
測試結果:AT+CNMI?
             +CNMI: 3,2,0,0,0
             OK
3.9.3命令格式:AT+CNMI=?
命令返回:+CNMI:  (list of supported<mode>s),  (list of supported<mt>s),   (list of
supported<bm>s), (list of supported<ds>s) , (list of supported<bfr>s)
OK
測試結果:AT+CNMI=3,2
OK
  
 
  4、TCP/IP部分
  4.1  AT+WOPEN
    命令解釋:Open AT 程式管理
    命令格式:AT+WOPEN=<Mode>[,<A&Dsize>]  
命令返回:OK
ERROR
測試結果:AT+WOPEN=1
                      OK
 
  4.2  AT+WIPCFG
    命令解釋:TCP/IP 協議棧處理
    命令格式:AT+WIPCFG=<mode>  
            <mode>的值共包含 0和 1和 2和 3 和 4   ,   0 代表停止協議棧, 1 代
            表開啟協議棧, 3 代表查詢協議棧軟體版本. 2 代表配置協議棧(如:AT+
           WIPCFG=2,4,1000 的意思是設定協議棧的單包最大資料為 1000 個字
            節). 4 代表協議棧的配置管理(如:AT+ WIPCFG=4,1的意思是將協議棧
            的配置資料儲存到FLASH中).
    命令返回:OK
ERROR
  測試結果:AT+WIPCFG=0
                        OK
         AT+WIPCFG=1
                       OK
         AT+WIPCFG=3    (執行此命令前,  必須先 AT+WIPCFG=1)
        WIP Soft v301 on Open AT OS v313
        Sep 28 2007 14:53:28 WIPlib:v3a02 WIPSoft:v2a07
                       OK
         AT+WIPCFG=2,4,1000
                       OK Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  13  -
         AT+WIPCFG=4,1
                       OK
 
4.3  AT+WIPBR
    命令解釋:設定通訊引數
    命令格式:AT+WIPBR=1,6  (其中 1 代表開啟資料通道, 6 代表走 GPRS 通訊方式)
命令返回:OK
ERROR
測試結果:AT+WIPBR=1,6               (設定通道資料格式)
                      OK
注: AT+WIPBR=2,6,11,"APN"       (設定 APN 名稱)
    AT+WIPBR=2,6,12,"Context id"    (設定通訊 ID 號)
    AT+WIPBR=2,6,0,"username"    (設定通訊使用者名稱)
    AT+WIPBR=2,6,1,"password"    (設定通訊密碼)
    AT+WIPBR=4,6,0              (啟動連線程序)
    AT+WIPBR=5,6,                (停止連線程序)
    AT+WIPBR=3,6,<>             (查詢 GPRS 設定引數)
    
4.4  AT+WIPCREATE 
    命令解釋:建立客戶端埠連線
    命令格式:AT+WIPCREATE=2,<communication index>,<"peer IP">,<peer port>  
命令返回:ERROR
       OK  
測試結果:AT+WIPCREATE=2,1,"166.111.8.238",23
      OK
      +WIPREADY: 2,1
                    +WIPDATA: 2,1,3
 
4.5  AT+WIPCLOSE
    命令解釋:關閉客戶端連線
    命令格式:AT+WIPCLOSE=2,<IDX>
命令返回:ERROR
       OK
測試結果:AT+WIPCLOSE=2,1
OK
 
4.6  AT+WIPDATA
    命令解釋:獲得最新的錯誤資訊。
        命令格式:AT+WIPDATA=<protocol>,<idx>,<mode>
命令返回:ERROR  
             OK
測試結果:AT+WIPDATA=2,1,1
       CONNECT       (此時進入資料透傳狀態)
            
4.7  +++
    命令解釋:切換資料模式到 AT 命令狀態
  命令格式:+++    (+之間間隔 1秒,即+號要分開發不能連續發) Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  14  -
命令返回:ERROR
         OK
        測試結果:+++  (在資料透傳狀態輸入)
OK
        
 
二、操作例項
    1、連線後一般操作
AT
OK
測試訊號強度:
AT+CSQ
+CSQ: 28,0
OK
    查詢模組版本:
      A TI3
657e09gg.Q24PL001 1961548 103107 17:56
OK
    修改串列埠波特率:
AT+IPR?
+IPR: 115200
OK
    讀 SIM卡狀態:
      AT+CPIN?
      +CPIN: READY
OK
 
2、撥打電話
撥打電話:
ATD13798335220;      
OK (接聽後顯示)
掛機:
A TH
OK
有電話呼入:
RING
 
RING
摘機:
ATA 
OK
掛機:
A TH
OK
3、簡訊息服務:
設定簡訊息格式: Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  15  -
AT+CMGF=?
+CMGF: (0,1)
OK
AT+CMGF?
+CMGF: 1
OK
AT+CMGF=0
OK
AT+CMGF?
+CMGF: 0
OK
AT+CMGF=1
OK
傳送簡訊息:
AT+CMGS="13798335220"
> TEST SMS             (輸完簡訊內容後按 Ctrl+z 傳送)
+CMGS: 99
OK
設定新簡訊提示方式:
AT+CNMI?
+CNMI: 0,1,0,0,0
OK
AT+CNMI=2,2        (設定模組收到簡訊後直接將簡訊送到串列埠 1)
OK
AT+CNMI?
+CNMI: 2,2,0,0,0
OK
用手機發簡訊給模組,一會超級終端則自動顯示輸出.  如:
+CMT: “ +8613798335220” ,,” 08/03/20,17:43:25+32” 
TEST SMS TOO    (收到的簡訊內容)
讀簡訊:
AT+CMGR=1
+CMGR: "REC UNREAD","+8613798335220",,” 08/03/20,17:46:50+32” 
123456ABC
OK
顯示簡訊清單:
AT+CMGL="ALL"
+CMGL: 1,"REC READ","+8613662626940",,"03/08/29,09:44:02+00" 
123456ABC
+CMGL: 2,"REC READ","+8613902970800","DAVID","02/05/17,14:19:50+00" 
66FE7ECF591A5C116B21FF0C4F6075285AE96ED17684808C80A47D278D348D6488F87684
6211FF0C
4F608F7B67D47684629A6478548C4E0D89C4521976848FD052A8FF0C7ED962115E2667659
6359635
5FEB611FFF0C7136540E4F606E106E106D887626FF0C62404EE5621189818BF4FF1A621172
314F60
FF0C99997682FF01 Tech-Link T&E Limited                                                                     常用 AT 命令手冊
-  16  -
OK
刪除指定簡訊:
AT+CMGD=1
OK
 
                                                 
  5、TCP/IP操作:
    執行 OPEN AT(TCP/IP 協議)程式
AT+WOPEN=1
OK
    啟動 TCP/IP 協議棧
AT+WIPCFG=1
OK
查詢 TCP/IP 協議棧軟體版本
AT+WIPCFG=3
WIP Soft v301 on Open AT OS v313
Sep 28 2007 14:53:28 WIPlib:v3a02 WIPSoft:v2a07
OK
    配置單包資料包最大長度 (最大長度為 1000 位元組)
AT+WIPCFG=2,4,1000
OK
    配置資料 TIMEOUT 時間 (時間為 8 毫秒)
AT+WIPCFG=2,12,8
OK
    儲存協議棧配置資料
AT+WIPCFG=4,1
OK
    開啟資料通道及通訊方式
AT+WIPBR=1,6
OK
    設定接入點(APN)名稱
AT+WIPBR=2,6,11,” CMNET” 
OK
    啟動資料通道
AT+WIPBR=4,6,0
OK
    建立客戶端埠連線
AT+WIPCREATE=2,1,” 166.111.8.238” ,23
OK
  +WIPREADY: 2,1
             +WIPDATA: 2,1,3
    進入資料通訊模式
AT+WIPDATA=2,1,1
    CONNECT