SIMCOM A7670C 4G Cat.1 模組
SIMCOM A7670C 是一款支持多頻段 LTE-TDD/LTE-FDD/GSM/GPRS/EDGE LTE CAT1 模塊,

這款模組的特點如下:
- 支持最高 10Mbps 下載速率和 5 Mbps 上傳速率;
- 具有強大的擴展能力,包括UART,I2C,GPIO等豐富的介面;
- 封裝形式是LGA,與SIM7070系列模塊封裝兼容;
1. 環境準備
1.1. 硬體準備
SIMCOM A7670 模組官方開發套件:

左側分別是:
- ① USB轉串口線;
- ② 電源線;
1.2. 軟體準備
- QCOM串口助手
- AC7670通信模組測驗AT命令腳本(
AC7670.ini)
本文直接使用USB線連接到模組,使用板載USB轉串口測驗,連接之后打開設備管理器,可以看到有兩個串口,選擇圖中圈出的串口,

使用QCOM工具打開該串口,波特率115200-8-N-1:

1.3. 檔案準備
- A7600 Series_AT Command Manual_V1.01.pdf
此檔案來源于芯訊通官方,
1.4. 模組開機方式
開發套件上已經預留了開機按鍵,長按兩秒即可開機,如圖:

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: 30,99
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網路已正常注冊網路的情況下進行本節實驗!
3.1. 設定TCP/IP應用模式(關閉透傳)
指令:
AT+CIPMODE=<mode>
功能:設定是否透傳
引數:
| 引數 | 說明 |
|---|---|
| 0 | 非透傳模式 |
| 1 | 透傳模式 |
示例:
AT+CIPMODE=0
OK
3.2. 啟動 Socket 服務
指令:AT+NETOPEN
功能:啟動 Socket 服務
示例:
AT+NETOPEN
OK
+NETOPEN: 0
3.3. 查詢本機IP地址
指令:AT+IPADDR
功能:查詢本機IP地址
示例:
AT+IPADDR
+IPADDR: 10.26.195.233
OK
3.4. 停止 Socket 服務
指令:AT+NETCLOSE
功能:停止 Socket 服務
示例:
AT+NETCLOSE
OK
+NETCLOSE: 0
4. TCP/IP接收資料上報格式配置
默認狀態下,模組接收到服務器上報的資料后,上報格式如下:
RECV FROM:117.50.111.72:8001
+IPD14
Hello, client!
4.1. 開啟顯示遠程IP和埠
指令:
AT+CIPSRIP=<mode>
功能:是否顯示遠程IP和埠
引數:
| 引數 | 說明 |
|---|---|
| 0 | 不顯示 |
| 1 | 顯示 |
示例:
AT+CIPSRIP=1
OK
開啟之后,模組接收到服務器的資料上報時,會加上下面的一行,用來指示是哪個socket的資料:
RECV FROM:117.50.111.72:8001
4.2. 開啟資料上報IPD頭
指令:
AT+CIPHEAD=<mode>
功能:是否顯示IPD頭
引數:
| 引數 | 說明 |
|---|---|
| 0 | 不顯示 |
| 1 | 顯示 |
示例:
AT+CIPHEAD=1
OK
開啟之后,模組接收到服務器的資料上報時,會在資料前加上:
+IPD(data length)
5. 基于 TCP 協議連接遠程服務器通信實體
5.1. 搭建遠程TCP服務器
首先我們需要搭建一個TCP服務器,有兩種方式:
- 在服務器上使用Python、Java、C#等語言自行撰寫服務器程式;
- 在本地PC上使用網路除錯助手開啟TCP服務器;
因為 AC7670 模組直接注冊的是公網ip地址,所以這里我們使用第一種方式,在Linux服務器上運行一個Python撰寫的tcp測驗服務器:
本地PC使用的是局域網,公網不可以直接根據ip地址訪問到本PC,需要進行內網穿透,不推薦使用,
這里的Python程式如下:
# tcpserver.py
from socket import *
host = ''
port = 8001
# 創建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
效果如下:

5.2. 模組連接服務器
AT命令:
AT+CIPOPEN=<link_num>,<type>,<serverIP>,<serverPort>[,<localPort>]
功能:在多socket模式下建立TCP/UDP鏈接,最大支持10個socket,
其中引數說明如下:
| 引數 | 說明 |
|---|---|
| link_num | socket號(0-9) |
| type | 協議型別,"TCP"表示建立 TCP socket,"UDP”表示建立UDP Socket |
| serverIP | 服務器ip,字串型別 |
| Remote_Port | 服務器埠,整型(0-65535) |
| localPort | 本地埠號(0-65535),可以不填 |
示例:
AT+CIPOPEN=0,"TCP","117.50.111.72",8001
OK
+CIPOPEN: 0,0
連接之后,在服務器端也可以看到:

