基于SIM300的GPRS网络通讯

基于SIM300制作的通信模组在工程中使用的非常多,下面总结一下其在网络通信方面的AT指令集应用方法

1、预备步骤:测试GPRS模组和业务是否好用
   AT           //测试网络连接是否完后

   AT+ccid      //检测是否装有SIM卡

   AT+cgmr      //检测软件版本,5.0 以上的才有GPRS 功能支持

   AT+COPS?     //运营商检测:

响应 +COPS:0

OK   未找到网络
响应 +COPS:0,0,”UNICOM”          //联通
OK
响应 +COPS:0,0,”CHINA MOBILE”   //移动
OK

   AT+csq//检测信号质量,确定是否可以登陆上网络;若返回10--31,0之间的信号数字则继续,
             //如果信号是99,99,则应该考虑不停的的让模块去搜寻网络。


2、网络初始化工作

AT+CGCLASS="B"

A->WCDMA:       出厂默认设置  

B->GSM/GPRS:    AT命令不支持设置此模式?

CG->GPRS Only:  AT+CREG?返回未注册,但能pppd拨号

CC->GSM Only:   AT+CREG?查看注册上,但pppd不能拨号上网

AT+CGDCONT=1,"IP",”CMNET"                //首先定义PDP移动场景

AT+CGATT=1                               //激活PDP,返回OK则继续

AT+CIPCSGP=1,"CMNET"                     //设置模块连接方式为GPRS连接,接入点为“CMNET”

AT+CDNSORIP=0                            //0:通过IP访问

                                         //1:通过域名访问

AT+CDNSCFG="211.136.17.107"              //初始化本地dns,本例为中国移动


3、建立连接

AT+CIPSTART="TCP/UDP",221.216.163.44,2020

TCP/UDP指明是TCP连接还是UDP连接

221.216.163.44是SEVER端的IP地址  2020为端口

连接成功后模块返回:

OK

CONNECT OK


4、发送信息

AT+CIPSEN

发送完此命令后出现一个 ">" 符号,这样就可以在超级终端里输入要发送的信息,输入完毕后按下"ctl+z"发送,即将所要发送的数据发送到指定IP的服务器上

5、关闭连接
AT+CIPCLOSE  //只有在TCP/UDP处于CONNECT OK的状态下才返回OK,否则返回ERROR

AT+CIPSHUT   //关闭移动场景


6、应用举例:

使用TCP向远端SERVER传输数据

    服务器端是一台连接到互联网上的PC机,pc机上可以运行一个接收软件,这种只适合测试模块是使用,其实最后开发时还要自己开发一个socket接收程序,注意该PC机的IP地址必须是公网IP,否则客户端找不到。

    1)水木清华BBS访问:

AT+CIPSTART="TCP","166.111.8.238","23"//清华大学telnet服务器

    2)自建一个tcp服务器:

在一个具有公网IP的电脑上运行以下服务器程序:

//=============================================================
// 文件名称:tcp_echo_srv.c
// 功能描述:TCP Echo Server
// 维护记录:2011-8-15	 V1.0
//=============================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>					// bzero
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>					// inet_ntop
//=============================================================
// 语法格式:	void main(void)
// 实现功能:	主函数,建立一个TCP Echo Server
// 入口参数:	无
// 出口参数:	无
//=============================================================
int main(int argc, char *argv[])
{
	char recvbuf[2048];			// 接收缓冲区
	int sockfd;				// 套接字
	
	struct sockaddr_in servAddr;		// 服务器地址结构体
	unsigned short port = 8000;		// 监听端口

	if(argc > 1)				// 由参数接收端口
	{
		port = atoi(argv[1]);
	}
	
	printf("TCP Server Started at port %d!\n", port);
	
	//setp  1:			创建TCP套接字
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
										
	if(sockfd < 0)
	{
		perror("Invalid socket");
		exit(1);
	}
	//setp  2:			将socket套接字与端口号、本机IP地址绑定
	bzero(&servAddr, sizeof(servAddr));	         // 初始化服务器地址
	servAddr.sin_family = AF_INET;		         // 采用IPV4协议
	servAddr.sin_port = htons(port);	         // 邦定端口号
	servAddr.sin_addr.s_addr = htonl(INADDR_ANY);    //绑定本机IP地址
	
	printf("Binding server to port %d\n", port);
	
	printf("servAddr.sin_addr.s_addr=%d\n",servAddr.sin_addr.s_addr);
	
	if(bind(sockfd, (struct sockaddr*)&servAddr, sizeof(struct sockaddr)) != 0)
	{
		close(sockfd);
		perror("binding err!");
		exit(1);
	}
	
	//setp	3	将套接字设置为监听模式
	if(listen(sockfd, 1) != 0)
	{
		close(sockfd);
		perror("listen err!");
		exit(1);
	}
	printf("waiting client...\n");
	while(1)
	{
		char cliIP[INET_ADDRSTRLEN];	             // 用于保存客户端IP地址

		size_t recvLen;
		struct sockaddr_in cliAddr;		     // 用于保存客户端地址
		size_t cliAddrLen = sizeof(cliAddr);
							     // 必须初始化!!!
		//setp	4:阻塞等待客户端的连接
		int connfd = accept(sockfd, (struct sockaddr*)&cliAddr, &cliAddrLen);
							     // 获得一个已经建立的连接
		if(connfd < 0)
		{
			close(sockfd);
			perror("accept err!");
			exit(1);
		}
		inet_ntop(AF_INET, &cliAddr.sin_addr.s_addr, cliIP, INET_ADDRSTRLEN);
		printf("client ip = %s\n", cliIP);
		
		//setp	5:读取客户端发送的数据并回送给客户端
		while((recvLen = read(connfd, recvbuf, 2048)) > 0)
		{
			write(connfd, recvbuf, recvLen);
		}
		close(connfd);
		printf("client closed!\n");
	}
	close(sockfd);
	return 0;
}

使用以下方式连接:

  AT+CIPSTART="TCP","124.*.*.139","8000"

使用以下命令发送数据:

  AT+CIPSEND

服务器会把发送的数据回给你


  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值