以模块MC55为例,MC55是SIEMENS(西门子)公司推出的GSM/GPRS三频模块,主要为语音传输、短消息和GPRS数据业务提供无线接口。MC55集成了完整的RF射频电路和GSM的基带处理器,十分适合开发一些基于GSM/GPRS的无线应用产品,如监控、调度、车载、遥控、远程测量、定位和导航等领域的系统和产品,应用范围十分广泛。用户只需投入少量的研发费用,就可以在较短的研发周期内集成自己的应用系统。
常用的AT命令如下表所示:
功能名称 |
AT命令 |
解释 |
厂家认证 |
AT+CGMI |
获得厂家的标识 |
模式认证 |
AT+CGMM |
查询支持频段 |
修订认证 |
AT+CGMR |
查询软件版本 |
生产序号 |
AT+CGSN |
查询IMEI序号 |
查询IMSI |
AT+CIMI |
查询国际移动电话支持认证 |
卡的认证 |
AT+CCID |
查询SIM的序列号 |
关闭电源 |
AT+CPOE |
暂停模块的运行 |
报告错误 |
AT+CMEE |
报告模块设备错误 |
拨号命令 |
ATD |
拨打电话号码 |
挂机命令 |
ATH |
挂机 |
回应呼叫 |
ATA |
当模块被呼叫时回应呼叫 |
关机命令 |
AT+CPOF |
停止GSM软件堆栈和硬件层 |
声音控制 |
AT+CRSL |
设定电话铃声的声音级别 |
时钟管理 |
AT+CCLK |
设置或获得真实时钟 |
警报管理 |
AT+CALA |
设定警报日期 |
设定电话机能 |
AT+CFUN |
选择移动站点的机能水平 |
网络连接设置 |
AT^SICS |
创建Internet连接到GPRS |
网络服务设置 |
AT^SISS |
指定服务器类型 |
开启网络服务 |
AT^SISO |
启动GPRS连接 |
关闭网络服务 |
AT^SISC |
关闭GPRS连接 |
读网络数据 |
AT^SISR |
读取GPRS接收数据 |
写网络数据 |
AT^SISW |
通过GPRS发送数据 |
命令格式:AT^SICS: <conProfileId>, <conParmTag>, <conParmValue>
conProfileId指连接平台,可以建立0-5共6个不同的连接。conParmTag指连接参数,包括user、passwd、apn等,conParmValue指提供的连接类型,包括GPRS0、CSD(电路交换数据业务)、none(清空)三种方式。
举例说明如下:
AT^SICS: 0,"conType","GPRS0" //连接平台0,连接方式是GPRS
AT^SICS: 0,"user","nd" //连接平台0,设置用户名
AT^SICS: 0,"passwd","nd" //连接平台0,设置密码
AT^SICS: 0,"apn","cmnet" //连接平台0,设置APN
AT^SICS: 1,"conType","" //连接平台1,空
AT^SICS: 2,"conType","" //连接平台2,空
AT^SICS: 3,"conType","" //连接平台3,空
AT^SICS: 4,"conType","" //连接平台4,空
AT^SICS: 5,"conType","" //平连接台5,空
命令格式:AT^SISS=<srvProfileId>, <srvParmTag>, <srvParmValue>
Srvprofield是服务配置ID,可以建立0-9共10个配置ID,如说可以用AT^SISS将配置0作socket,配置1作HTTP,配置2作FTP等,然后要启用哪个服务,就用AT^SISO=0或1或2打开哪个服务,要关掉哪个服务就用AT^SISC=0或1或2关闭哪个服务。一般的数据传输用的都是socket服务, SISS指令里的ConID是指当前服务调用哪个连接配置ID,连接配置ID可以设定6个,可以用AT^SICS=0,apn,cmnet或者AT^SICS=1,apn,cmwap设定不同的APN,根据不同的应用,调用不同的连接配置。
举例说明如下:
AT^SISS: 0,"srvType","Socket" //第0个服务平台,服务类型为socket
AT^SISS: 0,"conId","0" //第0个服务平台,使用的连接平台为0
AT^SISS: 0,"address","" //第0个服务平台,目前设备的地址为空
AT^SISS: 1,"srvType","" //第1个服务平台
AT^SISS: 2,"srvType","" //第2个服务平台
AT^SISS: 3,"srvType","" //第3个服务平台
AT^SISS: 4,"srvType","" //第4个服务平台
AT^SISS: 5,"srvType","" //第5个服务平台
AT^SISS: 6,"srvType","" //第6个服务平台
AT^SISS: 7,"srvType","" //第7个服务平台
AT^SISS: 8,"srvType","" //第8个服务平台
AT^SISS: 9,"srvType","" //第9个服务平台
GPRS通讯模块MC55在使用时,需要进行通讯模块的初始化设置,校验用户名和密码,设置TCP/IP的地址与端口等。初始化时,需要MCU通过串行口按顺序给模块发送以下AT指令,设置模块及网络工作参数。
at^sics=0,conType,GPRS0 //设置GPRS工作模式
at^sics=0,user,cm //用户名称
at^sics=0,passwd,gprs //密码
at^sics=0,apn,cmnet //网络接入点名称
at^siss=1,srvType,socket // 设置服务类型为socket
at^siss=1,conId,0 //I.D.
at^siss=1,address,"socktcp://219.238.229.74:3000" //设置服务器地址及端口
at^siso=1 //打开端口,开始工作
命令格式:AT^SISO=<srvProfileId>
启动GPRS连接。
命令格式:AT^SISC=<srvProfileId>
关闭GPRS连接。
命令格式:AT^SISR=<srvProfileId>, <reqReadLength>
通过GPRS发送数据,实际上是通过串行口把数据写入到GPRS通讯模块,然后由GPRS模块发送到指定的IP端口。发送时需要按照以下顺序进行操作。
写串口:at^sisw=0,10 // 使用通道0, 发送10字节的数字
读串口:^SISW: 0, 10 // 网络响应
写串口:12312312342342342345 // 发送数据
读串口:OK // 接收响应 OK
读串口:^SISW: 0, 1 //接收网络响应,收到则已经发送成功
命令格式:AT^SISW=<srvProfileId>, <reqWriteLength>
接收GPRS的数据,即接收已经连接上的服务器发来的数据,可以通过串行口从GPRS模块中读取,按以下顺序进行操作:
读串口:^SISR: 0, 1 //接收到该信息则准备接收数据
写串口:at^sisr=0,20 //发送需要接收的数据长度
读串口:^SISR: 0, 20 //返回实际的数据长度
读串口:12312312342342342345 //所接收的数据
读串口:OK //接收成功
进行GPRS通信首先需要与服务器建立GPRS连接,即实现GPRS登陆。在登陆前需要使用AT指令对无线通信模块MC55进行初始化设置,设置内容包括连接方式、服务类型、接入点名称、服务器地址及端口。初始化完成后即可开启网络服务,模块会自动登录到服务器的相应端口上,登陆完成后就可以进行数据通信了。
具体实现程序如下所示:
(1)OutPut("at^sics=1,contype,gprs0/r/0"); //连接平台1,设置网络连接类型为gprs方式
// void OutPut(char *strings)函数的功能是通过串口向MC55输出数据
检测到通信模块返回“OK”则设置成功。
(2)OutPut("at^sics=1,apn,cmnet"); //设置apn为cmnet
检测到通信模块返回“OK”则设置成功。
(3)OutPut("at^siss=2,srvtype,socket/r/0"); //第2个服务平台,设置服务类型为socket
检测到通信模块返回“OK”则设置成功。
(4)OutPut("at^siss=2,conid,1/r/0"); //第2个服务平台,使用的连接平台为1
检测到通信模块返回“OK”则设置成功。
(5)OutPut("at^siss=2,address,socktcp://219.238.229.74:1200");//设置服务器地址及端口
检测到通信模块返回“OK”则设置成功。
(6)OutPut("at^siso=2/r/0"); //打开网络服务,MC55登陆到服务器相应的端口上
检测到通信模块返回“OK”则设置成功。
(7)OutPut("at^sisw=2,10/r/0"); //使用平台2向服务器发送10字节的数据包
if(strstr(buffer,"^SISW:")!=0) //检测到模块返回数据“^SISW:”后通过模块将需要发送的数据发送到服务器相应端口上
OutPut("1234567890/r/0"); //发送数据包
通过GPRS发送数据,实际上是通过串行口把数据写入到GPRS通讯模块,然后由GPRS模块发送到指定的IP端口。
(8)写串口:at^sisr=0,20 //发送需要接收的数据长度
读串口:^SISR: 0, 20 //返回实际的数据长度
读串口:12312312342342342345 //接收的数据
接收GPRS的数据,即接收已经连接上的服务器发来的数据,可以通过串行口从GPRS模块中读取。
(9)OutPut("at^sisc=2/r/0"); //关闭网络服务,MC55从服务器断开
转自http://blog.csdn.net/sdwuyulunbi/archive/2009/10/29/4743075.aspx