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应用的基本流程和异常处理
2.1、基本流程
先来看个正常情况下的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参数来实现
2.2、TCP被动断开
发送AT+HTTPACTION命令,和服务器建立了http连接后,如果连接异常被动断开,会输出+HTTPACTION:
<Method>,<StatusCode>,<DataLen>提示
2.3、PDP被动去激活
先来看下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被动去激活”为异常处理的触发点
三、常见问题
3.1、HTTP支持多连接吗
目前HTTP仅支持单连接,不支持多连接
3.2、HTTPS如何使用
本文主要描述了基本流程和异常处理,对于HTTPS使用方法没有做过多描述,这一部分,请自行参考AT手册HTTP章节下《使用方法举例》中的"带SSL证书验证功能的HTTPS流程"使用方法;支持的SSL参数,请自行参考AT+SSLCFG命令说明
如果SSL的参数配置不变,则每次开机运行过程中,仅设置一次即可
3.3、重试多次PDP,HTTP应用一直连接失败
如果重试多次PDP激活,PDP一直激活失败,或者HTTP一直请求应答失败,则尝试使用如下手段恢复:
1、使用RESET引脚复位模块
2、极端情况下,直接给模块断电,再上电,POWER KEY引脚拉低开机
3.4、HTTP如何下载大文件(断点续传)
在实际的应用场景中,可能需要下载一个非常大的文件,例如几百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命令到模块端,打开模块端的硬流控功能
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!