域格ASR系列模块支持HTTP下载大文件,本文将提供两种方式。
- 一、直接通过URC上报数据
- 基础操作
- 核心指令说明
- 配置说明
- 响应说明
- 应用示例
- 注意点
- 二、HTTP Range分段下载
- 核心指令说明
- 注意点
一、直接通过URC上报数据
若文件体积适中,且需要 MCU 即时处理数据(如下载 OTA 固件时实时校验 CRC、接收流媒体时即时解码),可以使用URC 上报的方式,无需 MCU 主动轮询读取,模块下载数据后自动推送。
基础操作
在确认模块注册上网络后,通过AT+HTTPINIT初始化HTTP服务,再通过AT+HTTPPARA=“URL”,“http://xxxxxxx/xxxx”配置HTTP参数。
如果是HTTPS场景,还需要通过AT+HTTPSSL=1启动HTTPS,通过AT+SSLCFG=“sslversion”,153,3配置SSL版本。
以上详细内容可在本系列(一)(二)中查看
核心指令说明
AT+HTTPGET=<1>,<2>
配置说明
<1>:GET响应方式
0:存在内存中,再次发起请求或者AT+HTTPTERM时释放内存
1:直接通过URC上报数据
2:存在文件系统中,再次发起同文件名的请求或者主动删除释放
<2>:
<1>为0,即选择存在内存中时无需第二个参数
<1>为1,即选择URC主动上报时,该位为数字参数,为每包数据的上报间隔,单位ms
<1>为2,即选择存在文件系统中时,该位为字符参数,表示保存的文件名
响应说明
+HTTPGET: <1>,<2>,<3>
<1> :对应请求的GET响应方式
0:存在内存中,再次发起请求或者AT+HTTPTERM 释放内存
1:直接通过URC上报数据
2:存在文件系统中,再次发起同文件名的请求或者主动删除释放
<2>:HTTP执行状态,同+HTTPACTION第二个参数,正式请求时是HTTP返回的状态值,如200表示成功。
<3>:请求数据的总大小
应用示例
AT+HTTPINIT
初始化HTTP服务
AT+SSLCFG=“sslversion”,153,3
AT+HTTPSSL=1
配置SSL
AT+HTTPPARA=“URL”,“https://xxxxxxxxxxxxx”
设置目标URL
AT+HTTPGET=1,1000
GET响应方式配置为1:直接通过URC上报数据,每包数据上报间隔时间为1000ms,即1秒
之后模块就以1秒的间隔上报数据
先上报本包数据响应方式、执行状态和本次上报数据长度,再吐出对应数据。
最后一位吐出数据为0时,表示下载完成。
+HTTPGET: 1,200,1817
(省略1817字节数据)
+HTTPGET: 1,200,2048
(省略2048字节数据)
…
+HTTPGET: 1,200,0
注意点
- 确保串口数据不丢失:URC 上报速度快,需确保 MCU 能稳定接收数据,串口波特率与模块匹配等;
- 上报间隔设置合理:间隔过短(如 10ms)会导致串口频繁中断,过长(如 5000ms)会累积数据占用内存,建议设为 500~1000ms;
- 需要做数据完整性校验:实时处理时需记录累计接收长度,与服务器Content-Length对比,避免漏接片段。
二、HTTP Range分段下载
基础指令,和方式一相同。
核心指令说明
HTTP Range分段下载需要重复执行以下5条指令,但其中第4条需要做对应的变化。
1、AT+HTTPACTION=2
发送HEAD请求,仅获取响应头(不下载数据)
回复示例:
+HTTPACTION: 2,200,0 // 2=HEAD方法,200=成功,0=无响应体
2、AT+HTTPHEAD
读取响应头,确认支持分段+获取文件总大小
回复示例:
AT+HTTPHEAD
+HTTPHEAD: 280
Content-Length: 10485760 // 文件总大小:10MB(1024 * 1024* 10)
Accept-Ranges: bytes // 服务器支持Range分段(关键!)
Content-Type: video/avi
Server: Nginx
OK
3、AT+HTTPPARA=“USERDATA”,“Range: bytes=0-1023”
配置 HTTP 请求头中的Range字段,指定本次下载的文件字节范围(实现分段下载)
在重复执行分段下载的过程中,该条指令需要做变化。
- 若每次下载1024字节
- 配置第一段Range指令为AT+HTTPPARA=“USERDATA”,“Range: bytes=0-1023”下载0-1023字节(共1024字节)
- 后续每一段Range都要累加1024
- 如第二段对应指令为AT+HTTPPARA=“USERDATA”,"Range: bytes=1024-2047"
- 第三段对应指令为AT+HTTPPARA=“USERDATA”,"Range: bytes=2048-3071"
也可以根据需要确定每次需要下载的字节范围。
4、AT+HTTPACTION=0
执行 HTTP 的GET方法,下载Range头指定的文件片段(而非完整文件)
5、AT+HTTPREAD=0,1024
读取通过AT+HTTPACTION=0下载的文件片段数据,指定读取的起始地址和长度。
- 0:start_address,读取数据的起始地址(此处为 0,表示从片段的第 1 字节开始);
- 1024:byte_size,读取的数据长度(字节),需与Range范围匹配(0-1023范围共 1024 字节,此处读取 1024 字节,可根据需求调整)。
注意点
- 需确认服务器支持分段;
- Range范围要计算正确;
- 片段顺序确认正确:需记录每段 Range 的起始 / 结束字节,按顺序写入文件,避免文件损坏。