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

简介:

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 – 设置应用模式失败,如果为则发送的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






本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/495129,如需转载请自行联系原作者

相关文章
|
安全
.Net MF V4.0开源前的代码整理
已经有好长一段时间没有更新博客了,一是去美国总部和台湾出差用了不少时间,二是做.Net MF代码整理又花了近一个月的时间。不过令人欣慰的是,目前.Net MF V4.0的相关代码整理已经告一段落,就等着下一步的开源了
628 0
|
内存技术
【玩转.Net MF – 01】Flash远程读写
目前在PC远程访问设备Flash,也就是部署TinyCLR和下载应用程序
537 0
|
内存技术
【玩转.Net MF – 02】让PC成为MF的鼠标键盘
通过扩展我以前为.Net MF开发的WinForm库(参见我以前的文章《开源System.Windows.Forms库,让.Net Micro Framework界面开发和上位机一样简单》),增加一个输入代理层,就可以实现虚拟鼠标和键盘输入。
562 0
|
网络协议
【玩转.Net MF – 03】远程文件查看器
做过WinCE或Windows Mobile开发的人都知道,VS2008开发工具提供了些远程工具,诸如远程文件查看器、远程注册表编辑器、远程堆查看器和远程放大等等。受此启发,所以才有了MF的远程文件查看器。
605 0
【玩转.Net MF – 04】远程屏幕截图
实现远程屏幕截图的思路很简单,就是直接获取设备的显存数据,由PC再现画面。由于我们已经实现了Custom信道,所以我们在原有程序基础上,增添一个Custom_Command_Screenshots命令,就可以完成数据的获取。
473 0
|
芯片 物联网 内存技术
WG7310(WLAN+Bluetooth+FM)芯片在.Net MF中的应用
WG7310芯片是Ti推出的一款芯片,集成了WLAN、Bluetooth、FM等功能(最近又推出了四合一的芯片,把GPS功能也集成了进去),由于以前在.Net MF上的一些工作是基于Ti DM335开发板上的,所以开发.Net MF系统的WiFi功能就选用了WG7310芯片。
699 0
|
芯片
免费发放firmwave,打造史上最低价.Net MF开发板
很久以前就曾多方位思考限制.Net Micro Framework发展的原因是什么?在物联网和Cortex-M3大行其道的今天,应该有更大的发展空间才对,为什么现在还是关注者甚少?我想主要原因有三,一、源码代码是否开源;二、是否有低价开发板;三、TinyCLR是否够小。
738 0
【STM32 .Net MF开发板学习-03】TinyGUI绘图示例
.Net Micro Framework官方图形库是WPF,由于目前ST Cortex-M3开发板RAM太小,最大才512K(常见是128K或256k),并且Cortex-M3的CPU主频也不太高,运行WPF图形框架显得过于重了,所以我这边推出了轻量级图形库TinyGUI
575 0
|
内存技术
【STM32 .Net MF开发板学习-04】TinyGUI位图显示
由于Cortex-M3开发板的RAM比较小,比如EM-STM3210E仅128K,所以显示位图是个比较棘手的事,如320*240 16位的位图大小就为150K,由于官方的WPF以一个BMP位图为本底进行绘图,所以RAM内存需求至少大于150K。
606 0
【STM32 .Net MF开发板学习-06】蜂鸣器和LED数码管显示
无论是蜂鸣器还是LED数码管显示,其实这二者对代码编写来说没有太大区别,都是GPIO的一个典型应用。红牛开发板有一个蜂鸣器,而EM-STM3210E有一个四位LED数码管,代码都相对简单,不值的为二者单独写一篇博文,所以二者合一以一篇文章来说明,不过两个示例代码是独立的。
630 0