QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之05【EC20模组TCP/IP模块AT指令说明】
QUECTEL上海移遠(yuǎn)4G通訊CAT4模組EC20CEFAG模塊串口調(diào)試指南之05【EC20模組TCP/IP模塊AT指令說明】
- Socket長連接
- 一、準(zhǔn)備工作
- 二、針對TCP/IP協(xié)議
- 關(guān)于TCP/IP協(xié)議操作的AT指令解釋
原文鏈接:https://blog.csdn.net/praguejing/article/details/116087466
Socket長連接
所謂長連接,指在一個(gè)TCP連接上可以連續(xù)發(fā)送多個(gè)數(shù)據(jù)包,在TCP連接保持期間,如果沒有數(shù)據(jù)包發(fā)送,需要雙方發(fā)檢測包以維持此連接(心跳包),一般需要自己做在線維持。短連接是指通信雙方有數(shù)據(jù)交互時(shí),就建立一個(gè)TCP連接,數(shù)據(jù)發(fā)送完成后,則斷開此TCP連接。比如Http的,只是連接、請求、關(guān)閉,過程時(shí)間較短,服務(wù)器若是一段時(shí)間內(nèi)沒有收到請求即可關(guān)閉連接。其實(shí)長連接是相對于通常的短連接而說的,也就是長時(shí)間保持客戶端與服務(wù)端的連接狀態(tài)。通常的短連接操作步驟是:連接→數(shù)據(jù)傳輸→關(guān)閉連接;
而長連接通常就是:連接→數(shù)據(jù)傳輸→保持連接(心跳)→數(shù)據(jù)傳輸→保持連接(心跳)→……→關(guān)閉連接;
什么時(shí)候用長連接,短連接?長連接多用于操作頻繁,點(diǎn)對點(diǎn)的通訊,而且連接數(shù)不能太多情況,。每個(gè)TCP連接都需要三步握手,這需要時(shí)間,如果每個(gè)操作都是先連接,再操作的話那么處理 速度會降低很多,所以每個(gè)操作完后都不斷開,次處理時(shí)直接發(fā)送數(shù)據(jù)包就OK了,不用建立TCP連接。例如:數(shù)據(jù)庫的連接用長連接, 如果用短連接頻繁的通信會造成Socket錯(cuò)誤,而且頻繁的Socket創(chuàng)建也是對資源的浪費(fèi)。
什么是心跳包為什么需要:心跳包就是在客戶端和服務(wù)端間定時(shí)通知對方自己狀態(tài)的一個(gè)自己定義的命令字,按照一定的時(shí)間間隔發(fā)送,類似于心跳,所以叫做心跳包。網(wǎng)絡(luò)中的接收和發(fā)送數(shù)據(jù)都是使用Socket進(jìn)行實(shí)現(xiàn)。但是如果此套接字已經(jīng)斷開(比如一方斷網(wǎng)了),那發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的時(shí)候就一定會有問題。可是如何判斷這個(gè)套接字是否還可以使用呢?這個(gè)就需要在系統(tǒng)中創(chuàng)建心跳機(jī)制。其實(shí)TCP中已經(jīng)為我們實(shí)現(xiàn)了一個(gè)叫做心跳的機(jī)制。如果你設(shè)置了心跳,那TCP就會在一定的時(shí)間(比如你設(shè)置的是3秒鐘)內(nèi)發(fā)送你設(shè)置的次數(shù)的心跳(比如說2次),并且此信息不會影響你自己定義的協(xié)議。也可以自己定義,所謂“心跳”就是定時(shí)發(fā)送一個(gè)自定義的結(jié)構(gòu)體(心跳包或心跳幀),讓對方知道自己“在線”,以確保鏈接的有效性。
本系列博文將系統(tǒng)性講解物聯(lián)網(wǎng)模組系列的實(shí)際使用和調(diào)試指南,以移遠(yuǎn)4G模組EC20為例(其他廠家模組的調(diào)試方法大同小異),加快嵌入式軟、硬件工程師對物聯(lián)網(wǎng)模組調(diào)試和使用的上手速度。
一、準(zhǔn)備工作
1、軟件:串口調(diào)試助手(推薦官方的QCOM,可以講命令保存為腳本,方便后續(xù)多次的調(diào)用)
2、硬件:EC20硬件套件、USB轉(zhuǎn)串口線及SIM卡
3、文檔:《Quectel_EC20_R2.1_AT_Commands_Manual》、《Quectel_EC2x&EG9x&EM05_TCP(IP)_AT_Commands_Manual_V1.0》
4、硬件環(huán)境搭建:模組正常開機(jī),將模組的串口通過USB轉(zhuǎn)串口正常連接到電腦并且打開QCOM,正常識別到模組對應(yīng)串口;
5、網(wǎng)絡(luò)服務(wù)器:因?yàn)樵O(shè)計(jì)到數(shù)據(jù)和網(wǎng)絡(luò)服務(wù)器兩者間的通訊,所以需要一個(gè)網(wǎng)絡(luò)服務(wù)器實(shí)現(xiàn)數(shù)據(jù)下發(fā)到模組(模組數(shù)據(jù)的上傳需要得知服務(wù)器的IP地址和端口號);
二、針對TCP/IP協(xié)議
針對初次接觸到蜂窩式通訊模組的同學(xué)而言,TCP/IP的連接流程相比會比較陌生,本博文開始講系統(tǒng)性的講解關(guān)于模組在網(wǎng)絡(luò)通訊部分的知識;關(guān)于TCP/IP部分,建議大家參考文檔《Quectel_EC2x&EG9x&EM05_TCP(IP)_AT_Commands_Manual_V1.0》,關(guān)于TCP/IP的鏈接邏輯部分還是很值得大家的參考,可以提高大家對整體的TCP連接的感性認(rèn)識(因?yàn)樽约鹤吡撕芏嗟膹澛?#xff0c;所以分享此文檔給大家)。
關(guān)于AT指令部分:下圖中將關(guān)于TCP/IP的重要AT指令做了標(biāo)出,個(gè)人認(rèn)為紅色框框中是比較重要的部分,需要完全進(jìn)行掌握;
AT指令發(fā)送:由于AT指令比較多,串口助手的窗口顯示不全,我已經(jīng)將AT指令的Log保存為“.txt”文件,大家可以在文檔末尾給出的鏈接中進(jìn)行免費(fèi)下載,進(jìn)行學(xué)習(xí)和分析;
關(guān)于TCP/IP協(xié)議操作的AT指令解釋
1、AT+CGATT?/AT+CGREG?命令:PS域的注冊,命令主要是檢測模組是否注冊到了基站的PS域,簡言之就是模組和基站的數(shù)據(jù)通訊是否建立(注意:CS域主要負(fù)責(zé)通話部分,PS主要負(fù)責(zé)數(shù)據(jù)通訊部分);
2、AT+QICSGP=1,1,“CMNET”,"","",1:關(guān)于APN的設(shè)置問題,大家在使用手機(jī)的時(shí)候或者支持蜂窩的PAD的時(shí)候都沒有進(jìn)行過APN的設(shè)置,網(wǎng)絡(luò)也可以正常連接,為什么需要設(shè)置APN?之前我也很困惑這個(gè)問題,后面有請教到移動內(nèi)部的一位技術(shù)大佬,大佬是這樣回答的:國內(nèi)所有運(yùn)營商網(wǎng)絡(luò)在一開始的時(shí)候并沒有讓設(shè)備的使用者去操作輸入APN,基站側(cè)檢測到未攜帶正確APN的設(shè)備時(shí),基站會進(jìn)行自動糾錯(cuò)PAN,以達(dá)到讓客戶正常上網(wǎng)的目的,隨著國內(nèi)用戶的增加和物聯(lián)網(wǎng)設(shè)備的爆發(fā)式增長,目前基站的糾錯(cuò)能力存在糾錯(cuò)的風(fēng)險(xiǎn),所以如果可能的話還是建議設(shè)備攜帶正確APN進(jìn)行上網(wǎng)。所以最終建議用戶還是需要設(shè)置正確的APN,避免設(shè)備在SIM卡正常,模組正常,APN不正確的情況下造成PS域鏈接網(wǎng)絡(luò)失敗的情況。(其中中國聯(lián)通的APN為:UNINET,中國移動為:CMNET);
3、AT+QIACT=1:激活PDP 的連接,為下一步的TCP/IP的連接做準(zhǔn)備;
4、AT+QIOPEN=1,0,“TCP”,“119.xxx.xxx.29”,xxxx2,0,1:此命令用來創(chuàng)建TCP/IP的連接;此時(shí)需要再服務(wù)器上先建立好服務(wù)器端口,否則發(fā)送此命令會出現(xiàn)創(chuàng)建失敗的提示;模塊支持創(chuàng)建多個(gè)contextID和connectID/socket,默認(rèn)的序號開始分別為1和0;支持TCP、UDP、TCP LISTENER和UDP SERVICE、我們今天講解TCP,所以這個(gè)參數(shù)為TCP;然后為服務(wù)器的IP地址和端口號,根據(jù)自己的實(shí)際地址和端口號進(jìn)行填寫即可;最后一個(gè)參數(shù)為數(shù)據(jù)接收的模式;我們這里選擇1,即Direct push mode;
關(guān)于access_mode:
Buffer access mode:此模式下模組收到服務(wù)器下發(fā)的數(shù)據(jù)是會進(jìn)行提示“+QIURC: “recv”,”.然后可以根據(jù)接收到的數(shù)據(jù)長度和connectID進(jìn)行讀取數(shù)據(jù);
Direct push mode:此模式下模組收到服務(wù)器下發(fā)的數(shù)據(jù)是會進(jìn)行直接顯示,如下圖中串口助手上紅色框中的提示(服務(wù)器我選擇的是收到什么信息回復(fù)什么信息,所以接收到的和發(fā)送的數(shù)據(jù)一樣)
Transparent access mode:此模式是透傳模式,特別適合大數(shù)據(jù)的給服務(wù)器發(fā)送數(shù)據(jù);在此模式下發(fā)送的所有信息都會被發(fā)送到服務(wù)器,包括AT命令;退出時(shí)需要發(fā)送特殊指令“+++”退出;
5、AT+QISEND=1;發(fā)送數(shù)據(jù)開始的命令,發(fā)送此指令后,模組會回復(fù)“>”,等待接受串口數(shù)據(jù)的到來;然后可以發(fā)送數(shù)據(jù)到串口;注意單次發(fā)送的數(shù)據(jù)量應(yīng)該小于等于1460Byte,否則多余的數(shù)據(jù)會被忽略;
6、1A[HEX]:1A的格式需要再HEX模式下進(jìn)行發(fā)送,此特殊字符為模組判斷用戶將數(shù)據(jù)發(fā)送到串口完成的標(biāo)志;發(fā)送此命令后,模組會將數(shù)據(jù)發(fā)送到服務(wù)器;
模組和服務(wù)器的數(shù)據(jù)交互如下所示:
7、AT+QIDEACT=1:此命令用于去激活PDP的連接,簡單理解就是和服務(wù)器斷開連接;
8、AT+QICLOSE=1:此命令為關(guān)閉connectID/socket的連接,把之前的connectID/socket資源進(jìn)行回收;否則下次創(chuàng)建同樣序號的connectID/socket時(shí)會出現(xiàn)創(chuàng)建失敗的情況;
9、AT+QPOWD=1:如果需要低功耗,可以將模組正常關(guān)機(jī);
模組的TCP/IP鏈接的創(chuàng)建和數(shù)據(jù)發(fā)送相對簡單,主要特別注意每次AT指令發(fā)送完畢需要等待模組回復(fù)是否正常,建議大家詳細(xì)閱讀AT指令手冊中相關(guān)的命令,否則會出現(xiàn)錯(cuò)誤或者失敗的現(xiàn)象。
關(guān)于出現(xiàn)錯(cuò)誤或者失敗的處理策略,應(yīng)該遵循手冊中給出的流程圖,避免暴力操作引起模組的損壞。
以上就是針對移遠(yuǎn)4G通訊CAT4模組EC20關(guān)于TCP/IP模塊的AT指令簡單介紹,希望大家能夠?qū)δ=MAT命令調(diào)試方面有一些更加深刻的認(rèn)識,下一節(jié)會針對模組的UDP連接流程和命令進(jìn)行詳細(xì)介紹,敬請期待。
因?yàn)樾【幾约耗芰λ接邢?#xff0c;文中難免有錯(cuò)誤或表達(dá)不到的信息,還望廣大閱讀者留言批評指正,謝謝。
總結(jié)
以上是生活随笔為你收集整理的QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之05【EC20模组TCP/IP模块AT指令说明】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单介绍RESTful风格
- 下一篇: 5款免费国外域名邮箱Mail.ru,Ya