GPRS AT 指令中文( 1 )
FUNCTIONS AT COMMANDS DETAILS
厂家认证 AT+CGMI 获得厂家的标识
模式认证 AT+CGMM 查询支持频段
修订认证 AT+CGMR 查询软件版本
生产序号 AT+CGSN 查询 IMEI NO.
TE 设置 AT+CSCS 选择支持网络
查询 IMSI AT+CIMI 查询国际移动电话支持认证
卡的认证 AT+CCID 查询 SIM 卡的序列号
功能列表 AT+GCAP 查询可供使用的功能列表
重复操作 A/ 重复最后一次操作
关闭电源 AT+CPOF 暂停模块软件运行
设置状态 AT+CFUN 设置模块软件的状态
活动状态 AT+CPAS 查询模块当前活动状态
报告错误 AT+CMEE 报告模块设备错误
键盘控制 AT+CKPD 用字符模拟键盘操作
拨号命令 ATD 拨打电话号码
挂机命令 ATH 挂机
回应呼叫 ATA 当模块被呼叫时回应呼叫
详细错误 AT+CEER 查询错误的详细原因
DTMF 信号 AT+VTD , +VTS +VTD 设置长度, +VTS 发送信号
重复呼叫 ATDL 重复拨叫最后一次号码
自动拨号 AT%Dn 设备自动拨叫号码
自动接应 ATS0 模块自动接听呼叫
呼入载体 AT+CICB 查询呼入的模式, DATA or FAX or SPEECH
增益控制 AT+VGR , +VGT +VGR 调整听筒增益, +VGT 调整话筒增益
静音控制 AT+CMUT 设置话筒静音
声道选择 AT+SPEAKER 选择不同声道( 2 对听筒和话筒)
回声取消 AT+ECHO 根据场所选择不同回声程度
单音修改 AT+SIDET 选择不同回声程度
初始声音参数 AT+VIP 恢复到厂家对声音参数的默认设置
信号质量 AT+CSQ 查询信号质量
GPRS 指令中文( 2 )
网络选择 AT+COPS 设置选择网络方式(自动 / 手动)
网络注册 AT+CREG 当前网络注册情况
网络名称 AT+WOPN 查询当前使用网络提供者
网络列表 AT+CPOL 查询可供使用的网络
输入 PIN AT+CPIN 输入 PIN 码
输入 PIN2 AT+CPIN2 输入第二个 PIN 码
保存尝试 AT+CPINC 显示可能的各个 PIN 码
简单上锁 AT+CLCK 用户可以锁住状态
改变密码 AT+CPWD 改变各个 PIN 码
选择电话簿 AT+CPBS 选择不同的记忆体上存储的电话簿
读取电话簿 AT+CPBR 读取电话簿目录
查找电话簿 AT+CPBF 查找所需电话目录
写入电话簿 AT+CPBW 增加电话簿条目
电话号码查找 AT+CPBP 查找所需电话号码
动态查找 AT+CPBN 查找电话号码的一种方式
用户号码 AT+CNUM 选择不同的本机号码(因网络服务支持不同)
避免电话簿初始化 AT+WAIP 选择是否防止电话簿初始化
选择短消息服务 AT+CSMS 选择是否打开短消息服务以及广播服务
短消息存储 AT+CPMS 选择短消息优先存储区域
短消息格式 AT+CMGF 选择短消息支持格式( TEXT or PDU )
保存设置 AT+CSAS 保存 +CSCA and +CSMP 参数设置
恢复设置 AT+CRES 恢复 +CSCA and +CSMP 参数设置
显示 TEXT 参数 AT+CSDH 显示当前 TEXT 模式下结果代码
GPRS AT 指令( 3 )
新消息提示 AT+CNMI 选择当有新的短消息来时系统提示方式
读短消息 AT+CMGR 读取短消息
列短消息 AT+CMGL 将存储的短消息列表
发送短消息 AT+CMGS 发送短消息
写短消息 AT+CMGW 写短消息并保存在存储器中
从内存中发短消息 AT+CMSS 发送在存储器中保存的短消息
设置 TEXT 参数 AT+CSMP 设置在 TEXT 模式下条件参数
删除短消息 AT+CMGD 删除保存的短消息
服务中心地址 AT+CSCA 提供短消息服务中心的号码
选择广播类型 AT+CSCB 选择系统广播短消息的类型
广播标识符 AT+WCBM 读取 SIM 卡中系统广播标识符
短消息位置修改 AT+WMSC 修改短消息位置
短消息覆盖 AT+WMGO 写一条短消息放在第一个空位
呼叫转移 AT+CCFC 设置呼叫转移
呼入载体 AT+CLCK 锁定呼入载体以及限制呼入或呼出
修改 SS 密码 AT+CPWD 修改提供服务密码
GPRS AT 指令中文( 4 )
呼叫等待 AT+CCWA 控制呼叫等待服务
呼叫线路限定 AT+CLIR 控制呼叫线路认证
呼叫线路显示 AT+CLIP 显示当前呼叫线路认证
已连接线路认证 AT+COLP 显示当前已连接线路认证
计费显示 AT+CAOC 报告当前费用
累计呼叫 AT+CACM 累计呼叫费用
累计最大值 AT+CAMM 设置累计最大值
单位计费 AT+CPUC 设置单位费用以及通话计时
多方通话 AT+CHLD 保持或挂断某一通话线路(支持多方通话)
当前呼叫 AT+CLCC 列出当前呼叫
补充服务 AT+CSSN 设置呼叫增值服务
非正式补充服务 AT+CUSD 非正式的增值服务
保密用户 AT+CCUG 选择是否在保密状态
载体选择 AT+CBST 选择数据传输的类型
选择模式 AT+FCLASS 选择发送数据 or 传真
服务报告控制 AT+CR 是否报告提供服务
结果代码 AT+CRC 报告不同的结果代码(传输方式、语音或数据)
设备速率报告 AT+ILRR 是否报告当前传输速率
协议参数 AT+CRLP 设置无线连接协议参数
其他参数 AT+DOPT 设置其他的无线连接协议参数
传输速度 AT+FTM 设置传真发送的速度
接收速度 AT+FRM 设置传真接收的速度
HDLC 传输速度 AT+FTH 设置传真发送的速度(使用 HDLC 协议)
GPRS AT 指令中文( 5 )
HDLC 接收速度 AT+FRH 设置传真接收的速度(使用 HDLC 协议)
停止传输并等待 AT+FTS 停止传真的发送并等待
静音接收 AT+FRS 保持一段静音等待
固定终端速率 AT+IPR 设置数据终端设备速率
其他位符 AT+ICF 设置停止位、奇偶校验位
流量控制 AT+IFC 设置本地数据流量
设置 DCD 信号 AT&C 控制数据载体探测信号
设置 DTR 信号 AT&D 控制数据终端设备准备信号
设置 DSR 信号 AT&S 控制数据设备准备信号
返回在线模式 ATO 返回到数据在线模式
结果代码抑制 ATQ 是否模块回复结果代码
DCE 回应格式 ATV 决定数据通信设备回应格式
默认设置 ATZ 恢复到默认设置
保存设置 AT&W 保存所有对模块的软件修改
自动测试 AT&T 自动测试软件
回应 ATE 是否可见输入字符
回复厂家设置 AT&F 软件恢复到厂家设置
显示设置 AT&V 显示当前的一些参数的设置
认证信息 ATI 显示多种模块认证信息
区域环境描述 AT+CCED 用户获取区域参数
自动接收电平显示 AT+CCED 扩展到显示接收信号强度
一般显示 AT+WIND
在 ME 和 MSC 之间数据计算模式 AT+ALEA
数据计算模式 AT+CRYPT
键盘管理 AT+EXPKEY
PLMN 上的信息 AT+CPLMN
模拟数字转换测量 AT+ADC
模块事件报告 AT+CMER
选择语言 AT+WLPR 选择可支持的语言
增加语言 AT+WLPW 增加可支持的语言
读 GPIO 值 AT+WIOR
写 GPIO 值 AT+WIOW
放弃命令 AT+WAC 用于放弃 SMS 、 SS and PLMN
设置单音 AT+WTONE 设置音频信号( WMOi3 )
设置 DTMF 音 AT+WDTMF 设置 DTMF 音( WMOi3 )
AT 指令操作 GPRS Modem 实现网络传输
GPRS Moderm 实现 TCP 连接的 AT 指令主要操作步骤:
AT/r
AT+ccid/r // 检测是否装有 SIM 卡
AT+cgmr/r // 检测软件版本, 5.0 以上的才有 GPRS 功能支持
AT+csq/r // 检测信号质量,确定是否可以登陆上网络;若返回 10--31 , 0 之间的信号数字则继续,
如果信号是 99 , 99 ,则应该考虑不停的的让模块去搜寻网络。
AT+CGCLASS="B"/r // 设置模块工作类型
AT+CGDCONT=1,"IP","CMNET"/r
AT+CGATT=1 // 激活 PDP ,获得 IP
AT+CIPCSGP=1,"CMNET"/r
AT+CIPSTART="TCP",211.147.18.79,1433/r
AT+CIPSEND/r
> // 返回 “>” 后输入要传输的数据,再发送 CTRL+Z, 即将所要发送的数据发送到指定 IP 的服务器上
AT+CIPCLOSE/r // 只有在 TCP/UDP 处于 CONNECT OK 的状态下才返回 OK, 否则返回 ERROR
AT+CIPSHUT/r // 关闭移动场景
通过串口发送 AT 的过程
( 1 )设置串口参数
( 2 )打开串口
( 3 )发送 AT 指令,然后等待模块响应
( 4 )接收相应,然后处理
( 5 )通讯完成,关闭串口
(原创) AT 发送中文短信 流程
AT
OK
AT+IPR=115200
OK
AT+FLO=0
OK
AT+CSCA?
+CSCA: "+8613800100500",145 // 短信服务中心号码(北京)
OK
AT+CMGF=0 //PDU 模式发送
OK
AT+CSCS="UCS2" //Unicode 编码
OK
AT+CMGS=019 // 代表发送字节长度短消息中心号码和目
// 的号码包含其中中文用 unicode 编码
> 0011000D91683119509808f0000801044f60597d // 手机号码 13910589800
+CMGS: 93
0011000D91685109114796F0000801044F60597D
0011000D91685123818000F1000801044F60597D
0011000D91683110259505F0000801044F60597D
13015259500
5 。编程技巧
18701557905
发送完 AT 指令后,一般需要等待模块做出响应。串口通讯是一种流式通讯,通讯另一方可能正常相应,也有可能不能正常响应,这是就需要对这种情况进行处理。
( 1 )可以设置读超时,如果对方不能正常响应,则系统会认为与对方通讯失败
( 2 )如果对方成功响应,那么还需要对对方相应的信息进行判断,确定串口数据流中的那些是相应自己 AT 指令的数据。一般地,期望的响应都有一定的特征信息,可以通过判断相应的数据是否包含特征信息来判断。
例如,一般当发送一个 AT 指令后,通常会有一个 OK 作为相应的结尾,那么就可以通过相应数据是否包含 OK 判断针对自己的响应是否结束。
例如,如果 GSM/GPRS 模块认为指令有问题,或者执行指令出错,会返回 ERROR ,那么程序就不能一直等待自己期望的特征数据出现,如遇到 ERROR ,就应该返回报错。
( 3 )即使对方能够成功响应,有时候对方对指令的处理需要一定的时间,这时候并不能通过一个 read 函数将所有的相应数据都读回。因此就需要将每次读回的数据缓存起来,然后不断的读取数据,直到期望的特征数据出现为止。
( 4 )在不断的读取数据时,应该在每次读取之间 sleep 一小会,以保证下次尽量能够读到数据。
基于 GSM 模块实现中文短信息发送
苗雨 孟显勇
( 吉林大学珠海学院,广东 珠海 519041)
摘 要 短信的发送需要 GSM 模块和处理器协作完成, GSM 模块与 ARM 处理器通过串口连接,处理器向串口发送接收 AT 命令与 GSM 模块形成通信回路。中文短信的发送采用 PDU 模式,根据 PDU 模式标准形成 PDU 发送包,实现短信发送。本文根据无线电话项目的短信发送模块的实现开发流程编写。
关键词 GSM ; SMS ; AT 命令; PDU
1 引言
2007 年全国手机短信发送量达到 5921 亿条,日均发送量超过 16 亿条。短信的应用也扩展到各个领域,本文介绍了多媒体电话短消息发送模块的实现原理和具体的实现方法。由短消息发送流程可以了解短信息发送过程的每一个环节,对短信息安全,屏蔽垃圾短信有一定的作用。
2 GSM 模块及 GSM 模块的短信功能
GSM(Global System for Mobile communication) 系统是目前基于时分多址技术的移动通讯体制中比较成熟、完善、应用最广泛的一种系统。目前已建成的覆盖全国的 GSM 数字蜂窝移动通信网,是我国公众移动通信网的主要方式,主要提供话音、短信息、数据等多种业务。基于 GSM 短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,能广泛用于远程监控、定位导航、个人通信终端等。由于公众 GSM 网络在全球范围内实现了联网和漫游,建立上述系统不需再组建专用通信网络,所以具有实时传输数据功能的短消息应用将得到迅速普及。
SMS 是由 Etsi 所制定的一个规范 (GSM 03.40 和 GSM 03.38) 。它可以发送最多 160 个字符,当使用 7-bits 编码的时候, 8-bit 编码 ( 最多 140 个字符 ) 通常无法直接通过手机显示,通常被用来作为数据消息。 16-bit 信息 ( 最多 70 个字符 ) 被用来显示 Unicode(UCS2) 文本信息,可以被大多数的手机所显示。一个以 class 0 开头的 16-bit 的文本信息将在某些手机上作为 Flash SMS 显示。
3 实现中文短信发送
GSM 模块支持两种方式来发送和接收 SMS 短信息,文本模式和 PDU(Protocol Description Unit) 模式,文本模式只能发送普通的 Ascill 字符,要发送图片,铃声,其它编码的字符 ( 如中文 ) 就必须采用 PDU 模式。
PDU 模式中,可以采用三种编码方式来编码要发送的内容,分别是 7bit 编码, 8bit 编码, 16bit 编码, 7bit 编码用于发送普通的 Ascill 字符, 8bit 编码通常用于发送数据信息,如图片和铃声,而 16bit 编码用于发送 Unicode 字符。三种编码可以发送的最大字符分别是 160 , 140 , 70 。
发送中文短信要采用 PDU 模式的 Unicode 编码方式,具体步骤描述如下:
(1)GB2321 编码到 Unicode 编码的转换。
● 操作系统提供函数 ( 有些系统不提供,如 deltaos) 。
● 手动查表。
(2)Unicode 编码到 16bit 编码的转换。
● 得到的 Unicode 编码后,还需要转换成 PDU 的 16bit 编码才可以正确的发送。
● 这个转换过程中 Unicode 编码最开始的 0xffff 标志要去掉,在 0xffff 之后的内容才是真正的 Unicode 字符。
● Unicode 是双字节,根据系统如果是小端字节序 (little - endian) ,也就是说,存储的时候,先存低位再存高位,例如: “ 中 ” 的 Unicode 编码是 0x4E2D ,储存的时候是 2D4E ,在转换到 16bit 编码的时候要转换顺序,如果是大端字节序 (big - endian) 如本系统,就不需要转换了。
● 正确计算 16bit 编码的消息体长度, PDU 规范中,包括消息体本身。
● 正确设置 TYPE , TP - MR , TP - PID , TP - VP ,在下文 PDU 格式中,依次设置为: 11 , 00 , 00 , 08 , 01( 以上都为 16 进制数 ) 。
(3) 形成标准的发送包。
3.1 短信发送过程分析
处理器通过向串口发送接收 AT 命令与 GSM 模块形成通信回路,通过 AT 命令实现对 GSM 模块的基本操作,用于发送短信的 AT 命令如表 1 所示。
发送短信可用文本模式和协议数据单元模式 (PDU , protocol data unit) 。大多手机不支持文本模式,只支持 PDU 模式。 PDU 模式是把短信正文经十六进制编码后被传送,其编码总体上分为三个部分:服务中心号、接收方手机号、短信内容,如 “ 你好 ” 短信 PDU 编码是这样的 ( 其中 xyz 是手机号具体数字 ) : 0011000B8131258698yxFz000801044F60597D ,其意义如表 2 所示。
表 1 发送短信使用的 AT 命令
AT 命令 功能 例子
AT+CMGF 设置短信的格式, 0=PDU 模式 ( 默认 ) , 1= 文本模式 AT+CMGF=0
AT+CSCA 获取服务中心的号码 AT+CSCA?
AT+CMGS 发送 AT+CMGS= YYY ;其中 YYY 为 TPDU 的十进制长度 AT+CMGS=19
接收到 “>” 响应后发送短信内容
表 2 发送数据分析
接收号部分 短信内容部分
00 11 00 0B 8131208698yxFz 000801 04 4F605970
00 : SCA 以 00 写入,应用默认的服务中心地址,该服务中心地址用 AT+CSCA 指令写入
11 : PDU 类型
00 : TP - MR 表示 MR 消息参考
0B :接收号字符数
81 :表示是国内代码
31258698yxFz :接收号 编码时长度为奇数末尾追加 “F” 每两个字节进行位置交换,即 13526889xyz
00 : TP - PID 协议标示
08 : TP - DCS 数据编码方式
01 : TP - VP 有效期
04 : UDL 用户数据长度,用十六制表示
4F60597D :短信内容的 UNICODE 编码
如果发送成功,串口返回以下结果:
+CMGS : X 这里的 X 是个数字
OK
3.2 发送短信程序流程及主要函数
1) 接口函数 _SendMessage()
2) 发送短信主体函数 Send_SMS()
3) 数据处理函数 MakeSSP()
函数 MakeSSP 是短信发送部分重要函数,把 struct _SMS _appUnit 结构中的数据转换成 struct _SMS_SUBMIT_PDU 结构,形成发送包。
4 总结
以上详述了短信发送模块实现的步骤,本文内容通过测试。可以实现短信的发送,响应时间等参数符合要求。但如果要连续发送短信,或短信发送量要求比较高的情况还需要设计数据库实现数据的管理。对于短信发送的信息安全问题,将是下一个阶段的研究重点。
手机发短信常用 AT 指令
实用的 AT 指令
单片机和 GSM 引擎之间采用 AT 指令实现互相之间的通信,因此有必要了解一下 AT 指令的格式和几条常用的指令。更详细的资料可以参考 GSM07.05 和 GSM07.07 规范。
单片机发出的 AT 指令用来建立通信链路, AT 指令集的命令格式帧都以 AT 开头,下面是几个常用的 AT 指令。
1 .设置短消息中心
AT+CSCA=“+8613800270500” 回车 ( 具体的号码由当地的运营商决定。 )
2 .接收短消息
+CMTI : “SM” , X (X 表示接收短消息的 SIM 卡存储号码 )
AT+CMGR=X 回车 ( 从 X 存储区读短消息 )
AT+CMGD=X 回车 ( 从 X 存储区删除短消息 )
3 .发送短消息
AT+CMGF=1 回车 ( 采用文本格式发送,如用 PDU 格式,则 AT+CMGF=0)
AT+CMGS=“+8613xxxxxxxxx” 回车
> 输入短消息。 Crtl+Z 结束并发送。
4 .重要的指令
ATZ;E 回车 Echo OFF
ATZ;E1 回车 Echo ON
AT+CREG ?回车 回答 x(X=2 脱网, X=1 注册, X=0 状态不明 )
AT+COPS ?回车 表示 SIM 卡是否被网络接受
AT+COPS=? 回车 显示所有可用的网络。
5 .建立语音呼叫
AT+CREG ?回车 ( 是否网络注册 )
ATD13xxxxxxxxx ;回车 ( 语音呼叫和数据呼叫建立的区别在于号码后所接的分号上 )
6 .改变并保存参数
AT+IPR=2400 回车 ( 改变 RS232 口的速率至 2400bps)
AT&W 回车 ( 保存已改参数 )
7 .输入 PIN 码
AT+CPIN=“xxxx”
通信链路建立以后,单片机就可以发出信息单元帧了,信息的帧格式如下:
其中标志帧开始的帧头为十六进制的 10H 和 02H ,标志信息结束的是 10H 和 03H ,最后二位是数据部分按 16 位求和以后取模的结果,用做校验位。对于数据位,为了避免出现错误的结束标志,规定每出现一个 10H 码字以后,后面插入一个空字符 00H 。接收端如果收到信息以后,就要相应地去掉空字符。如果接收端收到的数据部分和 BCS 部分按照 16 位相加以后的结果不等于 0 ,就表示传输出现错误,所收到的信息就要丢掉。