已經寫了一篇基於Air780EP模組AT開發的 ,有客戶朋友詢問能否講講HTTP應用部分?本期特別安排——涵蓋HTTP基本應用流程、GET/POST/SSL請求示例、斷點續傳、常見問題等內容。
Air780EP是一款低功耗4G全網通模組,相容模組行業1618經典封裝,支援OpenCPU開發及全功能數傳AT開發,可廣泛應用於多樣化的物聯網終端。
一、相關準備工作
1.1 硬體準備
-
合宙EVB_Air780EP開發板一套,包括天線、SIM卡;
-
USB線
-
PC電腦
1.2 軟體準備
-
串列埠除錯工具
如果沒有準備,推薦使用LLCOM:
-
AT韌體下載
進入AT韌體下載頁面按下Ctrl+F,搜尋AirM2M_780EP_LTE_AT,即可找到Air780EP模組所使用的AT韌體。
本文使用示例為:
AirM2M_780EP_V1007_LTE_AT版本韌體
推薦選用:相關型號韌體名稱後面數字版本號最高的最新relase版本進行除錯。
二、HTTP應用基本流程
合宙低功耗4G模組支援HTTP和HTTPS協議,HTTP應用的基本流程如下:
-
啟用PDP
-
初始化HTTP服務
-
設定HTTP會話引數
-
如果要支援SSL,配置SSL引數
-
如果使用POST命令,輸入POST資料
-
發起HTTP請求
-
收到HTTP應答,讀取應答資料
-
終止HTTP服務
相關注意事項:
第1步如果出現異常,首先需要排查HTTP連線和請求引數是否正常,透過Postman是否可以請求成功,模組上網是否正常(AT+CEREG?);
第2步到第5步,只要輸入格式正確,基本不會出問題;如果出錯,可以跳過,直接處理第6步的異常;
第6步和第7步如果出現異常:終止HTTP服務,有選擇性的去啟用PDP;然後再有選擇性的啟用PDP,從第2步開始重新執行。
三、HTTP GET請求示例
具體指令和引數使用說明,可參考AT指令手冊:
相關注意事項:
01. 請求及應答
傳送AT+HTTPACTION命令後,收到OK僅僅表示4G模組開始處理這條命令,並不表示請求傳送成功,收到了應答。
只有收到+HTTPACTION: n,statusCode,len才表示請求結束,statusCode表示應答成功,其餘都表示應答失敗。
02. 資料大小限制
HTTP應答資料的緩衝區大小為4KB,如果返回的http body資料超過了這個大小,則需要斷點下載——可以使用AT+HTTPPARA命令,透過設定BREAK和BREAKEND引數來實現。
03. HTTP被動斷開
傳送AT+HTTPACTION命令,和伺服器建立了HTTP連線後,如果連線異常被動斷開,會輸出+HTTPACTION: ,,提示。
04. PDP被動啟用
先來看下PDP被動啟用時的AT命令處理序列,如果不理解AT命令含義,請自行參考AT手冊。
+PDP DEACT // 出現PDP去啟用的URC上報
後面如果沒做任何處理,接著做HTTP請求會失敗,可以按照下方的建議處理。
應對處理每次結束,都需要重新走一遍HTTP請求流程:
第一種方法:
AT+CIPSHUT // 關閉移動場景
第二種方法:
AT+CIPSHUT // 關閉移動場景
AT+CGDCONT=5,"IP",""//請填寫實際APN
AT+CGACT=1,5
第三種方法:
AT+CFUN=0 // 進入飛航模式
AT+CFUN=1 // 退出飛航模式
第四種方法:
AT+RESET // 重啟模組
參考下發流程中收到"+SAPBR 1: DEACT"錯誤提示,表示PDP被動去啟用,為異常處理的觸發點。
四、HTTP POST請求示例
POST請求流程與GET流程基本一致,只有指令引數:
AT+HTTPACTION=0
變為:
AT+HTTPACTION=1
具體指令和引數使用說明,可參考AT指令手冊:
五、HTTPS SSL請求示例
本示例為帶SSL證書雙向驗證功能的HTTPS過程,具體指令和引數使用說明,可參考AT指令手冊:
六、HTTP斷點續傳示例
在實際的應用場景中,可能需要下載一個非常大的檔案,例如幾百K位元組、幾M位元組,但是4G模組中HTTP可用的記憶體緩衝區Air780EP模組只有4KB左右。當檔案大小超過這個緩衝區時,就要使用斷點續傳功能來分段下載處理了。
下文以“下載一個119345位元組的檔案”為例,來說明如何使用斷點續傳功能(注意:本示例僅僅演示了正常流程的HTTP AT命令,完整流程以及異常處理流程請參考本文應用流程部分)。
七、常見問題Q&A
以下針對客戶朋友們實際應用中的反饋,整理了HTTP應用中的常見問題:
01. HTTP支援多連線嗎?
目前HTTP僅支援單連線,不支援多連線。
02. HTTPS如何使用?
本文主要描述了基本流程和異常處理,對於HTTPS使用方法沒有做過多描述。這一部分,請自行參考AT指令手冊HTTP章節下《使用方法舉例》中的"帶SSL證書驗證功能的HTTPS流程"使用方法;支援的SSL引數,請自行參考AT+SSLCFG命令說明。如果SSL的引數配置不變,則每次開機執行過程中,僅設定一次即可。
03. 重試多次PDP,HTTP應用一直連線失敗?
如果重試多次PDP啟用,PDP一直啟用失敗,或者HTTP一直請求應答失敗,請嘗試使用如下手段恢復:
-
使用RESET引腳復位模組;
-
極端情況下,直接給模組斷電,再上電,POWER KEY引腳拉低開機。
04. HTTP下載的大檔案,如何可靠的傳送給MCU(AT流控)?
需要在斷點續傳流程指令裡開頭加入AT+IFC的配置指令:
AT+HTTPREAD
+HTTPREAD: 3072
...... //此處輸出3072位元組資料
OK
此處的3072位元組資料,是模組透過UART AT口傳送給MCU。在實際傳輸過程中,由於串列埠晶片驅動、MCU端的處理能力、波特率的選擇都存在不確定性,可能會導致MCU端接收到的資料,實際上沒有3072位元組,這就要求UART AT口開啟流控功能。
模組支援硬體流控和軟體流控兩種:
硬體流控,參考如下步驟操作:
-
模組和MCU的UART口,CTS、RTS要交叉相連
-
MCU端韌體要支援並且開啟硬流控功能
-
MCU端要傳送AT+IFC=2,2命令到模組端,開啟模組端的硬流控功能
軟體流控,參考如下步驟操作:
-
MCU端韌體要支援並且開啟軟流控功能
-
MCU端要傳送AT+IFC=1,1命令到模組端,開啟模組端的軟流控功能
05. 為什麼我只發了10位元組訊息,100次卻消耗了很多流量?
因為還有HTTP自帶的請求頭。
06. 為什麼頻繁請求會失敗?
HTTP連線總數數量有限,且不支援HTTP2多路複用連線,因此建議等一個HTTP連線返回請求結果之後,再去請求下一個連線;不要使用迴圈定時器方式不斷的發起新的HTTP請求。
07. 如何POST檔案?
主要是使用AT+HTTPDATA命令錄入檔案資料後,傳送AT+HTTPACTION=1利用POST上傳。
08. 資料傳送接收快取問題如何解決?
AT版本有快取機制,記憶體中有一個的緩衝區(Air780EP模組AT韌體HTTP快取為4KB),傳送和接受使用的是同一塊緩衝區。
傳送和收到資料後,插入此緩衝區,然後透過AT口輸出URC,提示收到的資料長度;緩衝區滿之後,再收到新資料,會丟棄新收到的資料,並透過AT口輸出URC提示出錯;需要讀取資料時,傳送AT+HTTPREAD命令讀取,可分段讀取,也可全部讀取。