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

GPRS是General Packet Radio Service(通用分组无线服务技术)的简称,它是GSM移动电话用户可用的一种移动数据业务。GPRS和以往连续在频道传输的方式不同,是以封包(Packet)式来传输。我们基于.NET Micro Framework 4.1平台,开发了YFSoft.Hardware.GPRS库,通过该库,用户简单调用相关接口,就可以实现GPRS通信。
我们所选用的硬件为基于SIM300_V7.02模块的开发板,通过串口和.NET MF开发板进行连接(如下图)。
stm32开发板,【STM32 .Net MF开发板学习-27】GPRS通信实现
 由于.NET Micro Framework开发板提供的串口为母头,所以和GPRS开发板连接需要制作专门的连接线,简单期间,我用单排针做了三线的交叉连接线(不过最好还是采用专门的接头,下面的连接线插接不是很紧密,容易出现通信故障),如下图。
stm32开发板,【STM32 .Net MF开发板学习-27】GPRS通信实现
 硬件平台搭建好后,我们编写GPRS TCP通信程序(UDP和TCP类似,这里就不再举例了)。
核心代码如下:
        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程序(可以从文末提供的连接进行下载),如下图:
stm32开发板,【STM32 .Net MF开发板学习-27】GPRS通信实现
而在VS2010中的.NET Micro Framework代码运行结果如下:
stm32开发板,【STM32 .Net MF开发板学习-27】GPRS通信实现
我们按开发板上的按钮向服务器发送数据,或通过TCPServer程序向开发板发送数据,其运行效果就如上两图所示。
为了便于用户深入了解YFSoft.Hardware.GPRS库,我们编写了详尽的库函数手册,主要内容如下:

1【属性】

1.1  Overtime

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

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类的实例
说明:TCP或UDP已接收到数据

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 _disibledevent=>参数: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 – 设置连接模式失败,连接是服务器还是域名 0是IP地址
4 – 设置应用模式失败,如果为1 则发送的AT命令也为数据需要服务端解除,如果为0则AT指令会有响应
说明:配置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 –TCP或UDP
      ip – 服务器IP地址
      port – 端口
      overtime – 和 Overtime不同,这是等待连接成功的超时时间。
返回:连接状态 bool 成功 false 失败
      注意,当前状态为IP_IND 时,通信状态也是成功的。
说明:连接TCP或UDP服务器。

3.8 Disconnect

声明:void Disconnect ()
参数:
返回:
说明:断开GPRS连接。

3.9 Send

声明:bool Send (string buffer,int overtime)
参数:buffer – 要发送的字符串
      overtime – 和 Overtime不同,这是等待数据发送成功的超时时间。
返回:发送状态 bool 成功 false 失败
说明:向TCP或UDP的服务器发送数据。目前仅支持字符发送。

3.10 Receive

声明:string Receive ()
参数:
返回:返回TCP或UDP服务器发回的数据(一次返回当前缓冲区的全部字符串,最长1024)。
说明:接收TCP或UDP的服务器发送的数据。目前仅支持字符数据接收。

3.11 SendMessage

声明:bool SendMessage (sring phone,string msg,int overtime)
参数:phone – 电话号码
msg – 要发送的字符串
      overtime – 和 Overtime不同,这是等待数据发送成功的超时时间。
返回:发送状态 bool 成功 false 失败
说明:发送短信。目前仅支持字符发送。

3.12 ReceiveMessage

声明:string[] ReceiveMessage ()
参数:
返回:返回当前未读的短信字符串集合。
说明:接收短信。目前仅支持字符数据接收。

4【示例】


Tags:  开发板之家 dsp开发板 arm开发板 开发板 stm32开发板

延伸阅读

最新评论

发表评论