域格模组使用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 头和本地记录,可实现断点续传功能。

相关推荐
Kendra9193 小时前
计算机网络--- TCP/IP协议簇
网络协议·tcp/ip·计算机网络
福尔摩斯张20 小时前
插件式架构:解耦与扩展的艺术与实践(超详细)
linux·服务器·网络·网络协议·tcp/ip
FserSuN1 天前
TCP RST 与 Broken Pipe:从协议语义到操作系统信号的体系化梳理
网络·网络协议·tcp/ip
apihz1 天前
全球IP归属地查询免费API详细指南
android·服务器·网络·网络协议·tcp/ip
fiveym1 天前
PXE装机遇DHCP错误:ICMP echo reply导致IP分配失败原理解析
网络协议·tcp/ip·php
梁辰兴1 天前
计算机网络基础:局域网的数据链路层
网络·网络协议·计算机网络·计算机·数据链路层·局域网·梁辰兴
老王熬夜敲代码1 天前
IP和MAC的深入理解
linux·网络·笔记·网络协议
小熊哥^--^1 天前
谈谈对传输层协议TCP的理解
网络·网络协议·tcp/ip
缺的不是资料,是学习的心1 天前
vmware虚拟机ens33拿不到ip,已经开启dhcp了
网络·网络协议·tcp/ip