SIMCOM A7670C 4G Cat.1 模组

SIMCOM A7670C 是一款支持多频段 LTE-TDD/LTE-FDD/GSM/GPRS/EDGE LTE CAT1 模块。
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670

这款模组的特点如下:

  • 支持最高 10Mbps 下载速率和 5 Mbps 上传速率;
  • 具有强大的扩展能力,包括UART,I2C,GPIO等丰富的接口;
  • 封装形式是LGA,与SIM7070系列模块封装兼容;
1. 环境准备

1.1. 硬件准备

SIMCOM A7670 模组官方开发套件:

SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_02
左侧分别是:

  • ① USB转串口线;
  • ② 电源线;

1.2. 软件准备

  • QCOM串口助手
  • AC7670通信模组测试AT命令脚本(AC7670.ini)

本文直接使用USB线连接到模组,使用板载USB转串口测试,连接之后打开设备管理器,可以看到有两个串口,选择图中圈出的串口。

SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_03

使用QCOM工具打开该串口,波特率115200-8-N-1:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_04

1.3. 文档准备

此文档来源于芯讯通官方。

1.4. 模组开机方式

开发套件上已经预留了开机按键,长按两秒即可开机,如图:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_05

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

效果如下:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_06

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

连接之后,在服务器端也可以看到:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_07

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

服务器接收结果为:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_08
② 第二种发送方式(不指定数据大小,使用0x1a结束)

AT+CIPSEND=0

>hi
OK

+CIPSEND: 0,2,2

SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_09

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

效果如下:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_10

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

服务器接收结果为:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_11
① 第二种方式,不指定数据大小,使用0x1a结束:

AT+CIPSEND=0,,"117.50.111.72",8002

>hi
OK

+CIPSEND: 0,2,2

服务器接收结果为:
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_12

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

 
SIMCOM A7670 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程_SIMCOM A7670_13