簡介
關聯文檔和使用工具:
- AT固件獲取
- AT指令手冊
概述
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版本固件(除780EP模塊不能燒錄,但可以在上面AT固件獲取連接獲取到其他模塊型號的AT固件。)
HTTP GET請求示例
具體指令和參數使用說明,可參考AT指令手冊
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指令手冊
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指令手冊
帶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指令手冊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文章
2670瀏覽量
47340 -
HTTP
+關注
關注
0文章
501瀏覽量
31056 -
合宙通信
+關注
關注
0文章
147瀏覽量
1726
發布評論請先 登錄
相關推薦
評論