54powerman
一 指令介绍:
1 +CMGW 将消息写入内存(Write Message to Memory)。
描述:该指令将一条消息存储到内存中(SMS-SUBMIT 或 SMSDELIVERS),并返回保存在内存中的位置。输入的“消息文本”或 PDU 可以被发送消息的指令 +CMSS 使用。
语法格式:
文本模式: (<index> is returned in both cases)
AT+CMGW= <oa/da> [,<tooa/toda> [,<stat> ] ] <CR> enter text <ctrl-Z / ESC>
PDU模式:
AT+CMGW= <length> [,<stat>] <CR> give PDU <ctrl-Z / ESC>
返回消息格式:
+CMGW: <index>
或(如果发生错误)
+CMS ERROR: <err>
2 +CMSS 发送存储的消息(Send Message From Storage)
描述:该指令发送存储在<index>指定位置的消息。
语法格式:
AT+CMSS=<index>[,<da> [,<toda>] ]
返回消息格式:
+CMSS : <mr>
或(如果发生错误)
+CMS ERROR: <err>
如果通过<da>传递了一个新的收件人地址,将会取代已保存消息的收件人。
3 参数说明:
<oa/da> : 字符串,源/终消息地址。
<tooa/toda> : 源/终地址类型。129表示普通号码类型,145表示国际号码类型(自动在号码前加“+”)。
<stat>: PDU模式为整型(在+CMGW指令中缺省为2),文本模式为字符串(在+CMGW指令中缺省为"STO UNSENT"),标记消息在内存中的状态,如果 <stat> 被忽略, 被存储的消息被认为是要发送的消息。
<stat> 的取值:
--0: "REC UNREAD"
--1: "REC READ"
--2: "STO UNSENT"
--3: "STO SENT"
<length> : 实际数据的字节长度。
二 实现原理:
基于上面的指令,我们发现可以如下方式提高发送效率——通过+CMGW将要群发的消息保存到内存中,然后一次调用+CMSS将消息发送出去,而无须每次发送重复的PDU信息,减少了通信数据。
三 示例:(以下采用java注释风格进行注释)
AT //测试连接状态
OK //连接正常
AT+CMGF? //查看当前工作模式
+CMGF: 1 //文本模式
OK //消息返回结束
at+cmgf=0; //设置工作模式为PDU模式
OK
AT+CMGF? //查看当前工作模式
+CMGF: 0 //PDU模式
OK
AT+CPMS=? //查看当前首选存储器
+CPMS: ("SM"),("SM"),("MT")
OK
AT+CPMS? //查看当前存储器中的消息
+CPMS: "SM",0,70,"SM",0,70,"MT",0,70 //当前三个存储器中消息数均为0
OK
AT+CMGW=21 //向内存中写入一条消息
> 0891683108100005F011000D916831xxxxxxxxFx00000006C8329BFD0E01^Z
+CMGW: 1 //消息保存成功,其索引<index>为1,记住这个数字,后面要用。
OK
AT+CPMS?
+CPMS: "SM",1,70,"SM",1,70,"MT",1,70 //当前SM 0存储器中有一条消息
OK
at+cmss=1,"13xxxxxxxx1",145 //将消息转发给13xxxxxxxx1
+CMSS: 232 //发送成功,并保存在存储器中,索引是232
OK
at+cmss=1,"13xxxxxxxx2",129 //将消息转发给13xxxxxxxx2
+CMSS: 233
OK //结束
如果有不清楚的地方,可以加入QQ群9040323讨论。