下面基于上述流程,并结合实际实验操作,详解可能用到的AT指令。
3.1 建立GPRS数据传输的调制指令
系统设计的主要思路是单片机通过发送AT指令控制GPRS模块建立无线信道、完成数据传输。GPRS数据传输的实现主要有两种方式:通过域名解析进行GPRS数据传输。AT指令实现通过IP地址进行GPRS数据传输的调制指令如下:
(1)AT+CSQ查询网络质量。实验中在串口调试助手上返回“+CSQ 31,99”,说明网络质量好。通常,CSQ为24以上就认为网络质量良好。
(2)AT+CPIN?查询SLM是否准备好。实验中返回“+CPIN READY”说明SIM准备就绪。
(3)AT+CGREG?查询是否注册成功。实验中返回“+CGREG:0,5”说明注册成功。
以上3步主要是确认当前网络和模块的状态。
(4)AT+CGDCQNT=1,“IP”,“CMNET”设置APN无线接入点。实验中返回:“OK”,说明接入点设置成功。APN(Access Point Name),即“接入点名称”,是在通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络,用来标识GPRS的业务种类,目前分为两大类:CMWAP/UNIWAP/3GWAP和CMNET/UNINET/3GNET。中国联通2G业务WAP浏览器中使用的APN为“UNIWAP”,3G业务WAP浏览器使用的APN为"3GWAP";中国联通的2G上公网使用的APN为“UNINET”,3G业务上网卡及上公网使用的APN为“3GNET”。中国移动上内网的APN为“CMWAP”,上网卡及上公网使用的APN为“CMNET”。实验中使用移动动感地带,APN设置为“CMWAP”。
(5)AT%ETCPIP=“”,“”进行PPP拨号。实验中返回:“OK”,说明拨号成功。
(6)AT%ETCPIP?查询获得本地IP地址,以用DNS服务器地址。实验返回:+ETCPIP:1,“10.73.11.1”,“211.138.24.71”,“211.138.30.66”。其中“10.73.11.1”是本地IP,“211.138.24.71”,“211.138.30.66”是获得的DNS服务器地址。
(7)AT%IPOPEN=“ICP”,“192.168.1.101”,1234(实验时改成自己的IP和端口号)。
(8)AT%IPSEND=“616263313233”。发送abc123。此处由于使用华为公司GTM900-C无线通信模块,数据以16进制发送,所以发送的是abc123的16进制表示。
(9)AT%IPOPEN?查询链路状态。试验中返回:“TCP”,”211.252.207.107”,1234,1026。AT%IPOPEN之后,要等待直到出现CONNECT或者CONNECTERROR之类的提示信息才能做下一步的操作。
(10)AT%IPCLOSE和AT%IPCLOSE=5关闭连接。实际中必须等待连接成功后才能关闭
3.2 数传终端的硬件设计
系统中单片机串口利用MAX232完成TTL/CMOS电平转换后与GPRS模块相连接,实现模块初始化和数据收发。同时扩展串口可与GPS接收机或其他嵌入式系统相连进行数据处理与交换。MCU选用Atmel公司的AT89S51;GPRS模块选用华为公司GTM900-C无线通信模块。
3.3 数传终端的软件实现
系统软件设计的核心部分是单片机与GPRS模块的通信,两者间需定义通信协议、规定帧格式,通过AT指令实现GPRS网络的附着、PDP激活、Internet的接入及数传。系统程序设计采用模块化设计思想,主要分为系统初始化模块、建立连接模块、数据传输模块、断开连接模块4部分。
3.3.1 初始化及通信协议
通信协议功能:实现GPS模块、蓝牙模块、GPRS模块与单片机间的通信。此处信息由GPS、蓝牙采集,经过单片机处理后经GPRS网络发送。
帧格式说明:1,帧头。0xff,一帧的起始位置。2,帧类型。0x01,代表命令帧;0x02,代表数据帧。3,区别码。0x11:模块发送信息给单片机;0x12:单片机发送信息给模块。4,设备号。0x20:单片机;0x21:GPS模块;0x22:蓝牙模块;0x23:GPRS模块。5,内容长度。
0x(xx),xx为适当的值。6,命令类型。0x31:读取目标设备的当前状态;0x32:读取目标设备的数据。7,内容。在不使用它的命令格式中,它的值无意义,为通信方便,在不使用它的命令格式中,规定其值为0x00。8,校验码。从第一个字节开始到Xor的前一字节,共N-1 Byte,作异或运算。
3.3.2 建立连接
为方便程序设计,将建立连接所需的AT命令以字符串形式存放于AT命令缓存区,所需多条AT指令长度不一且发送顺序不可改变,为有效控制每条AT指令、提高CPU利用率需将AT指令缓存区设置为指针数组形式,在建立连接时通过循环调用字符串发送函数将AT命令发送,相邻AT命令间需要2~3 s的延时,每发送完一条AT命令调用一个3 s的延时子程序,然后通过串口中断接收函数接收AT命令返回值来判断连接是否成功。注意,AT命令均以回车符作为结束标志,并以字符串形式传送,因此在定义AT命令缓存区时应注意转义字符的使用。