短信相关
发送短信的流程就是配置短信模式->配置字符集->下发发送命令->等待,提示符->发送正文/PDU ->发送ctrl+z –>等待结果
TEXT 格式
AT+CMGF=1 //设置短信为文本模式
PDU格式
PDU模式不仅能发送中文短信,也能发送英文短信。PDU收发短信有三种编码可用:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,即英文短信,最多可发送160字符。8-bit编码通常用于发送数据消息。UCS2编码用于发送Unicode字符,可发送中文字符,最多发送70字符。
AT+CMGS=0//设置短信为PDU 0:PDU,1:文本模式
发送PUD(SUBMIT-PDU)
数据格式:
| SCA | PDU-Type | MR | DA | PID | DCS | VP | UDL | UD |
|---|---|---|---|---|---|---|---|---|
| 1-12 | 1 | 1 | 2-12 | 1 | 1 | 0,1,7 | 1 | 0-140 |
SCA 短消息服务中心号码
PDU-Type 协议数据单元类型(1字节)
发送时
BIT 7 6 5 4 3 2 1 0 参数 RP UDHI SRR VPF VPF RD MTI MTI MTI 2bit:消息类型,00表示收,01表示发
RD 1bit:重复信元丢弃。0通知服务中心碰到同源、同目的地、同样的MR(短消息序号)的短消息接受;
VPF 2bit:有效期限格式。00 VP不存在; 10 VP区存在用一个字节表示,是相对值;01保留; 11存在,半个字节表示,绝对值。
SRR 2bit:状态报告要求。
MR 所有成功的短信发送参考数目(0..255)
DA 接收方地址(手机号码 半字节倒序编码)
PID 协议标识
DCS 编码方法和消息类别 (UCS2编码0等级为08H,7bit编码是00H)
VP 有效期
- 0 到 143 $(V + 1) \times 5$ 分钟 5 分钟 到 12 小时
- 144 到 167 $12$ 小时 $+ (V - 143) \times 30$ 分钟 12.5 小时 到 24 小时
- 168 到 196 $(V - 166) \times 1$ 天 2 天 到 30 天
- 197 到 255 $(V - 192) \times 1$ 周 5 周 到 63 周
例如:
//向15050850677发送一条短信,内容“Test”
//0011000D91685150800576F70000C404D4F29C0E
//向15050850677发送一条短信,内容“你好”
//0011000B815150800576F70008C4044F60597D
| SCA | PDU-Type | MR | DA | PID | DCS | VP | UDL | UD |
|---|---|---|---|---|---|---|---|---|
| 1-12 | 1 | 1 | 2-12 | 1 | 1 | 0,1,7 | 1 | 0-140 |
| 00 | 11 | 00 | 0D91685150800576F7 | 00 | 00 | C4 | 04 | D4F29C0E |
| 00 | 11 | 00 | 0B815150800576F7 | 00 | 08 | C4 | 04 | 4F60597D |
关键字段
DA/OA:接收方与发送方地址
DA与OA编码方式是一样的 2-12个8位位组
例如:0D91685150800576F7
| DA LEN | DA TYPE 短信服务中心号码的类型 | DA ADDR 存储目的地址号码 |
|---|---|---|
| 0D (一个字节,表示DA ADDR长度) | 91(国际型) | 685150800576F7 占用DA LEN/2字节 |
短信配置流程
//1.设置短信编码格式为PDU
AT+CMGF=0
/**
* 2. 设置短信上报方式 <mode>,<mt>,<bm>,<ds>,<bfr>
<mode> 2 缓存通知 当串口忙(如处于数据模式)时,模块会暂时缓存通知,待回到指令模式后再发送
<mt> 1 存储索引通知 收到短信后,模块将其存入 SIM 卡或 Flash,然后通过串口主动发送+CMTI: "ME", index
与 2(直接把短信内容吐到串口)相比, 1具有以下的优势,
数据安全:短信先存盘,避免由于串口波特率太高或单片机/嵌入式系统处理不及时导致的数据丢失。
解析简单:你的程序只需要监听 +CMTI 这个特征字符串,然后根据索引去读取,逻辑更加解耦。
防止干扰:如果短信很长或者是 PDU 格式,直接吐出大量数据可能会干扰到正在进行的 AT 指令交互。
<bm> 0 不广播 不向TE终端主动发送小区广播消息
<ds> 0 无状态报告 不主动发送短信状态报告(即确认对方是否收到的回执)
<bfr> 0 清除缓存 模块在设置此指令时,如果缓冲区有待发的通知,直接清除。
*/
AT+CNMI=2,1,0,0,0
打电话
上网
//查询命令 响应+CREG: <n>,<stat>[,<lac>,<ci>[,<AcT>]]
AT+CREG?