【STM32 .Net MF开发板学习-27】GPRS通信实现

    技术2025-12-17  10

    GPRSGeneral Packet Radio Service(通用分组无线服务技术)的简称,它是GSM移动电话用户可用的一种移动数据业务。GPRS和以往连续在频道传输的方式不同,是以封包(Packet)式来传输。我们基于.NET Micro Framework 4.1平台,开发了YFSoft.Hardware.GPRS库,通过该库,用户简单调用相关接口,就可以实现GPRS通信。

    我们所选用的硬件为基于SIM300_V7.02模块的开发板,通过串口和.NET MF开发板进行连接(如下图)。

     由于.NET Micro Framework开发板提供的串口为母头,所以和GPRS开发板连接需要制作专门的连接线,简单期间,我用单排针做了三线的交叉连接线(不过最好还是采用专门的接头,下面的连接线插接不是很紧密,容易出现通信故障),如下图。

     硬件平台搭建好后,我们编写GPRS TCP通信程序(UDPTCP类似,这里就不再举例了)。

    核心代码如下:

            public static void Main()

            {                        

                gprs = new GPRS("COM2", 115200, GPRS.GprsType.SIM300_V7_02);

                gprs.DataReceived += new GPRSDataReceivedEventHandler(gprs_DataReceived);

                if ((ret=gprs.Open()) != 0) 

                {

                    Debug.Print("Open Failed:" + ret.ToString());

                    gprs.Close();

                    return;

                }

                 if ((ret = gprs.SetAPN("CMNET")) != 0)

                {

                    Debug.Print("Config Failed:" + ret.ToString());

                    gprs.Close();

                    return;

                }

                Debug.Print("Signal:" + gprs.Signal.ToString());

                if (!gprs.Connect(GPRS.GprsMode.TCP, "221.217.???.???", 8080, 200))

                {

                    Debug.Print("Connect Failed!");

                    gprs.Close();

                    return;

                }

                Debug.Print("IP:" + gprs.LocalIP);

                Debug.Print(gprs.StateString(gprs.State));

                while (true)

                {             

                    Thread.Sleep(1000);

                }

                //gprs.Disconnect();

                //gprs.Close();

            }

            static void gprs_DataReceived(object sender)

            {

                GPRS gprs = (GPRS)sender;

                if (gprs.Available > 0)

                {

                   Debug.Print(gprs.Receive());

                }

            }

            static void key_Click(Button button, KeyPad.ButtonState state, DateTime time)

            {

                string KeyName = "";

                if (state == KeyPad.ButtonState.Up && gprs != null)

                {

                  if (!gprs.Send("Hello MF - " + KeyName, 1000))

                    {

                        Debug.Print("Send Failed!");

                    }

                }

            }

     在开始测试前,我们需要运行一个TCP Server程序(可以从文末提供的连接进行下载),如下图:

    而在VS2010中的.NET Micro Framework代码运行结果如下:

    我们按开发板上的按钮向服务器发送数据,或通过TCPServer程序向开发板发送数据,其运行效果就如上两图所示。

    为了便于用户深入了解YFSoft.Hardware.GPRS库,我们编写了详尽的库函数手册,主要内容如下:

    1【属性】

    1.1  Overtime

    属性:读写

    说明: 超时时间,主要指发送AT指令时,设备的响应时间,该参数和响应时返回OKERRORAT指令配合使用。该时间单位为毫秒,实际使用时超时等待时间有可能会远大于该值。

    1.2  Signal

    属性:只读

    说明:当前手机信号强度。

    范围:

    0 -113 dBm or less

    1 -111 dBm

    2...30 -109... -53 dBm

    31 -51 dBm or greater

    99 not known or not detectable

    1.3  State

    属性:只读

    说明:GPRS状态。

    0 - None,

    1 - IP_INITIAL,

    2 - IP_START,

    3 - IP_CONFIG,

    4 - IP_IND,

    5 - IP_GPRSACT,

    6 - IP_STATUS,

    7 - TCP_CONNECTING,

    8 - UDP_CONNECTING,

    9 - IP_CLOSE,

    10 - CONNECT_OK,       

    1.4  LocalIP

    属性:只读

    说明:本地IP地址。

    1.5  Connected

    属性:只读

    说明:TCP 连接状态。

    1.6  Available

    属性:只读

    说明:当前接收缓冲区已接收的数据长度。

    2【事件】

    2.1 DataReceived

    声明:GPRSDataReceivedEventHandler DataReceived

    参数:object sender – GPRS类的实例

    说明:TCPUDP已接收到数据

    2.2 MessageReceived

    声明:SMSMessageReceivedEventHandler MessageReceived

    参数:object sender – GPRS类的实例

    说明:短信接收通知

    3【方法】

    3.1 GPRS

    声明:GPRS(string portName, int baudRate,GprsType type)

    参数:portName –串口名称,如COM1

          baudRate – 波特率,默认115200

          type – GPRS模块类型,目前支持SIM300_V7_02及和其兼容的模块。

    返回:

    说明:GPRS类的构造函数。

    3.2 SetDebugMode

    声明:void SetDebugMode(bool on)

    参数:on – True 开启Debug模式 False 关闭Debug模式

    返回:

    说明:设置Debug模式,开启后,通信过程中的AT指令的内容会通过Debug.Print函数输出。

    3.3 Open

    声明:int Open()

    参数:

    返回:操作返回值

    0 – 成功

    1 – 串口打开失败

    2 – 设备不在线 AT

    3 – 设置回显失败 ATE1

    4 – 设置IP头显示失败 AT+CIPHEAD=1

    5 – 设置返回信息格式失败 ATV1

    6 – 设置消息格式失败 AT+CMGF=1

    7 – 设置是否输出错误信息模式失败(AT+CMEE=0

    8 – 检测SIM失败(AT+CPIN?

    9 – 注册到移动运营商的网络失败(AT+CREG?

    说明:打开串口,并进行必要的配置。

    3.4 Close

    声明:void Close()

    参数:

    返回:

    说明:关闭串口。

    3.5 SetAPN

    声明:int SetAPN(string apn)

    参数:apn – 接入点的名称,如CMNET

    返回:操作返回值

    0 – 成功

    1 – 注册GPRS业务失败

    2 – 配置接入点失败

    3 – 设置连接模式失败,连接是服务器还是域名 0IP地址

    4 – 设置应用模式失败,如果为1 则发送的AT命令也为数据需要服务端解除,如果为0AT指令会有响应

    说明:配置GPRS必要参数。

    3.6 StateString

    声明:string StateString(GprsState state)

    参数:state – GPRS状态

    返回:GPRS状态的字符串形式

    "IP INITIAL",

    "IP START",

    "IP CONFIG",

    "IP IND",

    "IP GPRSACT",

    "IP STATUS",

    "TCP CONNECTING",

    "UDP CONNECTING",

    "IP CLOSE",

    "CONNECT OK"

    说明: 返回GPRS状态的字符串形式。.NET Micro Framework.NET Framework不同,ToString并不返回enum的名称,而是对应数字的字符。

    3.7 Connect

    声明:bool Connect(GprsMode mode,string ip,int port,int overtime)

    参数:mode –TCPUDP

          ip – 服务器IP地址

          port – 端口

          overtime – Overtime不同,这是等待连接成功的超时时间。

    返回:连接状态 bool 成功 false 失败

          注意,当前状态为IP_IND 时,通信状态也是成功的。

    说明:连接TCPUDP服务器。

    3.8 Disconnect

    声明:void Disconnect ()

    参数:

    返回:

    说明:断开GPRS连接。

    3.9 Send

    声明:bool Send (string buffer,int overtime)

    参数:buffer – 要发送的字符串

          overtime – Overtime不同,这是等待数据发送成功的超时时间。

    返回:发送状态 bool 成功 false 失败

    说明:TCPUDP的服务器发送数据。目前仅支持字符发送。

    3.10 Receive

    声明:string Receive ()

    参数:

    返回:返回TCPUDP服务器发回的数据(一次返回当前缓冲区的全部字符串,最长1024)。

    说明:接收TCPUDP的服务器发送的数据。目前仅支持字符数据接收。

    3.11 SendMessage

    声明:bool SendMessage (sring phone,string msg,int overtime)

    参数:phone – 电话号码

    msg – 要发送的字符串

          overtime – Overtime不同,这是等待数据发送成功的超时时间。

    返回:发送状态 bool 成功 false 失败

    说明:发送短信。目前仅支持字符发送。

    3.12 ReceiveMessage

    声明:string[] ReceiveMessage ()

    参数:

    返回:返回当前未读的短信字符串集合。

    说明:接收短信。目前仅支持字符数据接收。

    4【示例】

    源码/文档:http://www.sky-walker.com.cn/MFRelease/library/YFSoft.Hardware.GPRS.rar

    TCPServer: http://www.sky-walker.com.cn/MFRelease/Tools/YFTCPServer.rar

    MF论坛http://space.cnblogs.com/group/MFSoft/

    MF开发板:http://item.taobao.com/item.htm?id=7117999726

    QQ群:127465602

     

    最新回复(0)