【STM32 .Net MF开发板学习-27】GPRS通信实现-阿里云开发者社区

开发者社区> KB小秘书> 正文

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

简介: GPRS和以往连续在频道传输的方式不同,是以封包(Packet)式来传输。我们基于.NET Micro Framework 4.1平台,开发了YFSoft.Hardware.GPRS库,通过该库,用户简单调用相关接口,就可以实现GPRS通信。
+关注继续查看

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

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

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

 硬件平台搭建好后,我们编写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程序(可以从文末提供的连接进行下载),如下图:
image.png

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

image.png

我们按开发板上的按钮向服务器发送数据,或通过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 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 – 设置连接模式失败,连接是服务器还是域名 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【示例】

源码/文档: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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《STM32库开发实战指南:基于STM32F4》----3.2 STM32能做什么
本节书摘来自华章出版社《STM32库开发实战指南:基于STM32F4》一书中的第3章,第3.2节,作者刘火良,杨森编著,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 3.2 STM32能做什么 STM32属于一个微控制器,自带了各种常用通信接口,比如USART、I2C、SPI等,可连接非常多的传感器,可以控制很多的设备。
2697 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6904 0
《STM32库开发实战指南:基于STM32F4》----2.5 下载程序
本节书摘来自华章出版社《STM32库开发实战指南:基于STM32F4》一书中的第2章,第2.5节,作者刘火良,杨森编著,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.5 下载程序 如果前面步骤都成功了,接下来就可以把编译好的程序下载到开发板上运行。
1502 0
【STM32 .NET MF开发板学习-29】摄像头蓝牙图像远程获取
目前M3的开发板,虽然前段时间可以支持WPF了,但是SRAM毕竟还是有限,所以从串口摄像头直接获取的jpg图像,并不能在LCD屏上显示出来(在模拟器上没有这个问题,可以直接呈现),所以我借助蓝牙接口,把另一个串口获取的图像数据发送到一台带蓝牙的PC上,PC上的程序否则实现数据接收,并把图像呈现出来。
505 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7751 0
独家 | ARIMA/Sarima与LSTM的时间序列数据集成学习(附链接)
本文探讨了简单的ARIMA/Sarima与LSTM的时间序列数据集成学习方面的问题。
1536 0
《ASP.NET 开发从入门到精通》----1.2 Web技术简介
学习Web开发,不得不提到本地计算机和远程服务器的概念。顾名思义,本地计算机是指用户正在使用的、浏览站点页面的机器。对于本地计算机来说,最重要的构成模块是Web浏览器。
1289 0
3-51单片机ESP8266学习-AT指令(开发板8266底层源码介绍)
上一篇链接  http://www.cnblogs.com/yangfengwu/p/8743502.html 直接上源码:注意源码有两部分,第一部分是一开始的时候写在模块内部的,另一部分是存在手机内部的,方便后期更新功能 看第一部分的源码 亲们可以直接把下面的第一部分(注意只下载第一部分就行)的程...
2195 0
+关注
1090
文章
1253
问答
来源圈子
更多
阿里云最有价值专家,简称 MVP(Most Valuable Professional),是专注于帮助他人充分了解和使用阿里云技术的意见领袖阿里云 MVP 奖项为我们提供了这样一个机会,向杰出的意见领袖表示感谢,更希望通过 MVP 将开发者的声音反映到我们的技术路线图上。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载