zoukankan      html  css  js  c++  java
  • SIM900A模块HTTP相关调试笔记

    SIM900A模块使用笔记

    更新2018-12-8
    正常工作状态:

    接线方法:

    首先将 AT 写入字符串输入框,然后点击 发送。因为模块波特率默认是 9600,所以两条指令的显示都是没有问题的;如果将软件的波特率设置为其他,第一条 AT 指令会返回乱码,第二条指令才会显示正确。发送 AT 这条指令,SIM900A 模块返回 OK,说明此条指令执行正确,同时说明:电脑和模块通信正常。

    发送 AT+CSQ 查询信号强度指令。模块返回如下图所示,其中 19 为信号强度值,此值在 0—31 之间,越大代表信号越强。0 代表无信号,一般此数要达到 10 以上,模块才能正确执行发短信等功能。

    SIM状态:

    发送 AT+CPIN?查询模块是否检测到手机卡指令。指令返回如下图。READY 说明模块检测到了手机卡。如果返回 ERROR,说明模块没有检测到手机卡,请检查手机卡是否为 2G 卡,并且非电信卡。

    网络状态:

    发送 AT+COPS?指令,查询模块是否注册到网络。模块返回如下图所示。CHINA MOBILE 代表中国移动,因为我用的移动 2G 卡。说明模块已经注册到中国移动网络。

    当模块注册到网络后,我们才可以操作模块执行发短信等功能。 在用单片机控制模块时 , 推荐首先要检测模块是否注册到网络 , 如果没注册到 , 要等待一段时间 , 直至注册到网络。

    生产厂商

    设备类型

    GPRS状态:

    关闭移动场景。发送:AT+CIPSHUT,则可以关闭移动场景,关闭场景

    后连接状态为:IPINITIAL,可以通过发送:AT+CIPSTATUS,查询。

    是否注册到网络

    AT+SAPBR=3,1,"CONTYPE","GPRS"

    出错可能之前已经打开HTTP,需要关掉执行AT+HTTPTERM

    承载操作

    查询承载:

    AT+SAPBR=4,1

    设置参数:

    AT+SAPBR=3,1,"CONTYPE","GPRS"//设置承载参数:已经连接,因特网连接类型,GPRS连接 AT+SAPBR=3,1,"APN","CMNET"//设置承载参数:接入点名称为中国移动 AT+SAPBR=1,1//请求承载,失败时证明已经打开

    保存参数:

    AT+SAPBR=5,1

    关闭承载:

    AT+SAPBR=0,1//失败时证明已经关闭

    承载操作演示:

    AT+SAPBR=4,1

    +SAPBR:

    CONTYPE: GPRS

    APN: CMNET

    PHONENUM:

    USER:

    PWD:

    RATE: 2

    OK

    AT+SAPBR=3,1,"CONTYPE","GPRS"

    OK

    AT+SAPBR=3,1,"APN","CMNET"

    OK

    AT+SAPBR=1,1

    OK

    HTTP操作

    必要条件:SIM900A模块的D5常亮,D6慢闪。(SIM900A模块已插入SIM卡且搜索到网络)

    操作步骤

    1.打开承载(详见承载操作)

    2.HTTP初始化

    AT+HTTPINIT//初始化HTTP,失败则已打开

    3.设置HTTP参数

    查询参数:

    AT+HTTPPARA?

    设置http参数:

    AT+HTTPPARA="URL","http://119.29.132.199" //设置URL AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded" //设置数据格式

    保存参数:AT+HTTPSCONT(待验证)

    4.获取数据

    设置缓冲区大小:

    AT+HTTPDATA=8,10000 //字节数,获取时间ms

    HTTP访问

    AT+HTTPACTION=1 //0表示get,1表示post,2表示head

    读取内容

    AT+HTTPREAD

    5.关闭HTTP服务

    AT+HTTPTERM//失败时则已关闭

    6.关闭承载 AT+SAPBR=0,1

    HTTP操作演示:

    浏览器访问结果:

    PC端串口调试SIM900A模块访问结果:

    AT+HTTPINIT

    OK

    AT+HTTPPARA?

    +HTTPPARA:

    CID: 1

    URL:

    UA: SIMCOM_MODULE

    PROIP: 0.0.0.0

    PROPORT: 0

    REDIR: 0

    BREAK: 0

    BREAKEND: 0

    OK

    AT+HTTPPARA="URL","http://119.29.132.199"

    OK

    AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded"

    OK

    AT+HTTPDATA=8,10000

    DOWNLOAD

    ERROR

    AT+HTTPACTION=1

    OK

    +HTTPACTION:1,200,36

    AT+HTTPREAD

    +HTTPREAD:36

    hi word!

    OK

    遇到的问题:

    1.D5常亮,D6间歇性快闪:5V供电电压不足。

    2.指令无回复,USB-TTL通信问题,换一个;必须共地

    3.HTTPget访问返回601,原因未打开承载。

    其他资料:

    //下面的测试指令是可选的,用于确定当前是否可以连接 AT+CSQ AT+CREG? AT+CGATT? //下面的配置指令是必须的 AT+SAPBR=3,1,"CONTYPE","GPRS" AT+SAPBR=3,1,"APN","CMNET" AT+SAPBR=1,1 //操作HTTP AT+HTTPINIT //初始化Http AT+HTTPPARA="URL","http://IP:port/Phase/station/test" //设置URL AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded" //设置数据格式 AT+HTTPPARA? //查看配置 //缓冲区的长度计算 AT+HTTPDATA=0,10000 AT+HTTPDATA=8,10000 //这里的8是总的数据长度,根据需要进行变更 //如果需要http头部的话,需要计入总长度 POST Phase/station/test HTTP/1.1 Host: 120.26.55.29 Accept: / Authorization: Basic c2VhbnByaWRkeTpvOWk4dTd5RVQk Content-Type: application/x-www-form-urlencoded;charset=utf-8 data=132 AT+HTTPACTION=1 //0表示get,1表示post,2表示head //读结果和关闭连接是可选的 AT+HTTPREAD //读取内容 AT_HTTPTERM //终止HTTP服务 AT+SAPBR=0,1: //最后别忘记关闭承载

    参考链接:

    https://www.cnblogs.com/makexu/articles/6502194.html

    下面是C语言实现51单片机和sim900A模块全双工异步通信,主要完成模块的初始化以及网络检测等操作,通过led的指示灯可以观察现象

    /************************************************************
    程序说明:
    本程序运行后如果gprs模块找到服务商信号可实现接打电话发送短信等功能
    *************************************************************/
    #include <REG51.H>
    #include <string.H>
    #define uchar unsigned char
    #define uint unsigned int
    	
    //以下是板子上LED的配置,把Px_x改成自己对应的脚。
    sbit P20=P2^0;
    sbit P21=P2^1;
    sbit P22=P2^2;
    sbit P23=P2^3;
    sbit P24=P2^4;
    sbit P25=P2^5;
    
    //以下是你的51单片机的晶振大小
    //#define FOSC_110592M
    #define FOSC_12M
    
    //以下是开机后拨打的手机号,改成自己想要大的号码即可。
    uchar num[] = "ATD10086;
    ";
    
    //以下是GSM模块返回数据
    uchar rec_data[50];
    uchar rec_num;
    
    //注意,无论接收到信号还是发送完信号,都会进中断服务程序的
    /*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/
    void SerialInti()			//初始化程序(必须使用,否则无法收发)
    {
    	TMOD=0x20;					//定时器1操作模式2:8位自动重载定时器
    
    #ifdef FOSC_12M		   	//在这里根据晶振大小设置不同的数值初始化串口
    	TH1=0xf3;						//装入初值,波特率2400
    	TL1=0xf3;	
    #else 	
    	TH1=0xfd;						//装入初值,波特率9600
    	TL1=0xfd;
    #endif 								//end of SOC_12M
    	
    	TR1=1;							//开定时器
    	SM0=0;							//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)
    	SM1=1;							//(同上)在此模式下,定时器溢出一次就发送一个位的数据
    	PCON=0x80;					//波特率加倍,波特率4800,波特率误差 0.16%			?????不能位寻址???
    
    	REN=1;							//串行接收允许位(要先设置sm0sm1再开串行允许)
    	EA=1;								//开总中断
    	ES=1;								//开串行口中断	
    }
    
    
    /*串行通讯中断,收发完成将进入该中断*///如:+CMTI:"SM",2
    void Serial_interrupt() interrupt 4 
    {
    	uchar temp;
    	temp=SBUF;
    	rec_data[rec_num++]=temp;
    	if(rec_num>=50) rec_num=0;
    	else ;
    	RI=0;									//接收中断信号清零,表示将继续接收
    
    }
    
    //串行口连续发送char型数组,遇到终止号/0将停止
    void Uart1Sends(uchar *str)
    {
    	while(*str!='')
    	{
    		P20=~P20;
    		SBUF=*str;
    		while(!TI);//TI=0,原地等待;等待发送完成信号(TI=1)出现
    		TI=0;
    		str++;
    	}
    }
    
    /*
    void Uart1BYTE(uchar temp)
    {
    		SBUF=temp;
    		while(!TI);//等待发送完成信号(TI=1)出现
    		TI=0;
    }
    */
    uchar hand(uchar *ptr)
    {
    	if(strstr(rec_data,ptr)!=NULL) return 1;
    	else return 0;
    }
    
    void clear_rec_data()
    {
    	uint i;
    	for(i=0;i<strlen(rec_data);i++)
    	{
    		rec_data[i]='0';
    	
    	}
    	rec_num=0;
    
    
    }
    //延时函数大概是1s钟,不过延时大的话不准...
    void DelaySec(int sec)
    {
    	uint i , j= 0;
    
    	for(i=0; i<sec; i++)
    	{
    		for(j=0; j<40000; j++)
    		{	
    		}
    	}
    }
    
    void main()
    {
    
    	uint i = 0;
    	SerialInti();
    	P20=0;
    	DelaySec(1);//延时
    	P20=1;
    	DelaySec(1);//延时
    	P20=0;
    	DelaySec(1);//延时
    	P20=1;
    	
    	//Uart1Sends(num);
    	//建议在单片机控制GSM模块前,加上两条 AT 指令,用来同步模块与单片机的波特率
    	Uart1Sends("ATI
    "); //握手
    	
    	while(!hand("OK")) 
    	{
    	
    		clear_rec_data();
    		i++;
    		Uart1Sends("ATI
    ");//
    	  DelaySec(1);//延时
    		if(i>=5)
    		{
    			break;
    			//return;
    		}
    		else ;
    	}
    	P20=0;//同步波特率完成指示灯
    	
    	P21=0;
    	DelaySec(1);//延时
    	P21=1;
    	DelaySec(1);//延时
    	P21=0;
    	DelaySec(1);//延时
    	P21=1;
    	
    	clear_rec_data();//删除存储的GSM模块返回的数据,以便于以后继续判断
    	DelaySec(1);//延时
    	Uart1Sends("AT+CSQ
    ");//信号质量
    	DelaySec(1);//延时
    	i=0;
    	while(!hand("OK")) //检测此条指令GSM模块是否执行OK
    	{
    		clear_rec_data();
    		i++;
    		Uart1Sends("AT+CSQ
    ");//
    		DelaySec(1);//延时
    		if(i>=5)
    		{
    			break;
    			//return;
    		}
    		else
    			;
    	}
    	P21=0;//GSM模块检测完成指示灯
    	
    	
    	P22=0;
    	DelaySec(1);//延时
    	P22=1;
    	DelaySec(1);//延时
    	P22=0;
    	DelaySec(1);//延时
    	P22=1;
    	
    	clear_rec_data();
    	DelaySec(1);//延时
    	Uart1Sends("AT+CPIN?
    ");//查看是否读到手机卡
    	DelaySec(1);//延时
    	i=0;
    	while(!hand("READY")) //检测SIM模块是否收到SIM卡READY
    	{
    		clear_rec_data();
    		i++;
    		Uart1Sends("AT+CPIN?
    ");//是否注册到网络
    		DelaySec(1);//延时
    		if(i>=5)
    		{
    			break;
    			//return;
    		}
    		else
    			;		
    	}
    	P22=0;//手机卡检测完成指示灯
    	
    	P24=0;
    	DelaySec(1);//延时
    	P24=1;
    	DelaySec(1);//延时
    	P24=0;
    	DelaySec(1);//延时
    	P24=1;
    	
    	Uart1Sends("AT+COPS?
    ");//是否注册到网络
    	DelaySec(1);//延时
    	i=0;
    	while(!hand("CHINA")) //检测是否收到模块返回的CHINA
    	{
    		clear_rec_data();
    		i++;
    		Uart1Sends("AT+COPS?
    ");//是否注册到网络
    		DelaySec(1);//延时
    		if(i>=5)
    		{
    			break;
    			//return;
    		}
    		else
    			;		
    	}
    	P24=0;//网络状态检测完成
    	clear_rec_data();
    	DelaySec(1);//延时
    	/*
    //以下是发送英文短信短信
    	Uart1Sends("AT+CMMI=2,1
    "); //开回显
    	DelaySec(1);//延时
    	Uart1Sends("AT+CMGF=1
    ");  //方式1
    	DelaySec(1);//延时
    	Uart1Sends("AT+CMGS="10086"
    ");  //此处修改短信接收方电话号
    	DelaySec(1);//延时
    	Uart1Sends("ye");  //此处修改短信内容
    	DelaySec(1);//延时
    	Uart1BYTE(0X1A);
    	DelaySec(1);//延时
    	DelaySec(1);//延时
    	DelaySec(1);//延时
    	DelaySec(1);//延时
    	P14=0;
    //发送英文短信结束
    	Uart1Sends("AT+CMGD=1
    ");//删除SIM卡中的内容
    	DelaySec(1);//延时
    	//以下是拨打10086代码
    	Uart1Sends(num);  //拨打10086
    	DelaySec(1);//延时
    	DelaySec(1);//延时
    	DelaySec(1);//延时
    	DelaySec(1);//延时
    	//拨打电话代码结束
    	//以下内容没有实际测试,仅供参考
    	*/
    	while(1)
    	{
    		P25= ~P25;
    		DelaySec(1);
    		/*
    		if(hand("CMTI"))
    		{
    			P13=0;
    			clear_rec_data();
    			DelaySec(1);//延时
    			Uart1Sends("AT+CMGR=1
    ");//
    			DelaySec(1);//延时
    			i=0;
    			while(!hand("OK")) 
    			{
    				clear_rec_data();
    				i++;
    				Uart1Sends("AT+CMGR=1
    ");//
    				DelaySec(1);//延时
    				if(i>=2)   //chucuo
    				{
    					break;
    					//return;
    				}
    				else
    					;		
    			}
    			clear_rec_data();
    			DelaySec(1);//延时
    			if(hand("relay on"))
    			{
    				P14=0;
    				//break;
    			}
    			else if(hand("relay off"))
    			{
    				
    				P15=0;
    				//break;
    			}
    			else
    			{
    				//break;
    			}
    			Uart1Sends("AT+CMGD=1
    ");//
    			DelaySec(1);//延时
    
    		
    		}
    		else if(hand("ring")) //电话进来 挂断电话
    		{
    			
    			Uart1Sends("ATH
    ");//
    			DelaySec(1);//延时
    			i=0;
    			while(!hand("OK")) 
    			{
    				clear_rec_data();
    				i++;
    				Uart1Sends("ATH
    ");//
    				DelaySec(1);//延时
    				if(i>=2)
    				{
    					break;
    					//return;
    				}
    				else
    					;		
    			}
    			clear_rec_data();
    			DelaySec(1);//延时		
    	
    		}
    		else
    		{
    			;
    		}
    		*/
    	}
    
    	
    
    
    }
    

    AT

    OK

    AT+SAPBR=3,1,"CONTYPE","GPRS"

    OK

    AT+SAPBR=3,1,"APN","CMNET"

    OK

    AT+SAPBR=1,1

    OK

    AT+HTTPINIT

    OK

    AT+HTTPPARA="URL","http://product.scrazy.cn/adore"

    OK

    AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded"

    OK

    AT+HTTPDATA=8,10000

    DOWNLOAD

    ERROR

    AT+HTTPACTION=0

    OK

    +HTTPACTION:0,200,4

    AT+HTTPREAD

    +HTTPREAD:4

    send

    OK

    AT+HTTPTERM

    OK

    AT+SAPBR=0,1

    OK

  • 相关阅读:
    java 泛型
    数据结构与算法分析java——线性表1
    常见链表题
    网络面试题集锦
    java 网络流 TCP/UDP
    java文件
    java IO流——字节流
    java IO流——字符流
    java集合框架——工具类
    java集合框架——Map
  • 原文地址:https://www.cnblogs.com/scrazy/p/10035257.html
Copyright © 2011-2022 走看看