短消息

>作者:汪远
更新时间:2020年8月15日
关键字:SMS 短信

# AT指令

## 选择短消息服务 : AT+CSMS

  • 语法

命令类型

语法

返回

设置命令

AT+CSMS=<service>

+CSMS: <mt>, <mo>, <bm> OK

命令

AT+CSMS?

+CSMS:<service>,<mt>,<mo>,<bm> OK

测试命令

AT+CSMS=?

+CSMS:(<service>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<service>

短消 息服务级别

0

GSM03.40和03 .41(SMS的AT指令语法与GSM07.05 Phase 2中的4.7.0版本兼容 ;支持不需要新指令语法的Phase 2+特性(比如:使用Phase 2+新编码方案的消息路由))

1

GSM03.40 和 03.41(SMS 的 AT 指令语法与 GSM07.05 Phase 2+版本兼容)

128

pdu模 式操作向前兼容于与phase2不一 致的版本。此时会认为短信pdu里 不包含短信中心号(暂不支持)

<mt>

SMS-MO (发短信)

0

不支持

1

支持

<mo>

SMS-MT (收短信)

0

不支持

1

支持

<bm>

小 区广播消息

0

不支持

1

支持

## 短消息优先存储区选择:AT+CPMS 本命令可设置用于读取、存储等操作的存储器,包括, 和。 * 语法

命令类型

语法

返回

设置命令

AT+CPMS=<mem1>[ ,<mem2>[,<mem3>]]

+CPM S:<used1>,<to tal1>,<used2> ,<total2>,<us ed3>,<total3> OK

命令

AT+CPMS?

+CPMS:<mem1>, <used1>,<tota l1>,<mem2>,< used2>,<total 2>,<mem3>,<us ed3>,<total3> OK

测试命令

AT+CPMS=?

+CPM S:(<mem1>取值 列表),(<mem2> 取值列表),(<m em3>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<mem2>

读取和删除消息时 使用的存储器,涉及以 下3个AT指令:AT+CMGL AT+CMGR AT+CMGD

“SM”

SM即SIM 卡

“ME”

ME为模块

<mem2>

写、存储和发送消息时 使用的存储器,涉及以 下2个AT指令:AT+CMSS 和AT+CMGW

“SM”

SM即SIM 卡

“ME”

ME为模块

<mem2>

若没有建立到 TE的路由,则将接收 的消息存储在该存储器

“SM”

SM即SIM 卡

“ME”

ME为模块

< used1><used2><used3>

<mem1,2,3> 中当前存储消息的数量

整数型

<tot al1><total2><total3>

<mem1,2,3> 中可存储的消息的总量

整数型

  • 例子

命 令(→)/ 返 回(←)

实例

解释和说明

AT+CPMS=?

+CPMS: (“SM”,“ME”),(“SM ”,“ME”),(“SM”,“ME”) OK

AT+CPMS?

查询当前优选存储区类型

+CPMS: “SM”,8,50, “SM”,8,50,“SM”,8,50 OK

注 :目前仅支持”SM”存储类型。请使用: AT+CPMS=”SM”,”SM”,”SM” 设置短信存储类型。

短消息中心地址:AT+CSCA

该指令适用于PDU格式和TEXT格式,使用设置指令,可更新级SMSC(Short Message Service Center)地址。通过该地址,可以发送移动终端SMS,TEXT模式下,发送命令和写命令都可使用该项设置;PDU模式下,发送和设置指令也可使用该项设置,但条件是PDU编码后的SMSC地址长度等于0。这里必须说明的是虽然用户可以自行设置短消息的服务中心地址,但不能随心所欲,否则短消息发送不出去,因此在发送短消息之前首先必须搞清楚SIM卡所属的短消息服务中心地址。

  • 语法

命令类型

语法

返回和说明

设置命令

AT+CSCA=<sca>[,<tosca&gt]

OK

查询命令

AT+CSCA?

+CSCA:<sca>,<tosca> OK

测试命令

AT+CSCA=?

OK

  • 参数

参 | 定义 数 |

取 | 对取值的说明 值 |

短 信中心地 址(Short Message Center Address)

字符型;B CD数字(或GSM缺省字母字符)需要转换为字符;格式由指定

短信中 心地址格 式(Type of sca)

8 位整数型(缺省值请参考) 129 ISDN/电话编号方式设计,国家的/国际的未知。 145 ISDN/电话编号方式设计,国际号码。 161 ISDN/电话编号方式设计,国家的号码。 128~255 其他值查阅 GSM 04.08 章节 10.5.4.7

  • 例子

命令(→)/ 返回(←)

实例

解释和说明

AT+CSCA= “+8613010314500”,145

对一个联通的S IM卡设置短信中心号码

OK

AT+CSCA?

查询 下短信中心号码的设置

+CSCA: “+8613010314500”,145 OK

已经设置成功

## 短消息格式:AT+CMGF 设置指令用于指定短消息的输入和发送的格式,即告诉TA输入输出的消息格式是PDU格式还是TEXT格式。

  • 语法

命令类型

语法

返回和说明

设置命令

AT+CMGF=[<mode>]

OK

查询命令

AT+CMGF?

+CMGF: <mode> OK

测试命令

AT+CMGF=?

+CMGF: (<mode>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<mode>

显示消息发送、列表、读 和写指令以及接收到消息 时的主动汇报使用的格式

0

PDU模式,默认值

1

TEXT模式

  • 例子

命令(→)/ 返回(←)

实例

解释和说明

对取值的说明

AT+CMGF?

查询当前模式

PDU模式,默认值

+CMGF: 0 OK

当前模式是PDU模式

TEXT模式

## 设置短信TEXT模式参数:AT+CSMP 文本模式下(即AT+CMGF=1),当向网络侧发送短消息或将短消息存放在存储器中时,使用该设置命令可选择需要的附加参数取值。除此之外,设置命令还可用于设置从SMSC 接收到该短消息时算起的有效期(的取值范围为0… 255)或定义有效期终止的绝对时间(为字符串时)。

  • 语法

命令类型

语法

返回

设置命令

AT+CSMP=[<f o>[,<vp>[,<pid>[,<dcs>]]]]

OK

查询命令

AT+CSMP?

CSMP:<fo>,<vp>,<pid>,<dcs> OK

测试命令

AT+CSMP=?

+CSMP: (<fo >取值列表),(<vp>取值列表), (<pid>取值列表), (<dcs>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<fo>

短 信首字节(First Octet)

17 ,21,33,37,49,53

对 <fo>字节的具体 描述如下(以SMS -SUBMIT为例): b7 b6 b5 b4 b3 b2 b1 b0 RP UDHI SRR VPF RD MTI MTI:消息类型 b1=0&b0=0 表示SMS-DELIVER b1=0&b0=1 表示SMS-SUBMIT 其他消息类型 请参考GSM03.40 VPF:定义短信 有效时间的格式 b4=1 &b3=0:Relative for mat,此时<vp>是 1个字节的整数型 b4=1 &b3=1:Absolute for mat,此时<vp>是 7个字节的整数型 SRR:Status Report Requ est,设置是否需 要短信状态报告 UDHI:User Data Header Indi cator,指示User Data单元是 否有一个header RP:Reply Path,回复路径 RD:Reject Duplicat e,拒绝重复短信

<vp>

短 信有效期(Valid Period)

取值由 字段的VPF决定: 如果V PF=10(Binary), 则为相对模式, 与短信有效时间 的对应关系如下: 0-143(00 to 8F): ( vp + 1) x5分钟 144-167(90 to A7): 12小时 + ( (vp – 143 )×30分钟 168-196(A8 to C4): ( vp – 166 ) x 1 天 197-255(C5 to FF): ( vp – 192 ) x 1 星期 如果VPF=1 1(Binary),则为 绝对模式,是7个 字节的字符型, 表示短信有效期 到期的时间点。

<pid>

TP-协议-标识

0

整数型,具体 请参考GSM03.40

<dcs>

短 信内容编码方案

整数型, 具体请参考GSM03 .38。一般情况下 0-7bit GSM Default 4-8bit Data 8-UCS2

  • 例子

命令(→)/ 返回(←)

实例

解释和说明

AT+CSMP=17,11,0,0

设置TEXT模 式短信发送的各参数: <fo>=17( 缺省),表示MTI=01( binary)=SMS-SUBMIT, 并且VPF=10(binary)= Relative format <vp> =11,表示有效时间为( 11+1)x5分钟=1个小时 <dcs>= 0,表示编码格式是7bit GSM Default

OK

## 控制TEXT模式下短信头信息显示:AT+CSDH 设置命令可控制是否在文本模式下的结果码中显示详细的头信息.

  • 语法

命令类型

语法

返回

设置命令

AT+CSDH=[<show>]

OK

查询命令

AT+CSDH?

+CSDH:<show> OK

测试命令

AT+CSDH=?

+CSDH:<show> OK

  • 参数

参数

定义

取值

对取值的说明

<show>

是否显示头信息

0

对于SMS-DELIVER 和 SMS-SUBMIT 短信,不在+CMT, +CMGL, +C MGR结果码中显示 +CSCA和+CSMP指 令设置的参数(< sca>、<tosca>、 <fo>、<vp> 、<pid>、<dcs>) ,也不显示<leng th>、<toda>或<t ooa>;对于+CMGR 指令结果码中的 SM S-COMMAND,不显 示<pid>、<mn>、 < da>、<toda>、<l ength>、<cdata>

1

在结果码 中显示这些取值

  • 例子

命令(→)/ 返回(←)

实例

解释和说明

对取值的说明

AT+CSDH?

查询 是否显示头信息

对于SMS-DELIVER 和 SMS-SUBMIT 短信,不在+CMT, +CMGL, +C MGR结果码中显示 +CSCA和+CSMP指 令设置的参数(< sca>、<tosca>、 <fo>、<vp> 、<pid>、<dcs>) ,也不显示<leng th>、<toda>或<t ooa>;对于+CMGR 指令结果码中的 SM S-COMMAND,不显 示<pid>、<mn>、 < da>、<toda>、<l ength>、<cdata>

+CSDH: 0 OK

查询结果为:不 显示相关头信息

在结果码 中显示这些取值

AT+CMGR=8

查 询位置为8的短信 ,内容为“good!”

+CMGR: “REC R EAD”,“+86131*** ***56”,,“12/08/ 08,10:43:04+32” Good! OK

查询结果不显示< tooa>,<fo>,<pid >,<dcs>,<sca>,< tosca>,<length>

AT +CNMI=2,2,0,0,0

设 置短信自动内容 直接上报给TE, 不缓存(将+CNM I的第二个参数<m t>设置为2即可)

OK

←(URC)

+CMT: “+86131*** ***56”,,“12/08/ 08,11:09:23+32” Report

发送一个 内容为Report的 短信给模块,上 报内容不显示<f o>、<vp>、<pid> 和<dcs>、 <sca>、<tosca>

AT+CSDH=1

设置<show>= 1,即显示头信息

OK

AT+CMGR=8

仍旧 查询位置8的短信

+CMGR: “REC UNREAD” ,“+86131******5 6”,,“12/08/08,1 0:43:04+32”,145 ,17,0,0,“+86138 00210500”,145,5 Good! OK

查询结果显示< tooa>,<fo>,<pid >,<dcs>,<sca>,< tosca>,<length>

←(URC)

+CMT: “+86131******5 6”,,“12/08/08,1 1:05:45+32”,145 ,17,0,0,“+86138 00210500”,145,7 weather

发送一 个内容为weathe r的短信给模块, 上报内容显示<f o>、<vp>、<pid> 和<dcs>、 <sca>、<tosca>

## 新消息指示:AT+CNMI 该指令用于PDU格式和TEXT格式,当TE处于在用状态时(如:DTR信号处于“ON”状态),使用设置指令,可设置新消息如何从网络侧发送到TE。若 TE 处于待用状态(如:DTR信号处于“OFF”状态),消息接收流程应该按照GSM 03.38 的规定。

  • 语法

命令类型

语法

返回和说明

设置命令

AT+ CNMI=[<mode>[,<mt>[,< bm>[,<ds>[,<bfr>]]]]]

OK

查询命令

AT+CNMI?

+CNMI:<mode> ,<mt>,<bm>,<ds>,<bfr> OK

测试命令

AT+CNMI=?

+CNMI: (<mode>取值列表),( <mt>取值列表),(<bm>取 值列表),(<ds>取值 列表),(<bfr>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<mode>

TA给T E传送短信的模式

0

缓冲TA中的非 请求结果码;若 TA结果码缓冲器 已满,结果码指 示可以缓冲存储 在其他存储空间 或者把最旧的非 请求结果码指示 丢弃,替换为新 接收到的指示。

1

当TA-TE间的链 路被占用(比如: 在线数据模式下 ),丢弃结果码指 示,并拒绝新接 收消息的非请求 结果码。否则, 直接转发给TE。

2

当TA-TE间的 链路被占用(比如 :在线数据模式 下),缓冲TA中的 非请求结果码; 当链路释放后, 把所有结果码发 送给TE。否则, 直接转发给TE。

3

在TA 处于数据 模式的情况下, 使用特定的TA-TE 连接技 术将结果码和数 据同时传给TE。

<mt>

新 短信上报的方式

0

没有SMS-DELIVE R的指示发送给TE

1

若SMS-DELIV ER存储在ME/TA, 存储位置靠非请 求结果码+CMTI: <mem>,<index> 来提示给TE。

2

SMS-DELI VER消息(类别2的 消息和位于消息 等待指示组中的 消息(存储消息) )直接发送到TE。 使用如下指令的 非请求结果码: +CMT:[ <alpha>],<lengt h><CR><LF><pdu> (启用PDU模式)或 者+CMT:<oa>,[ <alpha>],<scts> ,<tooa>[, <fo>,<pid>,<dcs >,<sca>,<tosca> ,<length>]<CR>< LF><data>(启用T EXT模式。斜体部 分是否显示由+CS DH设置命令决定) 说明 :若AT指令接口 作为唯一的显示 设备,ME必须支 持类别0消息和位 于消息等待指示 组中的消息的存 储(丢弃消息)。

3

通过使用< mt>=2定义的非请 求结果码,类别3 的SMS-DELIVER消 息直可接发送到 TE。其他数据编 码方案下的消息 显示结果均遵循 <mt>=1的定义。

<bm>

小区广播短 消息的上报方式

0

无 CBM 指示发送到 TE

2

收到的 CBM使用如下格式 直接发送到TE: +CBM: <length><CR><L F><pdu>(启用PDU 模式)或者 +CBM: <sn>,<mid>,<dc s>,<page>,<page s><CR><LF><data >(启用TEXT模式)

<ds>

短信状 态报告上报方式

0

无SMS-STATUS-RE PORTS发送到TE。

| | | 1 | SMS-STATUS-REPORT消息使用如下格式直接发送到TE: +CDS:<length><CR><LF><pdu>(启用PDU模式)或者 +CDS:<fo>,<mr>,[<ra>],[<tora>],<scts>,

,<st>(启用TEXT模式) 注:

,<st>请参考+CMGR | | <bfr> | | 0 | 当<mode>为1~3时,这条指令所定义的TA缓存中的结果码被发送到TE(在发送之前,OK应该被接收到) | | | | 1 | 当<mode>为1~3时,将清除该指令中定义的TA对非请求结果码的缓冲 |

  • 例子

命令(→)/返回(←)

实例

解释和说明

AT+CNMI=?

查询参数范围

+CNMI: (0-3),(0 -3),(0-3),(0-1),(0-1) OK

1802模块查询结果

AT+CNMI=2,1

查询当前各参数设置

+CNMI: 2,1,0,0,0 OK

←(URC)

+CMTI: “SM”,1

此时收到一个短 信,缓存在中,只用+C MTI上报新短信位置索引

AT+CNMI=2,2 或AT+CNMI=2,2,0,0,0

设置=2,即新 短信不缓存,直接上报

OK

AT+CSMS=1

必须把 +CSMS的第一个参数设置 为1,才支持+CNMA命令

OK

AT+CMGF?

查询当前短信模式

+CMGF: 0 OK

是PDU模式

←(URC)

+CMT: ,24 089168310 8200105F0040D91683129 634152F60 0002180804184422304F7 349B0D

此时收到一个PD U短信,具体分析如下: +CMT: ,24 24-PUD长度,短 信中心号码不算在PDU内 08- Length of SCA,短信 中心地址长度(按字节 数计算,包括91在内) 91- 短信中心地址的TON/NPI 683108200105F0- 短信中心地 址,需要两两反转,反 转后是8613800210500。 04- First Octet,PDU的首字节 0D-源 地址长度(号码长度) 91683129634152F6- 源 地址。需要两两反转, 反转后是8613923614256 00-PID(Protocol Identifier) 00-DCS(Data Coding Scheme),0表示7BIT GSM DEFAULT 21808041844223- SCTS(SM Center Time Stamp),短 信中心时间戳,表示SC 收到短信的时间为:12年 8月8日14:48:24,+8GMT 04- 用户数据的长度 F7349B0D- 7BIT GSM DEFAULT编码的will

AT+CNMA

此时需要+CNMA确认

OK

AT+CMGF=1

设置为TEXT模式

OK

←(URC)

+CMT: “+86131***** *56”,,“12/08/08,11:05 :45+32”,145 ,17,0,0,“+86138002105 00”,145,7 Will-go

收到一 个新短信,是TEXT模式

AT+CNMA

此时需要+CNMA确认

OK

## 新短消息确认:AT+CNMA 使用执行命令,可确认是否正确接收新消息(SMS-DELIVER 或SMS-STATUS-REPORT),该新消息是由 MT 直接发送到 TE 而不缓存。
在同时满足2个条件的情况下,需要通过AT+CNMA给出短信确认: →通过 AT+CSMS=1,将设为1; →通过AT+CNMI命令将设为2或者将设置为1;
在满足上述2个条件后,TE如果在收到短信后没有通过AT+CNMA给MT确认,CNMI的参数和会被重置为0,MT也不再给TE发短信。
  • 语法

命令类型

语法

返回和说明

执行命令

TE XT模式(AT+CMGF=1): AT+CNMA

OK

P DU模式(AT+CMGF=0): AT+CNMA[=<n >[,<length>[<CR>PDUis given<ctrl-Z/ESC>]]]

OK

测试命令

AT+CNMA=?

OK

参数

定义

取值

对取值的说明

<n>

PDU模式下 确认短信的方式

0

该指令 与文本模式定义 的指令执行类似

1

发送 RP -ACK(或正确接收 到的缓冲结果码)

2

发送 RP-ERROR(若 PDU 未给定,ME/TA 将发送 GSM 03.40 TP-FCS 取值设定为 “FF”的 SMS -DELIVER-REPORT 消息(非 请求错误原因))

## 发送短信:AT+CMGS 使用设置指令,可将 SMS(SMS-SUBMIT)从TE发送到网络侧。发送成功后,消息参考值将返回给TE。 * 语法

命令类型

语法

返回和说明

设置命令

文本模式 (AT+CMGF=1)情况下: AT+CMGS= <da>[,<toda>]<CR>text to send<CTRL-Z/ESC>

发送成功则返回: +CMGS:<mr> OK 说明:<CT RL-Z>即0x1A是发送,<E SC>即0x1B是终止发送。

发送失败则返回: +CMS ERROR:<err>

PDU模式 (AT+CMGF=0)情况下: AT +CMGS=<length><CR>PDU to send<CTRL-Z/ESC>

发送成功,返回: +CMGS:<mr> OK

发送失败则返回: +CMS ERROR: <err>

测试命令

AT+CMGS=?

OK

  • 参数

参数

定义

取值

对取值的说明

<da>

目的地 址(Destination Address)

GSM 03.40 TP-Dest ination-Address 中 “地址-取值”字 段,字符型;将 BCD 数值(或缺省 GSM 字母格式的字符) 转 换为当前选择的 TE 字符集 中的字符(请参考 TS 07.07 中的+CSCS 指令);地址类 型由<toda>定义

<toda>

目的 地址类型(Type of <da>)

整数型的 GSM 04.11 TP-Dest ination-Address 中的 8 位“类型-地 址”字段(当<da> 的首字符为+(IRA 43)时, 缺省值为 14 5;否则缺省值为 129)

<length>

PDU短信长度

整 数型。该长度不 将短信中心号码 的长度计算在内

<mr>

消息参考(Mes sageReference)

0~255

整数型的 GSM 03.40 TP-Me ssage-Reference

  • 例子

命令(→)/ 返回(←)

实例

解释和说明

发 送TEXT模式英文短信:

AT+CMGF=1

设置为TEXT模式

OK

AT+CSMP?

查询当 前的TEXT模式短信参数

+CSMP: 17,11,0,0 OK

当前的<dcs>=0 (GSM)

AT+CSCS?

+CSCS: “IRA” OK

AT+CMGS=”139****6785” >HI!

发 英文短信给测试手机。< ctrl-Z>是十六进制的1A 注:139****678 5是发送目的号码,请按 照实际填写,不要照抄

+CMGS: 108 OK

发送成功,<mr>=108

发 送TEXT模式中文短信:

AT+CMGF=1

OK

AT+CSMP?

+CSMP: 17,167,0,0 OK

AT+CSMP=17,167,0,8

修改最后一个参数=8

OK

AT+CMGS=”139****6785” >611F8C22

注:139****678 5是发送目的号码,请按 照实际填写,不要照抄 611 F8C22,是16进制格式。 即:0x610x1F0x8C0x22 是十六进制的1A

+CMGS: 73 OK

发送成功

发 送PDU格式的中文短信:

AT+CMGF=0

设置成PDU模式

OK

AT+CMGS=19 >0011100D91683161450 179F900080004611F8C22 [CTRL+Z]

19 -是PDU字符串的长度(短 信中心单元不包括在内) 00-表示短信中心的长度 为0,即PUD字符串中将 SCA删去,发送短信的时 候直接从SIM卡中取SCA 。该00不计入PDU长度中 11- PDU短信首字节 10- TP-MR,benchmark 0D- 目标地址(DA)长度 91683161450179F9- 目 标地址(收信方号码) 00-Protocol Identifier (PID) 08- Data coding scheme (DCS),8表示UCS2 00-Valid Period (VP) 04- User Data的长度 611F8C22- User Data,发送的短信内容 (本例为中文“感谢”)

+CMGS: 110 OK

发送成功

## 把消息写入存储器:AT+CMGW 使用设置指令,可将SMS(SMS-DELIVER 或 SMS-SUBMIT)从TE发送到存储器<mem2>,并返回已存储消息的存储位置参数。除非指定其他参数,否则,该消息的状态将被设置为“存储未发送”。

  • 语法

命令(→)/ 返回(←)

实例

解释和说明

命令类型

语法

返回和说明

设置命令

TEXT 模式下(AT+CMGF=1): AT+CMGW [=<oa/da>[,<tooa/toda >[,<<stat>]]]<CR>text is entered<ctrl-Z/ESC>

成功,返回: +CMGW: <index> OK

失败则返回: +CMS ERROR: <err>

PDU 模式下(AT+CMGF=0): AT+CMGW= <length>[,<stat>]<CR> PDU is given<ctrl-Z/ESC>

成功,返回: +CMGW: <index> OK

失败则返回: +CMS ERROR: <err>

测试命令

AT+CMGW=?

返回: OK

  • 参数

参数

定义

取值

对取值的说明

<da>

目的地 址(Destination Address)

GSM 03.40 TP-Dest ination-Address 中 “地址-取值”字 段,字符型;将 BCD 数值(或缺省 GSM 字母格式的字符) 转 换为当前选择的 TE 字符集 中的字符(请参考 TS 07.07 中的+CSCS 指令);地址类 型由<toda>定义

<toda>

目的 地址类型(Type of <da>)

整数型的 GSM 04.11 TP-Dest ination-Address 中的 8 位“类型-地 址”字段(当<da> 的首字符为+(IRA 43)时, 缺省值为 14 5;否则缺省值为 129)

<oa>

源地址(Origi natingAddress)

GSM 03.40 TP-Orig inating-Address 中 “地址-取值”字 段,字符型;将 BCD 数值(或缺省 GSM 字母格式的字符) 转 换为当前选择的 TE 字符集 中的字符(请参考 TS 07.07 中的+CSCS 指令);地址类 型由<tooa>定义

<tooa>

源 地址类型(Type of <oa>)

整数型的 GSM 04.11 TP-Orig inating-Address 中的 8 位“类型-地 址”字段(当<oa> 的首字符为+(IRA 43)时, 缺省值为 14 5;否则缺省值为 129)

<length>

PDU短信长度

整 数型。该长度不 将短信中心号码 的长度计算在内

<stat>

短信状态

REC NREAD

已接收的未 读消息(TEXT模式 下,即+CMGF=1)

REC READ

已接收的已 读消息(TEXT模式 下,即+CMGF=1)

STO UNSENT

存储未发 送消息(TEXT模式 下,即+CMGF=1)

STO SENT

存储已发 送消息(TEXT模式 下,即+CMGF=1)

0

已接收的未 读消息(PDU模式 下,即+CMGF=0)

1

已接收的已 读消息(PDU模式 下,即+CMGF=0)

2

存储未发 送消息(PDU模式 下,即+CMGF=0)

3

存储已发 送消息(PDU模式 下,即+CMGF=0)

  • 例子

命令(→)/返回(←)

实例

解释和说明

存储 一个TEXT短信(英文):

AT+CMGF=1

设置为TEXT模式

OK

AT+CSCS=”GSM”

或AT+CSCS=”IRA”

OK

AT+CSMP=17,167,0,0

OK

AT+CMGW=”139****6785” >HI!<ctrl-Z>

+CMGW: 6 OK

返回 的index=6,表示该短信 在存储区的位置是第6个

存储 一个TEXT短信(中文):

AT+CMGF=1

设置为TEXT模式

OK

AT+CSCS=”UCS2”

设置AT命令中 字符的编码格式为UCS2

OK

AT+CSMP=17,167,0,8

Dcs=8,表示短信 存放的格式为UCS2编码

OK

AT+CMGW=”003 00310030003000380036” >611F8C22<ctrl-Z>

D A=10086(UCS2编码格式) 内容为 “感谢”(UCS2编码格式)

+CMGW: 7 OK

该 短信存在index=7的位置

存储一个PDU短信:

AT+CMGF=0

设置为PDU格式

OK

AT+CMGW=19 >0011100D91683161450 179F900080004611F8C22 [CTRL+Z]

短信内容为“感谢”

+CMGW: 8 OK

该 短信存在index=8的位置

## 从存储器发送短信:AT+CMSS 使用设置指令,可将消息存储器中,位置取值参数为的消息发送到网络侧(SMS-SUBMIT 或 SMS-COMMAND)。若给定 SMS-SUBMIT 消息的新接收地址参数,应使用该参数,而不能使用已存储消息的参数。发送成功后,参考值 将返回给 TE。

  • 语法

命令类型

语法

返回和说明

设置命令

AT+CMSS=<index>[,<da>[,<toda>]]

+CMSS:<mr> OK

测试命令

AT+CMSS=?

OK

  • 参数

参数

定义

取值

对取值的说明

<index>

待发送短信 在存储器的地址

整 数型;关联存储 器支持的地址编 号范围内的取值

<da>

目的地 址(Destination Address)

GSM 03.40 TP-Dest ination-Address 中 “地址-取值”字 段,字符型;将 BCD 数值(或缺省 GSM 字母格式的字符) 转 换为当前选择的 TE 字符集 中的字符(请参考 TS 07.07 中的+CSCS 指令);地址类 型由<toda>定义

<toda>

目的 地址类型(Type of <da>)

整数型的 GSM 04.11 TP-Dest ination-Address 中的 8 位“类型-地 址”字段(当<da> 的首字符为+(IRA 43)时, 缺省值为 14 5;否则缺省值为 129)

<mr>

消息参考(Mes sageReference)

0~255

整数型的 GSM 03.40 TP-Me ssage-Reference

  • 例子

命令(→)/返回(←)

实例

解释和说明

AT+CMGF=1

设置为TEXT模式

OK

AT+CSCS=”GSM”

或AT+CSCS=”IRA”

OK

AT+CMSS=6

发送+CMGW实例中 被+CMGW存储起来的编号 为6的短信,接收方的号 码仍为+CMGW存入的号码

+CMSS: 11 OK

发送成功,<mr>=11

AT +CMSS=7,“13192310560”

发送+CMGW实例中被+CM GW存储起来的编号为7的 中文短信,并且改变接 收方号码为13192310560

+CMSS: 12 OK

发送成功

## 短信链路控制命令:AT+CMMS SET命令控制短信中继协议(RP)层的链接的连续性。当使能了该特性,并且网络也支持时,发送连续多条短信时RP层的链接将一直存在,而无需在每两条短信之间再进行拆链和建链的过程,从而发送的速度将快很多。 READ命令返回当前的参数值。
TEST命令返回命令支持的参数值。
  • 语法

命令类型

语法

返回和说明

设置命令

AT+CMMS= [<n>]

OK

查询命令

AT+CMMS?

+CMMS: <n> OK

测试命令

AT+CMMS=?

+CMMS: (<n>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<n>

状态

0

禁能

1

使能一 次。当前一条发 送短信的返回和 后一条发送短信 的间隔小于1-5秒 (具体的取值取 决于MS的实现) ,RP链接保持不 断。当超过了1- 5秒时,RP链接中 断,并且<n>值将 自动设置回0,即 不再继续使能。

2

一直使能 。当前一条发送 短信的返回和后 一条发送短信的 间隔小于1-5秒( 具体的取值取决 于MS的实现),R P链接保持不断。 当超过了1-5秒时 ,RP链接中断, 并且<n>值仍保持 为2,即继续使能

## 读短信:AT+CMGR 使用设置指令,可将消息存储器中,索引为的消息返回到TE。若该消息处于“已接收未读”状态,则将其状态变为“已接收已读”。

  • 语法

命令类型

语法

返回和说明

设置命令

AT+CMGR=<index>

PDU模式下 (AT+CMGF=0),返回: +C MGR:<stat>,[<alpha>], <length><CR><LF><pdu> OK

| | | 如果是TEXT模式(AT+CMGF=1): 对于SMS-DELIVER: +CMGR:<stat>,<oa>,[<alpha>],<scts>[,<tooa>,<fo>,<pid>,<dcs>,<sca>,<tosca>,<length>]<CR><LF><data> OK 对于SMS-SUBMIT: +CMGR:<stat>,<da>,[<alpha>][,<toda>,<fo>,<pid>,<dcs>,[<vp>],<sca>,<tosca>,<length>]<CR><LF><data> OK 对于SMS-STATUS-REPORT: +CMGR:<stat>,<fo>,<mr>,[<ra>],[<tora>],<scts>,

,<st> OK 对于SMS-COMMAND: +CMGR:<stat>,<fo>,<ct>[,<pid>,[<mn>],[<da>],[<toda>],<length><CR><LF><cdata>] OK 注:以上斜体字是否显示由+CSDH的设置决定 | | 测试命令 | AT+CMGR=? | OK |

  • 参数

参数

定义

取值

对取值的说明

<da>,<oa>

请 参考AT+CMGW条目

<toda>,<tooa>

<length>

<stat>

<alpha>

MT 电话簿记录对应< da>或<oa>的显示

字符型

<pid>

Protocol Identification

请 参考AT+CSMP条目

<fo>

PDU短信首字节

<vp>

Valid Period

<dcs>

Data Coding System

<scts>

短信中 心时间戳(Short Message Center Time Stamp)

时 间-字符串型GSM 03.40 TP-Service-Ce ntre-Time-Stamp

<dt>

Discharge time

时 间-字符串型GSM 03.40 TP-D ischarge-Time, 与<st>成对出现

<st>

Status

整数型GSM 03.40 TP-Status 描述 上一个已经发送 的MO短信的状态

<ct>

Command Type

整数型GSM 03.40 TP-Comman d-Type,缺省为0

<ra>

接收地址

字符串型的GSM 03.40 TP-Re cipient-Address 地址-取值字段

<cdata>

TEXT模式下SM S-COMMAND的返回

TP-C ommand-Data(GSM 03.40)

<mr>

消息参考(Mes sageReference)

TP-Messag e-Reference(GSM 03.40), 整数型

<mn>

消息序号

TP-Mes sage-Number(GSM 03.40), 整数型

  • 例子

命令(→)/ 返回(←)

实例

解释和说明

用TEXT模式读取短信:

AT+CMGF=1

设置为TEXT模式

OK

AT+CSCS=”GSM”

+CSCS命令决定了读取 的短信内容的编码方式

OK

AT+CMGR=6

读取index=6的英文短信

+CMGR: “REC REA D”,“+86139*******9”,“ 12/03/30,20:40:31+32” HI! OK

这个 英文短信的内容为”HI”

AT+CSCS=”UCS2”

读中文短 信内容需要设置为UCS2

OK

AT+CMGR=1

读一个中文短信

+CMGR: “REC READ ”,“002B00380036003100 330031003600320033003 10030003200360033”,,“ 13/01/06,10:11:47+32” 8C228C22 OK

内容为8C228C22( 中文“谢谢”的UCS2码)

用 PDU模式读取一个短信:

AT+CMGF=0

设置为PDU模式

OK

AT+CMGR=9

读取index=9的短信

+CMGR: 0,,24 089 1683108200105F0240D91 683161450179F90008218 0904121102304611F8C22 OK

## 列举短消息:AT+CMGL 使用设置指令,可将查询优选消息存储器中,状态值为的消息显示在 TE中。若该消息处于“已接收未读”状态,则将其状态变为“已接收已读”。

  • 语法

命令类型

语法

返回和说明

设置命令

AT+CMGL=<stat>

如果是 PDU模式(AT+CMGF=0) ,则<stat>取值如下: 0已接收的未读消息 1 已接收的已读消息 2 已存储的未发送短信 3 已存储的已发送短信 4 所有短信 且返回如下: +CMGL: <index>,<stat>,[<alph a>],<length><CR><LF>< pdu>< CR><LF>+CMGL:<index>, <stat>,[<alpha>],<len gth><CR><LF><pdu>[…]] OK

| | | 如果是TEXT模式(AT+CMGF=1),则<stat>取值如下:“REC UNREAD”已接收的未读消息 “REC READ” 已接收的未读消息 “STO UNSENT”已存储的未发送短信 “STO SENT”已存储的已发送短信 “ALL”所有短信 注意:对于以上取值,所有字母要大写。双引号可加可不加。对于SMS-DELIVER或SMS-SUBMIT,则返回(注:斜体字是否显示由+CSDH的设置决定): +CMGL:<index>,<stat>,<oa/da>,[<alpha>],[<scts>][,<tooa/toda>,<length>]<CR><LF><data>[<CR><LF>+CMGL:<index>,<stat>,<da/oa>,[<alpha>],[<scts>][,<tooa/toda>,<length>]<CR><LF><data>[…]] OK 对于SMS-STATUS-REPORT,则返回: +CMGL:<index>,<stat>,<fo>,<mr>,[<ra>],[<tora>],<scts>,

,<st>[<CR><LF>+CMGL:<index>,<stat>,<fo>,<mr>,[<ra>],[<tora>],<scts>,

,<st>[…]] OK 对于SMS-COMMAND,则返回: +CMGL:<index>,<stat>,<fo>,<ct>[<CR><LF>+CMGL:<index>,<stat>,<fo>,<ct>[…]] OK | | 测试命令 | AT+CMGL=? | +CMGL: (<stat>取值列表) OK |

  • 参数

参数

定义

取值

对取值的说明

本词条的所有参数在以前的命令中都有详细叙述,这里不再赘述

  • 例子

命令(→)/ 返回(←)

实例

解释和说明

用TEXT模式读取短信:

AT+CMGF=1

设置为TEXT模式

OK

AT+CSCS=”GSM”

+CSCS命令决定了读取 的短信内容的编码方式

OK

AT+CMGR=6

读取index=6的英文短信

+CMGR: “REC READ”,“+86139”,“ 12/03/30,20:40:31+32” HI! OK

这个 英文短信的内容为”HI”

AT+CSCS=”UCS2”

读中文短 信内容需要设置为UCS2

OK

AT+CMGR=1

读一个中文短信

+CMGR: “REC READ ”,“002B00380036003100 330031003600320033003 10030003200360033”,,“ 13/01/06,10:11:47+32” 8C228C22 OK

内容为8C228C22( 中文“谢谢”的UCS2码)

用 PDU模式读取一个短信:

AT+CMGF=0

设置为PDU模式

OK

AT+CMGR=9

读取index=9的短信

+CMGR: 0,,24 089 1683108200105F0240D91 683161450179F90008218 0904121102304611F8C22 OK

## 删除短消息:AT+CMGD 使用设置指令,可删除优选消息存储器中,位置号码参数为的消息。

  • 语法

命令类型

语法

返回和说明

设置命令

AT+CMGD=<index>

返回: OK 说明:这 个设置命令是删除<mem >1中索引为index的短信

AT+C MGD=<index>,<delflag>

返回: OK 说明:这 个设置命令是删除所有 状态为<delflag>的短信 。当<delflag>不等于0 时,<index>参数被忽略

测试命令

AT+CMGD=?

+C MGD:(<index>取值列表 ),(<delflag>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<index>

短信位置索引

整 数型;关联存储 器支持的地址编 号范围内的取值

<delflag>

删除 类型,整数型。 当<delflag>=1, 2,3,4时,<ind ex>参数将被忽略

0

删除 指定位置号码为 <index>的短消息

1

删除优选存储器 其中所有已读的 短消息,保留未 读短消息和已存 储的MO短消息( 无论是否发送) MO:Mobile Originated

2

删 除优选存储器中 所有已读的消息 和已发送的MO短 消息,保留未读 的以及未发送的 已存储MO短消息

3

删除优选存储 器中所有已读的 短消息,已发送 和未发送的已存 储MO短消息,保 留未读的短消息

4

删除优选存储 器中包括未读在 内所有的短消息

  • 例子

命令(→)/返回(←)

实例

解释和说明

AT+CPMS=”SM”

设置存储区为SIM

OK

AT+CMGD=1

删除掉index=1的短信

OK

AT+CMGD=1,4

所有的短信都被删除掉

OK

## 小区广播短消息类型选择:AT+CSCB

  • 语法

命令类型

语法

返回和说明

设置命令

AT+CSCB= [<mode>[,<mids>[,<dcss>]]]

返回: OK

查询命令

AT+CSCB?

返回: +CSCB:<mode>,<mids>,<dcss> OK

测试命令

AT+CSCB=?

返回: +CSCB: (<mode>取值列表) OK

  • 参数

参数

定义

取值

对取值的说明

<mode>

0

接受由<mids >和<dcss>指定的消息类型

1

不接受由<mids >和<dcss>指定的消息类型

<mids>

所有可能的 CBM 消息标识的组合

字符型

<dcss>

所有可能的CBM 数据编码方案的组合

字 符型,缺省值为空字符串

# LUAT开发相关接口 相关示例,请参考:raw-latex:script_LuaTask_VX.X.X:raw-latex:demo:raw-latex:`\sms`

### sms.send(num, data, cbFnc, idx) 发送短信

  • 参数

传入值类型

释义

string

num, 短信接收方号码,ASCII码字符串格式

string

d ata,短信内容,GB2312编码的字符串

function

可选参数,默认 为nil,cbFnc,短信发送结果异步返 回时的用户回调函数,回调函数的调 用形式为:cbFnc(result,num,data) num:短 信接收方的号码,ASCII码字符串格式 d ata:短信内容,GB2312编码的字符串

number

可 选参数,默认为nil,idx,插入短信 发送缓冲表的位置,默认是插入末尾

  • 返回值

    result,返回true, 表示调用接口成功(并不是短信发送成功,短信发送结果,通过sendcnf返回,如果有cbFnc,会通知cbFnc函数);false,表示调用接口失败

  • 例子

sms.send("10086","test",cbFnc)

### sms.setNewSmsCb(cbFnc) 设置新短信的用户处理函数

  • 参数

传入值类型

释义

function

cbFnc,新短信的用户处理函数

  • 返回值

    nil

  • 例子

sms.setNewSmsCb(cbFnc)

# 相关资料以及购买链接

相关开发板购买链接

Air724UG开发板

Air724 开发板使用说明

相关软件资料下载

常见问题

https://doc.luatos.wiki/628/ ## 1、PDU格式发送短信问题 *** AT版本发送短信时先查看自己的SIM卡是否设置中心地址,发送短信时发送PDU包这一步不要勾选换行符和16进制