用单片机控制手机收发短信息
手机回答:+CMGL:1,2,,24{1表示信息个数,2表示未发信息,24表示信息总容量}
0D71683108370105F004000D81683179133208F10000026080410033802632184CF682D
95E0DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608
OK
以上这组PDU格式的十六进制字符串,不但包含了短消息的内容,同时包含了发送者的手机号码、短信息中心号码、短消息发送时间等。
下面对信息内容进行分析:
0D:短信息中心地址(号码)长度。
91:短信息中心号码类型,91是TON/NPI。TON/NPI遵守International/E.164标准,指在号码前需加'+'号;此外还可直有其他数值,但91最常用。
683108370105F0:SMSC 短信息所使用的服务中心号码13807310500。它经过十六进制以字节为单位的高低半字节换位处理,号码是奇数的添F,构成一个HEX字节。
04:PDU类型,文件头字节。
0B:主叫号码长度。
81:主叫号码类型。
3179133208F1:0A主叫号码,也经过了处理,实际号码为13973123801。
00:PID,为协议标识。
00:DCS短信息编码类型是GSM Default Alphabet,即由7位ASCII码移位组成8位十六进制码(octet),其方法见表2。
1sthex | B0 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
2ndhex | C1 | C0 | B6 | B5 | B4 | B3 | B2 | B1 |
3rdhex | D2 | D1 | D0 | C6 | C5 | C4 | C3 | C2 |
4thhex | E3 | E2 | E1 | E0 | D6 | D5 | D4 | D3 |
5thhex | F4 | F3 | F2 | F1 | F0 | E6 | E5 | E4 |
6thhex | G5 | G4 | G3 | G2 | G1 | G0 | F6 | F5 |
6thhex | H6 | H5 | H4 | H3 | H2 | H1 | H0 | G6 |
02608041003380:SCTS短信息发送时间,02/06/08/14:00:33.08。
26:UDL经处理后的8位码(octet)短信息字节长度,它小于消息ASCII码的长度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B1983492608:UD 编码后的PDU数据,短信息内容“2002/06/08/13:48ID102OKID103OK ID201FAIL”。
3 短信息的发送
与接收短信息一样,发送时也要先建立联接,传送一些初始化指令,然后发送短消息内容。下面是用SIEMENS S3508i发送一个短信息的例子,内容为:“2002/06/08/13:48 ID102OK ID103OK ID201FAIL”。其ASCII码为:“32030322F30362F30382F31333A34382049443130324F4B
2049443130334F4B2049443230314641494C20”。
发送:ATE {请求建立联接}
手机回答:OK {已建立联接}
发送:AT+CMGF=0 {选择PDU模式}
手机回答:OK
发送:AT+CSMS=0{检测手机是否支持SMS命令}
手机回答:OK
发送:AT+CMGS=52{发送短信息,52 octets(不包括最初9个短信息元字节)}
手机回答:>{允许上传数据,ASCII码是($20H,$2EH)}
发送:0891683108701305F011000B813179133208F10000AA2632184CF682D95
E30DC2B36D3D170A0243106933D97A0243106933D97A02451068B19834926081A
不计最初9个短消息信元字节,本短信息有52字节(104个字符)。javascript:window.open(this.src);" style="cursor:pointer;"/>AT+CMGS仅说明了SMSC信息内容的长度,在收到手机回答的>符号手才发送PDU数据串,并以(CTRL^Z)结束。
PDU数据串的内容说明如下:
08:短信息信元SMSC(短信息中心号码)的字节长度
91:短信息中心号码类型,91表明中心号码是国际通用电话号码。
683108701305F0:短信息中心号码:8613807310500。
11:PDU SMS发送的文件头字节。这里11指正常发送短信息。
00:信息类型。这里00指让手机自动加上主叫号码。
0B:被叫号码长度。
81:被叫号码类型。
3179133208F1:被叫号码13973123801。
00:协议标识。
00:短信息编码类型是GSM Default Alphabet。
AA:短信息被保留的时间为4天,其计算方法依照表3。
VP值 | 短消息有效时间长度 |
0~143 | (VP+1)×5分钟 |
144~167 | 12时+(VP-143)×30分 |
168~196 | 1天×(VP-166) |
197~255 | 1周×(VP-192) |
26:PDU格式短信息编码后字节长度。
32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D
97A02451068B1983492608:编码后的PDU数据,短信息内容为“2002/06/08/13:
48ID102OKID103OK ID201FAIL”。
1A:ASCII码CTRL^Z:报文结束标志。
4 应用情况及常见主要问题的解决
笔者用MCS-51系列的单片机研制了一个手持式的数据采集产品,通过SIMEENS手机,利用GSM的SMS传输数据。经过在国内多个省市较大数量长期广泛的使用,性能良好,没有出现数据丢失的现象。证明上述设计用,性能良好,没有出现数据丢失的现象。证明上述设计是正确的。但在调试和试用阶段也遇到了如下问题:
(1)接口电平
手机的电缆接口电平一般是3V左右,单片机系统的工作电压一般为2.7~5.5V,范围较宽,为保证数据传输的正确,需在接口加电平限制电路,详见图1。
(2)部分城市无法使用
一些城市的SMS平台不允许使用缺省短消息服务中心号码的协议,只需在发送的PDU数据前面几个字节加上中心号码即可,详见本文发送实例。
(3)不能接收已正确发送的短消息
除GSM的SMS信道拥塞原因外,主要是PDU中PID字节的设置,使得收到的信息要存入SIM卡,而SIM卡已满,故不再接收信息。改变PID的设置即可。
(4)收不到开机前的短消息
主要是发送数据时,对短消息有效时间VP值设置不当造成的。