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