5.3. 模組接收訊息
接收訊息的上報格式配置見第 4 節,此處不再贅述,
模組連接到服務器后,服務器會自動發送訊息,所以模組接收之后直接列印出了:
RECV FROM:117.50.111.72:8001
+IPD14
Hello, client!
5.4. 模組主動發送訊息
該命令用于發送字串資料:
AT+CIPSEND=<link_num>,<length>
命令引數說明:
- link_num:整型,socket ID,范圍:0-9;
- length:要發送多少個位元組,范圍:1-1500;
注意:當length為0時,資料中出現0x1a即表示結束;當length不為0時,資料長度達到length即結束,
示例:
① 第一種發送方式(指定資料大小)
AT+CIPSEND=0,5
>hello
OK
+CIPSEND: 0,5,5
服務器接收結果為:

② 第二種發送方式(不指定資料大小,使用0x1a結束)
AT+CIPSEND=0
>hi
OK
+CIPSEND: 0,2,2

5.5. 關閉TCP連接
通信完畢之后,可以使用下面的命令關閉TCP連接:
AT+CIPCLOSE=<link_num>
示例:
AT+CIPCLOSE=0
OK
+CIPCLOSE: 0,0
6. 基于 UDP 協議連接遠程服務器通信實體
6.1. 搭建遠程UDP服務器
首先我們需要搭建一個UDP服務器,有兩種方式:
- 在服務器上使用Python、Java、C#等語言自行撰寫服務器程式;
- 在本地PC上使用網路除錯助手開啟UDP服務器;
因為 AC7670 模組直接注冊的是公網ip地址,所以這里我們使用第一種方式,在Linux服務器上運行一個Python撰寫的udp測驗服務器:
本地PC使用的是局域網,公網不可以直接根據ip地址訪問到本PC,需要進行內網穿透,不推薦使用,
這里的Python程式如下:
# udp-server.py
from socket import *
host = ''
port = 8002
# 創建server socket
server_socket = socket(AF_INET,SOCK_DGRAM)
# 系結socket監聽地址
server_addr = (host,port)
server_socket.bind(server_addr)
print('UDP Server Start...')
# 處理連接請求
while(True):
# 接收客戶端的資料
data, addr = server_socket.recvfrom(1024)
print("Receive from %s:%s" % addr % data)
if data == b"quit":
server_socket.sendto(b"Good bye!\n", addr)
continue
server_socket.sendto(b"Hello,udp client!\n", addr)
運行:
python3 udp-server-8002.py
效果如下:

6.2. 模組建立socket
AT命令:
AT+CIPOPEN=<link_num>,”UDP”,,,<localPort>
功能:在多socket模式下建立UDP鏈接,最大支持10個socket,
其中引數說明如下:
| 引數 | 說明 |
|---|---|
| link_num | socket號(0-9) |
| type | 協議型別,"UDP”表示建立UDP Socket |
| localPort | 本地埠號(0-65535) |
示例:
AT+CIPOPEN=0,"UDP",,,6031
+CIPOPEN: 0,0
OK
6.3. 模組主動發送UDP訊息
該命令用于發送字串資料:
AT+CIPSEND=<link_num>,[<length>],<serverIP>,<serverPort>
命令引數說明:
- link_num:整型,socket ID,范圍:0-9;
- length:要發送多少個位元組(可選),范圍:1-1500,
示例:
① 第一種方式,指定資料大小:
AT+CIPSEND=0,5,"117.50.111.72",8002
>hello
OK
+CIPSEND: 0,5,5
服務器接收結果為:

① 第二種方式,不指定資料大小,使用0x1a結束:
AT+CIPSEND=0,,"117.50.111.72",8002
>hi
OK
+CIPSEND: 0,2,2
服務器接收結果為:

6.4. 模組接收UDP資料
模組發送訊息到服務器后,服務器會自動發送訊息,所以直接列印出了:
RECV FROM:117.50.111.72:8002
+IPD18
Hello,udp client!
6.5. 關閉UDP連接
通信完畢之后,可以使用下面的命令關閉UDP連接:
AT+CIPCLOSE=<link_num>
示例:
AT+CIPCLOSE=0
OK
+CIPCLOSE: 0,0
7. 域名決議
指令:
AT+CDNSGIP=<domain name>
功能:域名決議
示例:
AT+CDNSGIP="www.mculover666.cn"
+CDNSGIP: 1,"www.mculover666.cn","106.75.169.32"
OK
接收更多精彩文章及資源推送,歡迎訂閱我的微信公眾號:『mculover666』,

CSDN認證博客專家
嵌入式軟體開發
IoT全堆疊開發
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224713.html
標籤:其他
上一篇:環保數采儀助力綠水青山建設
