西门子GPRS模块开发详解

来源:互联网 发布:天龙八部暗器炼毒数据 编辑:程序博客网 时间:2024/05/01 18:07

以模块MC55为例,MC55SIEMENS(西门子)公司推出的GSM/GPRS三频模块,主要为语音传输、短消息和GPRS数据业务提供无线接口。MC55集成了完整的RF射频电路和GSM的基带处理器,十分适合开发一些基于GSM/GPRS的无线应用产品,如监控、调度、车载、遥控、远程测量、定位和导航等领域的系统和产品,应用范围十分广泛。用户只需投入少量的研发费用,就可以在较短的研发周期内集成自己的应用系统。


常用的AT命令如下表所示:

功能名称

AT命令

解释

厂家认证

ATCGMI

获得厂家的标识

模式认证

ATCGMM

查询支持频段

修订认证

ATCGMR

查询软件版本

生产序号

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发送数据

接着是与GPRS有关的AT指令详解

  • (1)AT^SICS(Internet Connection Setup Profile)

命令格式: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,空

  • 2AT^SISS(Internet Service Setup Profile) 

命令格式: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 //打开端口,开始工作

  • (3)AT^SISO(Interner Service Open)

命令格式:AT^SISO=<srvProfileId>

启动GPRS连接。

  • 4AT^SISC(Internet Service Close) 

命令格式:AT^SISC=<srvProfileId>

关闭GPRS连接。

  •  5AT^SISR(Internet Service Read Data)

命令格式:AT^SISR=<srvProfileId>, <reqReadLength>

通过GPRS发送数据,实际上是通过串行口把数据写入到GPRS通讯模块,然后由GPRS模块发送到指定的IP端口。发送时需要按照以下顺序进行操作。

    写串口:at^sisw=0,10           // 使用通道0, 发送10字节的数字

    读串口:^SISW: 0, 10           // 网络响应

    写串口:12312312342342342345   // 发送数据

    读串口:OK                     // 接收响应 OK

    读串口:^SISW: 0, 1            //接收网络响应,收到则已经发送成功

  • (6)AT^SISW(Internet Service Write Data)

命令格式:AT^SISW=<srvProfileId>, <reqWriteLength>

接收GPRS的数据,即接收已经连接上的服务器发来的数据,可以通过串行口从GPRS模块中读取,按以下顺序进行操作:

     读串口:^SISR: 0, 1        //接收到该信息则准备接收数据

     写串口:at^sisr=0,20       //发送需要接收的数据长度

     读串口:^SISR: 0, 20       //返回实际的数据长度

     读串口:12312312342342342345 //所接收的数据

     读串口:OK             //接收成功

 

 

 

最后是案例分析

进行GPRS通信首先需要与服务器建立GPRS连接,即实现GPRS登陆。在登陆前需要使用AT指令对无线通信模块MC55进行初始化设置,设置内容包括连接方式、服务类型、接入点名称、服务器地址及端口。初始化完成后即可开启网络服务,模块会自动登录到服务器的相应端口上,登陆完成后就可以进行数据通信了。

具体实现程序如下所示:

    (1OutPut("at^sics=1,contype,gprs0/r/0");   //连接平台1,设置网络连接类型为gprs方式

                        // void OutPut(char *strings)函数的功能是通过串口向MC55输出数据

    检测到通信模块返回“OK”则设置成功。

    (2OutPut("at^sics=1,apn,cmnet");           //设置apn为cmnet

检测到通信模块返回“OK”则设置成功。

3OutPut("at^siss=2,srvtype,socket/r/0");  //2个服务平台,设置服务类型为socket

检测到通信模块返回“OK”则设置成功。

4OutPut("at^siss=2,conid,1/r/0");         //2个服务平台,使用的连接平台为1

检测到通信模块返回“OK”则设置成功。

5OutPut("at^siss=2,address,socktcp://219.238.229.74:1200");//设置服务器地址及端口

检测到通信模块返回“OK”则设置成功。  

6OutPut("at^siso=2/r/0");         //打开网络服务,MC55登陆到服务器相应的端口上

检测到通信模块返回“OK”则设置成功。

7OutPut("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

原创粉丝点击