域格模组使用http下载到文件系统以及分段下载

系列文章目录

文章目录


前言

在物联网(IoT)应用中,远程固件升级和 大文件下载 是常见需求。域格(Yuge)模组支持HTTP下载功能,可以成为许多开发者的首选。本文将详细解析如何使用域格模组通过HTTP协议下载文件到文件系统,并实现分段下载,确保大文件传输的稳定性和可靠性。



一、基本HTTP下载流程

1.1 设置下载URL

首先,使用 AT+HTTPPARA 指令设置目标文件的URL:

c 复制代码
AT+HTTPPARA="URL","http://hex.file.yuge.com/BV2.bin"
OK

说明:指定要下载的文件地址(BV2.bin)。

1.2 启动HTTP下载

通过 AT+HTTPACTION=0 启动下载:

c 复制代码
AT+HTTPACTION=0
OK

说明:0 表示GET请求,模组开始从URL下载文件。

1.3 下载进度监控

模组会返回多个 +HTTPACTION 事件,显示下载状态:

c 复制代码
+HTTPACTION: 0,200,1263
+HTTPACTION: 0,200,2048
...
+HTTPACTION: 0,200,969
+HTTPACTION: 0,200,0

字段解析:
0 :GET请求。
200 :HTTP状态码(成功)。
1263/2048/...:单次下载的数据长度(字节)最后返回0:下载结束。

1.4 读取文件内容

使用 AT+HTTPREAD 读取下载的数据。
偏移量依次读取

AT+HTTPREAD=<start_address>,<byte_size>

<start_address>:从这个偏移量的位置开始读取。

<byte_size>:读取数量的大小

AT+HTTPREAD=1024,4

+HTTPREAD:4

1234

OK

从1024字节开始读4个字节,字节为1234。
直接通过URC上报数据(直吐模式)

c 复制代码
AT+HTTPGET=1
□
AT+HTTPGET=1
OK

[19:01:04.171]收←◆
+HTTPGET: 1,200,1273
1234123412341234,,,,,,,,,,

参数说明:

参数一:GET响应方式

1:直接通过URC上报数据

二、分段下载:突破大文件限制

对于大文件(如超过模组内存限制的文件),直接下载可能导致失败。此时,分段下载(Range Request) 是解决方案。

2.1 设置HTTP头(Range)

通过 AT+HTTPPARA="USERDATA" 指定下载范围:

c 复制代码
AT+HTTPPARA="USERDATA","Range: bytes=0-1023"
OK

说明:请求服务器返回文件的 前1024字节(0-1023)。

2.2 启动分段下载

c 复制代码
AT+HTTPACTION=0
OK

返回结果:

c 复制代码
+HTTPACTION: 0,206,1024
+HTTPACTION: 0,206,0

206 :HTTP状态码(Partial Content,部分内容)。
1024:实际下载的字节数。

三、下载存储到文件系统

将HTTP分段下载的数据保存到文件系统(如 111.x),并验证文件完整性。

3.1. 启动分段下载并保存到文件

c 复制代码
AT+HTTPGET=2,"111.yuge"  // 模式2:数据写入文件系统,文件名"111.x"
OK

参数说明:

参数1:GET响应方式

0:存在内存中,再次发起请求或者AT+HTTPTERM 释放内存

1:直接通过URC上报数据
2 :存在文件系统中,再次发起同文件名的请求或者主动删除释放

参数2:
"111.yuge":目标文件名(需确保文件名唯一,避免覆盖)。

3.2. 验证文件是否保存成功

c 复制代码
AT+FSATTRI="111.yuge"  // 查询文件属性
+FSATTRI: 1024,1970/01/01 00:00:00 4  // 返回文件大小、创建时间、属性
OK

返回字段解析:
1024 :文件大小(字节),需与下载的分段大小一致。
1970/01/01 00:00:0 0:文件创建时间(默认值,可能因模组实现而异)。
4 :文件属性(具体含义参考模组文档,通常为普通文件标识)。
3. 读取文件内容(可选验证)

3.3.如果需要验证文件内容,使用 AT+FSREAD 读取部分数据:

c 复制代码
AT+FSREAD="111.yuge",1,5,5  // 从偏移量5开始读取5字节
+FSREAD: 5               // 实际读取的字节数
ll_FB                    // 读取到的数据(示例值)
OK

参数说明:
"111.yuge" :目标文件名。
1 :启用偏移量参数(0表示忽略偏移量)。
5 :读取长度(字节)。
5:读取起始偏移量。

四、大数据分段下载到文件系统

若需下载整个文件,可通过循环请求不同字节范围实现:

获取文件总大小(可选):

通过HTTP HEAD请求获取文件头信息(如 Content-Length)。

c 复制代码
AT+HTTPACTION=2  // HEAD请求
+HTTPACTION: 2,200,717  // 返回文件头长度

分段下载逻辑:

计算文件总大小(如从HTTP头获取)。

按固定大小(如1024字节)分块下载:

c 复制代码
AT+HTTPPARA="USERDATA","Range: bytes=0-1023"  // 第1块
AT+HTTPGET=2,"yuge_part1.bin"
c 复制代码
AT+HTTPPARA="USERDATA","Range: bytes=1024-2047"  // 第2块
AT+HTTPGET=2,"yuge_part2.bin"

合并分块文件(可以在MCU端实现)。

五、关键注意事项

HTTP状态码:

200:完整文件下载成功。

206:分段下载成功。

404:文件不存在(检查URL)。
文件系统空间

确保模组文件系统有足够空间存储下载的文件。
超时处理

网络不稳定时,需实现重试机制(如超时后重新发起请求)。
断点续传

结合 Range 头和本地记录,可实现断点续传功能。

相关推荐
成空的梦想2 小时前
ZLibrary反爬机制实战分析的技术文章大纲
网络协议·https·ssl
不做菜鸟的网工4 小时前
H3C IPv6 over IPv4隧道实验
网络协议
23.4 小时前
【网络】TCP与HTTP:网络通信的核心机制解析
网络·tcp/ip·http
独自破碎E4 小时前
【面试真题拆解】5秒内限10次HTTP接口访问,结合数据结构和算法说说你的思路
数据结构·http·面试
袁小皮皮不皮4 小时前
【HCIA】第三章TCP/IP协议栈中其他主要协议
运维·服务器·网络·网络协议·tcp/ip
pop_xiaoli4 小时前
【iOS】类与对象底层
macos·ios·objective-c·cocoa·xcode
小庄梦蝶5 小时前
Mixed Content: The page at ‘https://域名/‘ was loaded over HTTPS
网络协议·http·https
SVIP111595 小时前
Vue3 WebSocket 封装通关指南:心跳 + 重连 + 全局状态管理,复制即用!
网络·websocket·网络协议
带娃的IT创业者5 小时前
Weclaw 混合通讯架构实战:HTTP+SSE+WebSocket的三元融合如何支撑起整个 AI 助手的实时对话?
websocket·http·fastapi·sse·流式响应·实时通讯·混合架构
taxunjishu5 小时前
MODBUS TCP转Profinet 家纺织造塔讯物联网网关应用实操案例
物联网·网络协议·tcp/ip