用单片机控制手机收发短信息_单片机论文
关键词:单片机 短 pdu gsm 接口
gsm(global system for mobile communication)系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的一种系统。目前已建成的覆盖全国的gsm数字蜂窝移动通信网,是我国公众移动通信网的主要方式。主要提供话音、短、数据等多种业务。基于gsm短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,能广泛用于远程监控、定位导航、个人通信终端等。由于公众gsm网络在全球范围内实现了联网和漫游,建立上述系统不须再组建专用通信网络,所以具有实时传输数据功能的短消息应用将得到迅速普及。
目前,人们设计的各类dte设备基础上以微处理器为核心,带有rs232/rs485等通信接口,在层上很容易实现与gsm设置(如手机等)的连接。但对sms协议的研究文献却较少,特别是用单片机控制手机的sms(short message service)收发的研究更少。笔者在用单片机设计基于gsm的sms数据采集器时,对怎样用单片机控制手机收发短进行了探讨。
1 串口控制sms的工作原理
单片机与手机一般采用串行异步通信接口,具有红外和通信电缆两种连接方式,通信速度可设定,通常为19200bps。采用红外接口的优点是单片机系统与手机电气隔离,相互不干扰,接口各自独立,使用方便;缺点是通信距离较短,红外传播的方向性对接口相对位置有要求。采用电缆连接时,数据传输的可靠性较好;其主要缺点是接口的电气参数不兼容,设计不当时会对手机的通信质量产生影响。笔者经过实践设计的接口电平转换电路如图1。
gsm的短信息业务sms利用信令信道传输,这是gsm通信网所特有的。它不用拨号建立连接,把要发的信息加上目的地址发送到短信息服务中心,经短消息服务中心完成存储后再发送给最终的信宿。所以当目的gsm终端没开机时信息不会丢失。每个短消息的量限制为160字节。
现在市场上大多数手机均支持gsm07.05规定的at指令集。该指令集是etsi(欧洲通信技术委员会)发布的,其中包含了对sms的控制。利用gsm手机的串行接口,单片机向手机收发一系列的at命令,就能达到控制手机收发sms的目的。etsi的gsm07.05中用于sms收发控制的主要at命令见表1。
表1 常用at指令
gsm07.05 | function(功能) |
ate0 | reset |
at+csms | 选择短服务 |
at+cpms | 选择短内存 |
at+cmgf | 选择短格式 |
at+csca | 短中心地址 |
at+cnmi | 显示新收到的短 |
at+cmgr | 读短 |
at+cmgs | 发送短 |
at+cmgl | 列出sim卡中短 |
at+cmss | 从sim内存中发短 |
at+cmgw | 向sim内存中写入待发短 |
at+cmgd | 删除sim内存中的短 |
at+cscb | 选择蜂窝广播 |
gsm手机通过异步通信接口实现对sms的控制共有三种接入协议:block mode;基于at命令的textmode;基于at命令的pdu mode。pdu模式是发送或接收手机sms信息的一种方法,短正文经过十六进制编码后被传送。目前,pdu mode应用最为广泛,基本上全国所有的电信局都提供支持pdu mode的短消息业务。有些地址则不支持text mode和block mode,这就限制了这两种接入协议的应用,而且pdu mode已有取代block mode的趋势。为了保证系统具有广泛的适用性,本文采用pdu模式收发sms。
pdu相当于一个数据包,它由构成消息(sms)的组成。作为一种数据单元,它必须包含源/目的地址、保护(有效)时间、数据格式、协议类型和正文,正文长度可达140字节,它们都以十六进制表示。pdu结构根据短消息由移动终端发起或以移动终端为目的而不同。
当由移动终端发起时,pdu的格式为:
smsc | pdu类型 | mr | da | pid | dcs | vp | udl | ud(0~140octed) |
当以移动终端为目的时,pdu的格式为:
smsc | pdu类型 | oa | pid | dcs | scts | udl | ud(0~140octed) |
其中,smsc为短消息业务中心地址,da/oa为源/目的地址,pid为协议识别,dcs为数据编码,udl为用户数据长度,ud为用户数据,vp为有效时间,mr指明是发出,scts指明短消息到达业务中心的时间。
2 pdu格式下短的接收
根据设置不同,手机将收到的短消息保存在缓存单元或存入sim卡,单片机从手机中接收短消息实质上就是从sim或缓存中读出。这主要利用at+cmgr和at+cmgl两条指令来完成,其工作过程见图2。
由于不同的厂商对at指令集的解释代码和响应信息不一样,所以单片机首先要确认能否与手机建立起通信,一般用ate指令完成此确认;然后用at+cmgf指令选定短消息的数据格式;在收到手机的正确回答反以at指令完成读出功能。一般用at+cmgl读取以前的信息,在收到手机的ring(振铃)数据时,用at+cmgr读取实时。
以下是笔者设计的物流数据采集系统中用到的接收sms的一个实例,它说明了pdu模式的应用。单片机发送和接收(手机回答)均为ascii码。所用手机为siemens s3508i。
操作过程如下({}内为注释):
发送:ate
手机回答:ok {已建立联接}
发送:at+cmgf=0 {选用pdu格式}
手机回答:ok {允许选择pdu格式}
发送:at+cmgl=2 {列出已有的短}
手机回答:+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个字符)。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值设置不当造成的。