|
本帖最后由 刘鑫-15电子 于 2017-2-3 12:48 编辑
本帖子是针对于stm32关于安信可公司的A6/A7进行GPRS配置联网,然后TCP模式发送的一个简单介绍,大部分都是张继科学长和焦鹏辉学长的研究结果,我只是一个受益者,发出来,让大家都可以参考一下,由于我的水平有限,所以可能会有一些问题,欢迎讨论纠正。
A6/A7以及SIM808大多数通讯模块来说,驱动命令都是AT指令,通过串口发送AT指令。关于串口的配置我就不一一介绍,论坛里面的大多数人应该都比我了解
下面给出具体的配置流程
我把整个配置流程分为四个部分:基本AT操作,GPRS连接,TCP连接,TCP/HTTP发送
以下AT指令均需要在末尾加上/r/n,或者串口调试助手勾上发送新行
第一个部分:基本AT操作(此操作相当于是对模块开机后的一个初始化)
1、AT 每一个模块在开机后都需要不断地发送AT指令
第一个作用是检测是否模块连接上了或者说正常工作,第二个作用是校验波特率,A6/A7模块支持多种波特率 ,默认为115200,使用其他波特率时需要进行校验。
发送次数在15次以上,我为了稳妥,发了50次(50次以内接收到正确的OK应答就证明可以进行下面的操作)
2、ATE0 关闭回显
3、AT+CMEE=2 打开错误详情报告
4、AT+GMR 查询模块软件版本 ,可省
5、AT+GSN 查询IMEI
6、AT+CPIN? 查询SIM卡是否在位,返回READY才可使用
7、AT+CREG=1 开启显示网络注册未知结果码
8、AT+COPS=0,0 选择并且注册到 GSM 网络运营商,并设置为长格式字母数字
9、AT+COPS? 查询运营商名字,国内 CHINA MOBILE
10、AT+CSQ 查询信号质量
到这里,第一个部分就完成了,这里对模块波特率以及SIM卡进行了简单配置,目的是,对模块是否可以进行联网进行了检测,有可能A6模块没有连接上,SIM卡没有插好,还有无信号之类的情况发生,具体错误情况可以根据每一步返回的信息进行确认
第二个部分:GPRS连接
1、AT+CIPCLOSE=1 关闭连接
2、AT+CIPSHUT 关闭移动场景
这两步是很有必要的,进行GPRS配置前,我们需要确保GPRS连接一定是断开的,否者就会出错,如果之前没有联网,他会返回EORR,可以不用管它,但是这两步一定要有。
3、AT+CGCLASS="B" 设置GPRS移动台类别为B,支持包交换和数据交换
4、AT+CGATT=1 附着网络
5、AT+CGDCONT=1,"IP","CMNET" 设置PDP上下文(建立附着的SGSN与获取地址的GGSN之间建立一条连接),互联网接协议(常用IP协议),接入点(移动和联通都是CMNET)等信息
6、AT+CGACT=1,1 激活PDP,正确激活以后就可以上网了
第二部分到这里就完成了,到这里成功执行的话,模块已经与基站建立好了连接,我们建立的是单调连接,通常也只用到一条
第三部分,也就是与服务器之间进行TCP连接,因为A6/A7模块并不支持HTTP协议,所以我们如果要建立HTTP协议的话必须以TCP的方式,将发送格式打包成HTTP协议的格式(HTTP格式可以参照强哥的帖子http://www.cqutlab.cn/thread-116-1-1.html)
1、AT+CIPSTART="TCP","192.168.43.133",60000 第一个参数是TCP表明我们建立的是TCP连接,第二个参数是IP,第三个是端口号(这里我随便写的IP 和 端口号,以真实的服务器I准),连接成功会返 回CONNECT OK.
TCP连接到这里就完成了,无论是TCP连接还是HTTP连接,对于A6/A7来说都是需要这一步的,因为HTTP协议是建立在TCP协议之上的,在A6/A7没有单独的HTTP协议AT指令的情况下,必须要进行这一步。
第四部分,HTTP/TCP发送
1、AT+CIPSEND 当收到“>”时,就证明可以发送了。
紧接着用串口打印你需要发送的数据,以0X1A结束,TCP和HTTP发送的不同就在这里。TCP连接直接编辑需要发送的数据
TCP:
ABCD.......0X1A 数据就被发送出去了
HTTP:
HTTP发送需要用TCP模拟成HTTP的格式
例如,强哥服务器HELLOW WORD HTTP POST的格式
POST /WebService.asmx/HelloWorld HTTP/1.1
Host: 115.28.30.250
Content-Type: application/x-www-form-urlencoded
Content-Length: length
具体看强哥的帖子http://www.cqutlab.cn/thread-116-1-1.html
最后编辑好了,发送0X1A或者串口调试助手勾选十六进制发送 1A
0X1A(发送结束标志),0X1B(取消发送) 都是以十六进制来实现的,固定的标志,当模块收到0X1A才会发送,不然一直处于数据编辑状态。0X1A相当于我们手机发短信的“发送”
HTTP协议与TCP协议还有一个区别就是,HTTP是单次发送,完成一个发送后就会自动断开HTTP连接,TCP连接则不会,它在一段时间内可以连续发送,这个时间是多少,它的意义是大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 TCP 连接断连,具体是多少,大家可以去查一下。是因为我们是用TCP模拟HTTP,所以我们需要手动关闭TCP连接,用AT指令:AT+CIPCLOSE=1 、AT+CIPSHUT 手动关闭
具体源代码,由于帖子字数有限制,所以我发到下一个帖子里面!!!!!!!!
|
|