DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 83|回复: 0
打印 上一主题 下一主题

基于单片机控制来实现手机收发短信息

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-28 10:35:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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表示信息总容量}
  0D71683108370105F004000D81683179133208F1000002608041003380263218
4CF682D
  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码的长度。
  32184CF682D95E30DC2B36D3D170A0243106933D97A0243106933D97A0245
1068B1983492608: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)%26;#215;5分钟
  144~167
  12时+(VP-143)%26;#215;30分
  168~196
  1天%26;#215;(VP-166)
  197~255
  1周%26;#215;(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值设置不当造成的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2026-3-17 20:43 , 耗时 0.100069 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表