本文简要介绍一下利用GSM模块发送短消息的基本知识,由于个人所学有限及现在GSM模块发展的日新月异,如果有说错的地方还请指点。
关于PUD编码我这里只做了一个简单三种常用编码格式的介绍,如果对PUD有兴趣的,可以参考我博客里的另一篇文章《GSM无线模块短消息PDU 格式说明》
一、短消息编码
短消息内容的最大长度为140个字节。它的编码主要有7位编码, 8位编码,UC2编码三种编码方式。
7位编码:
每个字节只使用低七位,每八个字节为一组,去掉最高位,重新编码为七个字节,因此,7位编码实际上是可以表示到160个字节。但7位编码只能发送0x00 – 0x7F范围内的字符,它一般在发送英文短信时使用。
它的编码原理是:
每8个字节为一组,分别用A,B,C,D,E,F,G代表八个字节,An代表每个字节的位,则8个字节重新编码成如下七个字节(每行为编码后的一个字节):
B1 |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
C2 |
C1 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
D3 |
D2 |
D1 |
C7 |
C6 |
C5 |
C4 |
C3 |
E4 |
E3 |
E2 |
E1 |
D7 |
D6 |
D5 |
D4 |
F5 |
F4 |
F3 |
F2 |
F1 |
E7 |
E6 |
E5 |
G6 |
G5 |
G4 |
G3 |
G2 |
G1 |
F7 |
F6 |
H7 |
H6 |
H5 |
H4 |
H3 |
H2 |
H1 |
G7 |
8位编码:
8位编码即所见即所得的编码方式,也就是无需编码,只需要将二进字串直接发送出去即可。
8位编码方式适用于制定各种基于短消息的通讯协议。
UC2编码:
常用于中文或中英文混合内容发送,只能发送70个字符(因为一个UC2占两个字节)。
由于国内一般的编辑器等多以GB编码居多,因此,如果要发送中文,需要先将中文转换为UC2编码再进行发送。
在手机上,通常的做法是如果全部为英文及半角字符,则以7位编码发送,如果内含有中文,则全部编码为UC2发送.
目前,也出现了一些其他的编码方式,如混合编码方式,这些编码方式根据汉字的内码每个字节都是在0XA1以上的取值范转的特点来制定的,有举趣的可以参考其他资料。
二、短消息发送方式
文本模式:
其实是针对七位编码做的一个封装,它只能用于发送ANSI范围的字符,发送方式经较简单。
(现在好像也出现了可以发送中文的文本模式)
PDU模式:
所有短消息数据发送前都必须组织成PDU的格式,在PDU模式下发送短信比较复杂,需要自行组织PDU内容,但发送方式灵活,可以发送各种数据,也可以自行设定各个PDU字段的内容。
三、常用的短消息AT指令
AT+CMGF=0 //设定短消息的模式为PDU模式
AT+CMGF=1 //设短消息的模式为文本模式
AT+CMGS //发送短消息
AT+CMGL //读取短消息列表
AT+CMGR //读取单个短信消息
AT+CMGD //删除短消息
关于AT指令的具体格式,请参考相关模块的AT手册,我下一篇文章《AT指令发送短消息》中也会详细介绍。