# 概述
4G模塊支持HTTP和HTTPS協議, HTTP應用的基本流程如下:
1、激活PDP
2、初始化HTTP服務
3、設置HTTP會話參數
4、如果要支持SSL,配置SSL參數
5、如果使用POST命令,輸入POST數據
6、發起HTTP請求
7、收到HTTP應答,讀取應答數據
8、終止HTTP服務
第1步出現異常后:首先需要排查http連接和請求參數是否正常,通過postman是否可以請求成功,模塊上網是否正常(AT+CEREG?)
第2步到第5步,只要輸入格式正確,基本不會出問題;如果出錯,可以跳過,直接處理第6步的異常
第6步和第7步出現異常后:終止HTTP服務,有選擇性的去激活PDP;然后再有選擇性的激活PDP,從第2步開始重新執行
# 材料準備
- [EVB_Air780EP]開發板一套,包括天線SIM卡
- USB線
- PC電腦
- 串口調試工具(如果沒有準備,推薦可以使用llcom,下載地址:https://llcom.papapoi.com)
- AT固件獲取:https://gitee.com/openLuat/airm2m-ec718-at/releases ,進頁面按下Ctrl+F 搜索 **AirM2M_780EP_LTE_AT** 即可找到780EP模塊所使用的AT固件,推薦選用該固件名稱后面數字版本號最高的最新relase版本進行調試。
- 當前文檔示例使用[AirM2M_780EP_V1007_LTE_AT版本固件](https://cdn.openluat-erp.openluat.com/erp_site_file/product_file/sw_file_20240422190620_AirM2M_780EP_V1007_LTE_AT.zip)(除780EP模塊不能燒錄,但可以在上面AT固件獲取連接獲取到其他模塊型號的AT固件。)
# HTTP GET請求示例
具體指令和參數使用說明,可參考[AT指令手冊](https://doc.openluat.com/article/4985)
~~~
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","airtest.openluat.com"
OK
AT+HTTPACTION=0 // GET請求
OK
+HTTPACTION: 0,200,285
AT+HTTPREAD
+HTTPREAD: 285
<2;title>Document<2;/title>
Hello
OK
~~~
在這個過程中,注意事項如下:
>1、發送AT+HTTPACTION命令后,收到OK僅僅表示4G模塊開始處理這條命令,并不表示請求發送成功,收到了應答;只有收到+HTTPACTION: n,statusCode,len才表示請求結束,statusCode表示應答成功,其余都表示應答失敗
>2、HTTP應答數據的緩沖區大小為4KB,如果返回的http body數據超過了這個大小,則需要**斷點下載,可以使用AT+HTTPPARA命令,通過設置BREAK和BREAKEND參數來實現**
>
>2、HTTP被動斷開示例
>發送AT+HTTPACTION命令,和服務器建立了http連接后,如果連接異常被動斷開,會輸出+HTTPACTION: ,,提示
>
>3、PDP被動去激活示例
>先來看下PDP被動去激活時的AT命令處理序列,如果不理解AT命令含義,請自行參考AT手冊。
>
>+PDP DEACT // 出現PDP去激活的URC上報,后面如果沒做任何處理,接著做http請求會失敗,可以按照下方的建議處理。
>
>
>
>應對處理每次結束都需要重新走一遍HTTP請求流程
>
>第一種方法:
>
>AT+CIPSHUT // 關閉移動場景
>
>第二種方法:
>
>AT+CIPSHUT // 關閉移動場景
>
>AT+CGDCONT=5,"IP",""http://請填寫實際APN
>
>AT+CGACT=1,5
>
>第三種方法:
>
>AT+CFUN=0 // 進入飛行模式
>
>AT+CFUN=1 // 退出飛行模式
>
>第四種方法:
>
>AT+RESET // 重啟模塊
參考下發流程中收到"+SAPBR 1: DEACT"錯誤提示,表示PDP被動去激活,為異常處理的觸發點。
~~~
AT+HTTPINIT
OK
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","www.baidu.com"
OK
AT+HTTPACTION=0 // 傳入0為GET請求
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,都直接跳過,不用做正確性判斷
--------------------
下方進行異常處理
AT+CIPSHUT // 關閉移動場景
OK
AT+CGDCONT=5,"IP","" // 請填寫實際APN
OK
AT+CGACT=1,5 // 激活PDP
OK
AT+HTTPINIT
OK
AT+HTTPPARA="CID",1
OK
AT+HTTPPARA="URL","airtest.openluat.com"
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,200,285
~~~
# HTTP POST請求示例
POST請求流程與GET流程基本一致,只有**AT+HTTPACTION**指令參數要從**AT+HTTPACTION=0**變為**AT+HTTPACTION=1**
具體指令和參數使用說明,可參考[AT指令手冊](https://doc.openluat.com/article/4985)
~~~
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","airtest.openluat.com"
OK
AT+HTTPACTION=1 // POST請求
OK
+HTTPACTION: 0,200,285
AT+HTTPREAD
+HTTPREAD: 285
<2;title>Document<2;/title>
Hello
OK
~~~
# HTTPS SSL請求示例
具體指令和參數使用說明,可參考[AT指令手冊](https://doc.openluat.com/article/4985)
帶SSL證書雙向驗證功能的HTTPS過程:
> AT+FSCREATE="ca.crt" // 創建服務器端CA 證書文件
> OK
>
> AT+FSCREATE="client.crt" // 創建客戶端證書文件
> OK
>
> AT+FSCREATE="client.key" // 創建客戶端密鑰文件
> OK
>
> AT+FSWRITE="ca.crt",0,2080,15 // 文件長度2080字節只是舉例,要根據實際填寫。指令發送后會返回">",隨后寫入數據
>
> 這里輸入CA證書文件
> OK
>
> AT+FSWRITE="client.crt",0,128,10 // 指令發送后會返回">",隨后寫入數據
> 這里輸入客戶端證書文件
> OK
>
> AT+FSWRITE="client.key",0,188,10 // 指令發送后會返回">",隨后寫入數據
> 這里輸入客戶端密鑰文件
> OK
>
> AT+SAPBR=3,1,"CONTYPE","GPRS"
> OK
>
> AT+SAPBR=3,1,"APN","" // 設置PDP承載之APN參數 模塊注冊網絡后會從網絡自動獲取并激活一個 PDP上下文,用于RNDIS上網使用(此可以通 過AT+CGDCONT?來查詢),所以輸入 AT+SAPBR=3,,"APN","" 即可,模塊內部會按 照自動獲取的來設置APN
> OK
>
> AT+SAPBR=1,1
> OK
>
> AT+SAPBR=2,1
> +SAPBR: 1,1,010.169.179.213
>
> OK
>
> 下發ssl配置請根據實際請求服務器所需要的進行設置
>
> AT+SSLCFG="cacert",153,"ca.crt" // 設置服務器CA 證書 SSL 上下文id,在TCP單鏈接的情況下缺省為0; 在HTTPS鏈接下為153,下同
> OK
>
> AT+SSLCFG="clientcert",153,"client.crt" // 設置客戶端證書
> OK
>
> AT+SSLCFG="clientkey",153,"client.key" // 設置客戶端KEY
> OK
>
> AT+SSLCFG="seclevel",153,2 // 設置安全等級
> OK
>
> AT+SSLCFG="ciphersuite",153,0X0035 // 設置加密套件
> OK
>
> AT+SSLCFG="clientrandom",153,01B12C31 41516171F19202122232425262728293031 323334353637D // 設置隨機數
> OK
>
> AT+HTTPINIT // HTTP協議棧初始化
> OK
>
> AT+HTTPPARA="CID",1 // 設置HTTP會話參數:CID
> OK
>
> AT+HTTPPARA="URL","https://**.***.***" // 設置HTTP會話參數:URL 請寫具體的網址,而不要照抄
> OK
>
> AT+HTTPACTION=0 // GET 開始
> OK
>
> +HTTPACTION:0,200,1348
>
> +HTTPACTION:0,200,1348
>
> +HTTPACTION:0,200,1348 … … // 出現這些URC上報表明GET數據成功,等待READ
>
> AT+HTTPREAD // 讀取從HTTP 服務器GET的數據
>
> +HTTPREAD:1592 ……………… // ...表示HTTP數據
>
> OK
>
> AT+HTTPTERM // 結束HTTP服務
> OK
# 斷點續傳
在實際的應用場景中,可能需要下載一個非常大的文件,例如幾百K字節、幾M字節,但是4G模塊中HTTP可用的內存緩沖區780EP模塊只有4KB左右,當文件大小超過這個緩沖區時,就要使用斷點續傳功能來分段下載處理了。下面以“下載一個119345字節的文件”為例,來說明如何使用斷點續傳功能(注意:本示例僅僅演示了正常流程的HTTP AT命令,完整流程以及異常處理流程請參考本文應用流程部分)
~~~=
AT+CGATT?
+CGATT: 1
OK
AT+SAPBR=3,1,"CONTYPE","GPRS"
OK
AT+SAPBR=3,1,"APN",""
OK
AT+SAPBR=1,1
OK
AT+SAPBR=2,1
+SAPBR: 1,1,"10.55.195.210"
OK
AT+HTTPINIT
OK
AT+HTTPPARA="URL","http://rcems.hzccs.com/upfile/ROBAM-M2-V13704A7-20240308-APP.bin"
OK
AT+HTTPACTION=2 // 使用head方式請求
OK
+HTTPACTION: 2,200,0
AT+HTTPHEAD
+HTTPHEAD: 247
Accept-Ranges: bytes
ETag: W/"119345-1710117624106"
Last-Modified: Mon, 11 Mar 2024 00:40:24 GMT
Content-Type: application/octet-stream
Content-Length: 119345
Date: Mon, 22 Jul 2024 03:34:24 GMT
Keep-Alive: timeout=20
Connection: keep-alive
OK
//如下指令,表示下載文件的第一個3KB數據
AT+HTTPPARA="BREAK",0
OK
AT+HTTPPARA="BREAKEND",3071
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,206,3072
AT+HTTPREAD
+HTTPREAD: 3072
...... //此處輸出3072字節數據
OK //表示下載文件的第一個3KB數據完成
//如下指令,表示下載文件的第二個3KB數據
AT+HTTPPARA="BREAK",3072
OK
AT+HTTPPARA="BREAKEND",6143
OK
AT+HTTPACTION=0
OK
+HTTPACTION: 0,206,3072
AT+HTTPREAD
+HTTPREAD: 3072
...... //此處輸出3072字節數據
OK //表示下載文件的第二個3KB數據完成
//此處參考上文指令,一直循環讀取文件的下一個300KB數據,直到讀取結束
......
AT+HTTPTERM // 斷開HTTP
OK
~~~
# 常見問題
## 1、HTTP支持多連接嗎
目前HTTP僅支持單連接,不支持多連接
## 2、HTTPS如何使用
本文主要描述了基本流程和異常處理,對于HTTPS使用方法沒有做過多描述,這一部分,請自行參考[AT指令手冊](https://doc.openluat.com/article/4985)HTTP章節下《使用方法舉例》中的"帶SSL證書驗證功能的HTTPS流程"使用方法;支持的SSL參數,請自行參考AT+SSLCFG命令說明
如果SSL的參數配置不變,則每次開機運行過程中,僅設置一次即可
## 3、重試多次PDP,HTTP應用一直連接失敗
如果重試多次PDP激活,PDP一直激活失敗,或者HTTP一直請求應答失敗,則嘗試使用如下手段恢復:
? 使用RESET引腳復位模塊
? 極端情況下,直接給模塊斷電,再上電,POWER KEY引腳拉低開機
## 4、HTTP下載的大文件如何可靠的發送給MCU(AT流控)
需要在斷點續傳流程指令里開頭加入AT+IFC的配置指令
AT+HTTPREAD
+HTTPREAD: 3072
...... //此處輸出3072字節數據
OK
…處的3072字節數據,是模塊通過UART AT口發送給MCU,在實際傳輸過程中,由于串口芯片驅動、MCU端的處理能力、波特率的選擇都存在不確定性,可能會導致MCU端接收到的數據,實際上沒有3072字節,這就要求UART AT口打開流控功能。模塊支持硬流控和軟流控兩種:
硬流控,參考如下步驟操作:
(1) 模塊和 的UART口,CTS、RTS要交叉相連
(2) MCU端固件要支持并且打開硬流控功能
(3) MCU端要發送AT+IFC=2,2命令到模塊端,打開模塊端的硬流控功能
軟流控,參考如下步驟操作:
(1) MCU端固件要支持并且打開軟流控功能
(2) MCU端要發送AT+IFC=1,1命令到模塊端,打開模塊端的硬流控功能
## 5、為什么我只發了10字節消息,100次卻消耗了很多流量?
因為還有HTTP自帶的請求頭。
## 6、為什么頻繁請求會失敗?
支持的http連接總數有限數量為tcp連接數量8個,建議一個http連接返回請求結果之后,再去請求下一個連接;不要使用循環定時器方式不斷的發起新的http請求。
## 7、如何POST文件?
主要是使用AT+HTTPDATA命令錄入文件數據后,發送AT+HTTPACTION=1利用post上傳
## 8、數據發送接收緩存問題
AT版本:有緩存機制,內存中有一個的緩沖區(780EP模塊AT固件HTTP緩存為4KB),發送和接受使用的是同一塊緩沖區,發送和收到數據后,插入此緩沖區,然后通過AT口輸出urc,提示收到的數據長度;緩沖區滿之后,再收到新數據,會丟棄新收到的數據,并通過AT口輸出urc提示出錯;需要讀取數據時,發送AT+HTTPREAD命令讀取,可分段讀取,也可全部讀取
注意:緩沖區位于內存中,斷電或者重啟后,緩存表中的數據會被清空;雖然緩沖區可以緩存很多數據,但是建議收到數據時,通過AT+HTTPREAD及時讀取出來,以防緩沖區滿出錯
-
模塊
+關注
關注
7文章
2695瀏覽量
47431 -
AT
+關注
關注
2文章
192瀏覽量
65202 -
HTTP
+關注
關注
0文章
504瀏覽量
31194 -
合宙通信
+關注
關注
0文章
147瀏覽量
1737
發布評論請先 登錄
相關推薦
評論