移遠 EC20 模組(4G通訊模組)AT指令測試 TCP 通訊過程
移遠EC20 4G 模組
LTE Standard EC20 R2.1是移遠通訊推出的 LTE Cat 4 無線通訊模組,採用 LTE 3GPP Rel.11 技術,支援最大下行速率 150Mbps 和最大上行速率 50Mbps,使用LCC封裝,主要特點有:
- 供電電壓: 3.3V~4.3V,典型值 3.8V
- 支援的網路協議棧眾多
- TCP/UDP/PPP/FTP/HTTP/NTP/PING
- QMI/NITZ/CMUX/HTTPS/SMTP/MMS/FTPS/SMTPS/SSL/FILE
- 驅動支援眾多:
- USB 虛擬串列埠驅動
- RIL 驅動、NDIS 驅動、ECM 驅動、Gobinet 驅動、Linux qmi wwan 驅動:
- GNSS支援:GPS/GLONASS/BeiDou/Galileo/QZSS
1. 環境準備
1.1. 硬體準備
EC20通訊模組+USB轉串列埠+一條USB線:
模組引腳圖如下:
1.2. 軟體準備
- QCOM串列埠助手
- EC20通訊模組測試AT命令指令碼(
EC20.ini
) - Windows USB 驅動
使用AT指令測試移遠EC20模組有兩種方法:
① 第一種是使用USB轉串列埠連線模組:
② 第二種是直接使用USB線連線到模組,使用虛擬AT串列埠測試。
本文使用第二種方法,將模組直接通過USB線連線到電腦之後,安裝官方提供的驅動,驅動安裝成功後在裝置管理器中即可看到虛擬AT串列埠:
使用QCOM工具開啟該串列埠,波特率115200-8-N-1:
1.3. 文件準備
- EC20 AT命令手冊:Quectel_EC20_R2.1_AT_Commands_Manual_V1.0.pdf
- EC20 TCP/IP應用手冊:Quectel_EC2x&EG9x&EM05_TCP(IP)_AT_Commands_Manual_V1.0.pdf
此文件來自於移遠官方!閱讀本教程時,關於AT指令的詳細說明請參考該文件!
2. 模組訊號查詢與網路查詢AT指令
AT
指令:AT
功能:測試AT指令功能是否正常
示例:
AT
OK
AT+CPIN?
指令:AT+CPIN?
功能:查詢SIM卡是否正常,返回ready則表示SIM卡正常
示例,如果SIM卡插入成功,則返回結果為:
AT+CPIN?
+CPIN: READY
OK
如果未插入SIM卡,則返回結果為:
AT+CPIN?
+CME ERROR: 10
AT+CSQ
指令:AT+CSQ
功能:查詢模組的訊號強度,第一個值為0-31則正常,99為不正常
示例:
AT+CSQ
+CSQ: 17,0
OK
此處有問題,模組實際返回+CSQ:22,99
AT+CREG?
指令:AT+CREG?
功能:查詢模組是否註冊上GSM網絡,+CREG:0,1 表示已註冊上本地網,+CREG:0,5表示註冊上漫遊網。
示例:
AT+CREG?
+CREG: 0,1
OK
AT+CGREG?
指令:AT+CERGE?
功能:查詢模組是否註冊上GPRS網路,+CGREG:0,1 表示已註冊上本地網,+CGREG:0,5表示註冊上漫遊網。
示例:
AT+CGREG?
+CGREG: 0,1
OK
3. 啟用移動場景
必須在查詢GPRS網路已正常註冊網路的情況下進行本節實驗!
AT+QICSGP=1,1,“CMNET”
指令:AT+QICSGP=1,1,“CMNET”
功能:設定GPRS的APN,移動CMNET,聯通UNINET
示例:
AT+QICSGP=1,1,"CMNET"
OK
AT+QIDEACT=1
指令:AT+QIDEACT=1
功能:在啟用GPRS場景之前先關閉GPRS場景,確保連線正確
示例:
AT+QIDEACT=1
OK
AT+QIACT=1
指令:AT+QIACT=1
功能:啟用移動場景
示例:
AT+QIACT=1
OK
4. 基於 TCP 協議連線遠端伺服器通訊例項
4.1. 搭建遠端TCP伺服器
首先我們需要搭建一個TCP伺服器,有兩種方式:
- 在伺服器上使用Python、Java、C#等語言自行編寫伺服器程式;
- 在本地PC上使用網路除錯助手開啟TCP伺服器;
因為EC20模組直接註冊的是公網ip地址,所以這裡我們使用第一種方式,在Linux伺服器上執行一個Python編寫的tcp測試伺服器:
本地PC使用的是區域網,公網不可以直接根據ip地址訪問到本PC,需要進行內網穿透,不推薦使用。
這裡的Python程式如下:
# tcpserver.py
from socket import *
host = ''
port = 8902
# 建立server socket
server_socket = socket(AF_INET,SOCK_STREAM)
# 繫結socket監聽地址
server_addr = (host,port)
server_socket.bind(server_addr)
# 開始監聽,最大允許連線數5
server_socket.listen(5)
# 處理連線請求
try:
while True:
print('waiting for connect...')
#阻塞等待客戶端的連線
client_socket, client_addr = server_socket.accept()
# 連線成功後,列印客戶端資訊
print('a client connnect from:', client_addr)
while(True):
# 向客戶端傳送資料
client_socket.send('Hello, client!'.encode())
# 接收客戶端的資料
data = client_socket.recv(1024)
print('recv data is ', data.decode())
# 接收到quit則關閉socket
if "quit" in data.decode():
break
# 關閉socket
client_socket.close()
server_socket.close()
print("socket closed.")
break
except:
client_socket.close()
server_socket.close()
print("socket closed.")
執行:
python3 tcp-server.py
效果如下:
4.2. 模組連線伺服器
使用AT命令連線TCP伺服器,其中第一個引數是協議型別,“TCP”則表示使用TCP協議,第二個引數是TCP伺服器ip地址,也可以使用域名,最一個引數是TCP伺服器開啟監聽的埠:
AT+QIOPEN=<contextID>,<connectID>,<service_type>,<IP_address>/<domain_name>,<remote_port>[,<local_port>[,<access_mode>]]
最後一個引數access_mode是接收模式配置,0-緩衝區接收方式,1-直接接收方式。
示例:
AT+QIOPEN=1,0,"TCP","117.50.111.72",8902,0,0
OK
+QIOPEN: 0,0
連線之後,在伺服器端也可以看到:
4.2. 模組接收訊息
模組連線到伺服器後,伺服器會自動傳送訊息,模組還沒有配置,所以直接列印出了:
+QIURC: "recv",0
使用命令讀取資料:
AT+QIRD=0,1500
+QIRD: 14
Hello, client!
OK
直接模式接收效果如下:
+QIURC: "recv",0,14
Hello, client!
4.3. 模組主動傳送訊息
使用如下的命令即可向TCP伺服器傳送訊息,首先設定要傳送資料的位元組數,等待模組返回>
後,輸入要傳送的資料即可,如果傳送的資料超過了設定的n個位元組,則只傳送前n個位元組,後面的資料被認為是無效資料,不會傳送:
AT+QISEND=0
>hello<0x1a>
示例:
AT+QISEND=0
> hello
SEND OK
傳送成功看伺服器上執行的TCP伺服器是否收到:
4.4. 關閉TCP連線
通訊完畢之後,可以使用下面的命令關閉TCP連線:
AT+QICLOSE=<connectID>[,<timeout>]
示例:
AT+QICLOSE=0
OK
5. 域名解析
指令:
AT+QIDNSGIP=<contextID>,<hostname>
功能:域名解析
示例:
AT+QIDNSGIP=1,"www.mculover666.cn"
OK
+QIURC: "dnsgip",0,1,600
+QIURC: "dnsgip","122.51.89.94"
相關文章
- 低功耗4G模組:MQTT通訊功能MQQT
- TCP/IP的通訊過程-VeCloudTCPCloud
- RK3399 4G模組移遠EC20移植除錯除錯
- TCP通訊TCP
- 模組化通訊方式對比
- python 多程式通訊模組Python
- Android模組化改造以及模組化通訊框架Android框架
- Python非同步通訊模組asynchatPython非同步
- Python非同步通訊模組asyncorePython非同步
- modbus tcp通訊TCP
- 網路通訊2:TCP通訊實現TCP
- 網路通訊3:TCP互動通訊TCP
- 網路通訊2:TCP簡單通訊TCP
- ES系列(三):網路通訊模組解析
- 理解TCP/IP、UDP - 通過nodejs的net模組TCPUDPNodeJS
- lora模組是怎麼提過廣播傳輸通訊?
- https的通訊過程HTTP
- Flink - 元件通訊過程元件
- 無線通訊模組透過TCP/IP協議實現與PC端的資料傳輸TCP協議
- 漫遊ZooKeeper nio通訊過程
- 一次HTTP通訊過程HTTP
- 使用tcpdump觀察DNS通訊過程TCPDNS
- 使用4G通訊模組和MQTT協議,完成物聯網裝置開發。MQQT協議
- Linux TCP通訊示例LinuxTCP
- Android TCP socket通訊AndroidTCP
- NModbus4 TCP通訊TCP
- iOS架構設計解耦的嘗試之模組間通訊iOS架構解耦
- Android 元件化之通訊(多模組,多程式)Android元件化
- 參考微信模組化通訊具體實現
- Node.js之網路通訊模組淺析Node.js
- PHP-FPM 與 NGINX 通訊過程PHPNginx
- TCP/IP 通訊傳輸流TCP
- Java實現TCP通訊程式JavaTCP
- 通訊協議:HTTP、TCP、UDP協議HTTPTCPUDP
- Linux中的TCP通訊LinuxTCP
- 中興通訊測試專案實踐:敏捷測試特性文件的交付過程實踐探討敏捷測試
- Linux Shell 指令碼實現 tcp/upd 協議通訊Linux指令碼TCP協議
- 定位模組LuatOS快速入門:源UART串列埠通訊串列埠