域格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 的起始 / 結束字節,按順序寫入文件,避免文件損壞。