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;\r\n";
//以下是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!='\0')
{
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\r\n"); //握手
while(!hand("OK"))
{
clear_rec_data();
i++;
Uart1Sends("ATI\r\n");//
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\r\n");//信号质量
DelaySec(1);//延时
i=0;
while(!hand("OK")) //检测此条指令GSM模块是否执行OK
{
clear_rec_data();
i++;
Uart1Sends("AT+CSQ\r\n");//
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?\r\n");//查看是否读到手机卡
DelaySec(1);//延时
i=0;
while(!hand("READY")) //检测SIM模块是否收到SIM卡READY
{
clear_rec_data();
i++;
Uart1Sends("AT+CPIN?\r\n");//是否注册到网络
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?\r\n");//是否注册到网络
DelaySec(1);//延时
i=0;
while(!hand("CHINA")) //检测是否收到模块返回的CHINA
{
clear_rec_data();
i++;
Uart1Sends("AT+COPS?\r\n");//是否注册到网络
DelaySec(1);//延时
if(i>=5)
{
break;
//return;
}
else
;
}
P24=0;//网络状态检测完成
clear_rec_data();
DelaySec(1);//延时
/*
//以下是发送英文短信短信
Uart1Sends("AT+CMMI=2,1\r\n"); //开回显
DelaySec(1);//延时
Uart1Sends("AT+CMGF=1\r\n"); //方式1
DelaySec(1);//延时
Uart1Sends("AT+CMGS=\"10086\"\r\n"); //此处修改短信接收方电话号
DelaySec(1);//延时
Uart1Sends("ye"); //此处修改短信内容
DelaySec(1);//延时
Uart1BYTE(0X1A);
DelaySec(1);//延时
DelaySec(1);//延时
DelaySec(1);//延时
DelaySec(1);//延时
P14=0;
//发送英文短信结束
Uart1Sends("AT+CMGD=1\r\n");//删除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\r\n");//
DelaySec(1);//延时
i=0;
while(!hand("OK"))
{
clear_rec_data();
i++;
Uart1Sends("AT+CMGR=1\r\n");//
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\r\n");//
DelaySec(1);//延时
}
else if(hand("ring")) //电话进来 挂断电话
{
Uart1Sends("ATH\r\n");//
DelaySec(1);//延时
i=0;
while(!hand("OK"))
{
clear_rec_data();
i++;
Uart1Sends("ATH\r\n");//
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
SIM900A模块HTTP相关调试笔记的更多相关文章
- Micropython TPYBoard v102 温湿度短信通知器(基于SIM900A模块)
前言 前段时间看了追龙2,感受就是如果你是冲着追龙1来看追龙2的话,劝你还是不要看了,因为追龙2跟追龙1压根没什么联系,给我的感觉就像是看拆弹专家似的,估计追龙2这个名字就是随便蹭蹭追龙1的热度来的. ...
- USB wifi调试笔记
本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...
- Tomcat调试笔记
调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是 ...
- linux设备驱动归纳总结(二):模块的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...
- Monkey相关参数 笔记
Monkey相关参数 笔记 Monkey是Android系统自带的一个命令行工具,可运行在模拟器里或实际设备中. Monkey可以向被测试的应用程序发送伪随机的用户事件流(如按键.触屏.手势等),实 ...
- adb相关指令 笔记
adb相关指令 笔记 1.adb devices 查看物理测试设备或模拟器的相关信息,有三个状态: (1)device 设备已连接到adb服务器上,但该状态并不代表设备已启动完毕可以进行操作: ( ...
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- ida动态调试笔记
ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...
- 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念
linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10.04 开发平台:S3C2440开发板 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
随机推荐
- 【LeetCode题解】9_回文数(Palindrome-Number)
目录 9_回文数(Palindrome-Number) 描述 解法一:转化为字符串的比较 思路 Java 实现 Python 实现 复杂度分析 解法二:反转数字的后半部分 ★ 思路 Java 实现 P ...
- Java中的数据验证
原文链接:https://www.cuba-platform.com/blog/2018-10-09/945 翻译:CUBA China CUBA-Platform 官网 : https://www. ...
- lua闭包与简易迭代器实现
1.什么是闭包 闭包,又称闭合函数(closure).通常,如果将一个函数写在另一个函数内,那么这个在内部的函数就可以访问到外部函数中的局部变量,这个特征就是词法域,有些资料上也叫它词法定界.闭包指的 ...
- 我所了解的Hibernate注解
一,首先需要导入支持注解开发的jar包: hibernate-annotations.jar hibernate-commons-annotations.jar (Hibernate中支持注解开发的j ...
- [转]浅谈 JavaScript的原型对象与原型链
看到这篇文章写的很好,转过来以便今后阅读. 原文地址:http://www.cnblogs.com/shuiyi/p/5305435.html 对于新人来说,JavaScript的原型是一个很让人头疼 ...
- (一)面向对象的javascript
javascript是一门典型的动态类语言 一:鸭式辨型(指导我们关注对象的行为,而不关注对象本身). var duck = { duckString: function(){ console.log ...
- Java学习个人总结
声明:个人原创,转载请在文章开头明显位置注明出处:https://www.cnblogs.com/sunshine5683/p/10063960.html 学习从来都是一个阶段的学习,然后进行整理与总 ...
- 对工厂方法模式的一些思考(java语法表示)
同为创造型设计模式的简单工厂模式可以理解为对new关键字的代替. 本着重复三次即重构的原则,如果一个对象在不同的地方被new了两次以上,那就可以考虑使用它.那我们为什么要用简单工厂模式代替new呢?就 ...
- SQL0286N 找不到页大小至少为 "8192"、许可使用授权标识 "db2inst" 的缺省表空间。
在 SQL 处理期间,它返回: SQL0286N 找不到页大小至少为 "8192".许可使用授权标识 "db2inst" 的缺省表空间. 顾名思义,DB2默认 ...
- SQL Server删除表及删除表中数据的方法
删除表的T-SQL语句为: drop table <表名> drop是丢弃的意思,drop table表示将一个表彻底删除掉. 删除表数据有两种方法:delete和truncate. de ...