Air系列4G模块AT版本HTTP应用说明
<div style="border-top: none; border-right: none; border-left: none; border-image: initial; border-bottom: 1pt solid rgb(238, 238, 238); padding: 0cm 0cm 4pt; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">
一、应用概述
4G模块支持HTTP和HTTPS协议, HTTP应用的基本流程如下:
1、激活PDP(参考:http://oldask.openluat.com/article/937)
2、初始化HTTP服务
3、设置HTTP会话参数
4、如果要支持SSL,配置SSL参数
5、如果使用POST命令,输入POST数据
6、发起HTTP请求
7、收到HTTP应答,读取应答数据
8、终止HTTP服务
第1步出现异常后:参考http://oldask.openluat.com/article/937进行异常处理
第2步到第5步,只要输入格式正确,基本不会出问题;如果出错,可以跳过,直接处理第6步的异常
第6步和第7步出现异常后:终止HTTP服务,有选择性的去激活PDP;然后再有选择性的激活PDP,从第2步开始重新执行
本章节分三部分来介绍HTTP应用的基本流程和异常处理
先来看个正常情况下的AT命令序列,如果不理解AT命令含义,请自行参考AT手册
AT+CPIN?
+CPIN: READY //查询sim卡是否正常
OK
AT+CGATT?
+CGATT: 1 //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上
OK
AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN","" //设置APN,此处""表示使用从网络端自动获取到的APN
OK
AT+SAPBR=1,1 //发起激活PDP的请求
OK
AT+SAPBR=2,1 //注意:此命令仅仅查询PDP地址,可以不执行
+SAPBR: 1,1,"10.159.1.145" //请求到的PDP地址
OK
AT+HTTPINIT
OK
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","www.baidu.com"
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,200,153869
AT+HTTPREAD
+HTTPREAD: 153869
<!DOCTYPE html>
......
</html>
OK
|
正常功能以及异常处理的流程图如下
在这个过程中,注意事项如下:
1、发送AT+HTTPACTION命令后,收到OK仅仅表示4G模块开始处理这条命令,并不表示请求发送成功,收到了应答;只有收到+HTTPACTION: n,statusCode,len才表示请求结束,statusCode表示应答成功,其余都表示应答失败
2、HTTP应答数据的缓冲区大小为319488字节,如果返回的http body数据超过了这个大小,则需要断点下载,可以使用AT+HTTPPARA命令,通过设置BREAK和BREAKEND参数来实现
发送AT+HTTPACTION命令,和服务器建立了http连接后,如果连接异常被动断开,会输出+HTTPACTION:
<Method>,<StatusCode>,<DataLen>提示
先来看下PDP被动去激活时的AT命令处理序列,如果不理解AT命令含义,请自行参考AT手册
...... //此处省略了PDP激活的过程,参考2.1章节
AT+HTTPINIT
OK
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","www.baidu.com"
OK
AT+HTTPACTION=0
OK
+SAPBR 1: DEACT //此处PDP被动去激活
+HTTPACTION: 0,601,0
AT+HTTPTERM
OK
//此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断
AT+SAPBR=0,1
+CME ERROR: 3 //此处无论返回OK、ERROR还是CME ERROR,都直接跳过,不用做正确性判断
...... //此处省略了PDP激活的过程,参考2.1章节
AT+HTTPINIT
OK
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","www.baidu.com"
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,200,154293
|
参考2.1章节流程图,右下角的“收到+SAPBR 1: DEACT错误提示,表示PDP被动去激活”为异常处理的触发点
目前HTTP仅支持单连接,不支持多连接
本文主要描述了基本流程和异常处理,对于HTTPS使用方法没有做过多描述,这一部分,请自行参考AT手册HTTP章节下《使用方法举例》中的"带SSL证书验证功能的HTTPS流程"使用方法;支持的SSL参数,请自行参考AT+SSLCFG命令说明
如果SSL的参数配置不变,则每次开机运行过程中,仅设置一次即可
如果重试多次PDP激活,PDP一直激活失败,或者HTTP一直请求应答失败,则尝试使用如下手段恢复:
1、使用RESET引脚复位模块
2、极端情况下,直接给模块断电,再上电,POWER
KEY引脚拉低开机
在实际的应用场景中,可能需要下载一个非常大的文件,例如几百K字节、几M字节,但是4G模块中HTTP可用的内存缓冲区为300KB左右,当文件大小超过这个缓冲区时,就要使用断点续传功能来分段下载处理了。下面以“下载一个11975260字节的文件”为例,来说明如何使用断点续传功能(注意:本示例仅仅演示了正常流程的HTTP AT命令,完整流程以及异常处理流程请参考本文第二章节)
AT+HTTPINIT
OK
AT+HTTPPARA="URL","http://openluat-erp.oss-cn-hangzhou.aliyuncs.com/erp_site_file/product_file/sw_file_20200108162920_Luat_V0028_ASR1802.zip"
OK
AT+HTTPACTION=2
OK
+HTTPACTION: 2,200,0
AT+HTTPHEAD
+HTTPHEAD: 454
server: aliyunoss
date: thu, 16 jan 2020 06:50:58 gmt
content-type: application/zip
content-length: 11975260 //此处的11975260表示文件总大小
connection: keep-alive
x-oss-request-id: 5e2007d108f4be32353a92ae
accept-ranges: bytes
etag: "a5b9cc75c0f26413bbaf00a0fa952bb2"
last-modified: wed, 08 jan 2020 08:29:29 gmt
x-oss-object-type: normal
x-oss-hash-crc64ecma: 16925484473913319613
x-oss-storage-class: standard
content-md5: pbnmdcdyzbo7rwcg+pursg==
x-oss-server-time: 111
OK
//如下红色指令,表示下载文件的第一个300KB数据
AT+HTTPPARA="BREAK",0
OK
AT+HTTPPARA="BREAKEND",307199
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,206,307200
AT+HTTPREAD
+HTTPREAD: 307200
...... //此处输出307200字节数据
OK
//如下绿色指令,表示下载文件的第二个300KB数据
AT+HTTPPARA="BREAK",307200
OK
AT+HTTPPARA="BREAKEND",614399
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,206,307200
AT+HTTPREAD
+HTTPREAD: 307200
...... //此处输出307200字节数据
OK
//此处参考上文的红色或者绿色指令,一直循环读取文件的下一个300KB数据,直到读取结束
......
AT+HTTPTERM
OK
|
3.5、HTTP下载的大文件如何可靠的发送给MCU(AT流控)
在3.4 章节中,如下一段AT指令
AT+HTTPREAD
+HTTPREAD: 307200
...... //此处输出307200字节数据
OK
|
......处的307200字节数据,是模块通过UART AT口发送给MCU,在实际传输过程中,由于串口芯片驱动、MCU端的处理能力、波特率的选择都存在不确定性,可能会导致MCU端接收到的数据,实际上没有307200字节,这就要求UART AT口打开流控功能。模块支持硬流控和软流控两种:
1. 硬流控,参考如下步骤操作:
1) 模块和 的UART口,CTS、RTS要交叉相连
2) MCU端固件要支持并且打开硬流控功能
3) MCU端要发送AT+IFC=2,2命令到模块端,打开模块端的硬流控功能
2. 软流控,参考如下步骤操作:
1) MCU端固件要支持并且打开软流控功能
2) MCU端要发送AT+IFC=1,1命令到模块端,打开模块端的硬流控功能