广和通 L610 模组(4G Cat.1 通信模组)AT指令测试 TCP/UDP 通信过程

广和通 L610 4G Cat.1 模组

L610系列是广和通LTECat-1系列工业化模组。

L610系列一共有三个版本,全面覆盖亚洲、欧洲以及拉美地区主要运营商网络频段,包含L610-CN/L610-EU/L610-LA(支持Wi-Fi& BT)。

模组包含采用方便贴片的LCC+LGA封装以。与NL668系列PIN兼容,可直接替换。

模组支持FDDLTE/TDD-LTE、GSM制式的远距离通讯模式和支持WIFI、Bluetooth近距离无线传输技术。另外,模组具有丰富的扩展接口,支持UART/ SPI/I2C/USB等接口。内置Codec,支持TTS、recording以及VoLTE。

1. 环境准备

1.1. 硬件准备

L610模组官方开发板:

供电需要插上下面的USB线。

如果想把串口引出来,按照图中这样接:

1.2. 软件准备

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

本文直接使用USB线连接到模组,使用板载USB转串口测试。

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

1.3. 文档准备

  • L610 TCP/IP应用手册:

此文档来自于广和通官方!阅读本教程时,关于AT指令的详细说明请参考该文档!

1.4. 模组开机方式

模组有开机引脚,需要拉低2s才能开机。

模组上有一个自动开机控制端子,接上之后上电自动开机,如图:

如果拔掉这个端子,则需要手动按开机键开机:

如果需要单片机来控制开机引脚,则拔掉端子,手动连接端子处的两个引脚:

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. 设置数据格式

指令:AT+GTSET=“IPRFMT”,X

功能:设置服务器数据上报格式

参数说明:x支持0、1、2、5四个参数。

x的值 格式
0 HEX 格式,不带大小,带标识头+MIPRTCP(默认)
1 字符格式,不带标识头+MIPRTCP
2 字符格式,带标识头+MIPRTCP
5 缓存模式(需要使用+MIPREAD 指令读数据)

示例:

AT+GTSET="IPRFMT",2

OK

4. 激活移动场景

必须在查询GPRS网络已正常注册网络的情况下进行本节实验!

AT+MIPCALL?

指令:AT+MIPCALL?
功能:在激活GPRS场景之前先查询移动场景,如果开启的话先关闭GPRS场景,确保连接正确

示例:

在移动场景已激活的状态下:

AT+MIPCALL?

+MIPCALL: 1,10.175.53.53

OK

AT+MIPCALL=0

OK

+MIPCALL: 0

在移动场景未激活的状态下:

AT+MIPCALL?

+MIPCALL: 0

OK

AT+MIPCALL=1,“CMNET”

指令:AT+MIPCALL=1,“CMNET”

功能:设置GPRS的APN(移动CMNET,联通UNINET),并激活移动场景

示例:

AT+MIPCALL=1,"CMNET"

OK

+MIPCALL: 10.137.70.70

5. 基于 TCP 协议连接远程服务器通信实例

5.1. 搭建远程TCP服务器

首先我们需要搭建一个TCP服务器,有两种方式:

  • 在服务器上使用Python、Java、C#等语言自行编写服务器程序;
  • 在本地PC上使用网络调试助手开启TCP服务器;

因为EC20模组直接注册的是公网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. 模组连接服务器

模组建立socket的AT命令如下:

AT+MIPOPEN=<Socket_ID>,[<Source_Port>],<Remote_IP>,<Remote_Port>,<Protocol>

使用AT命令连接TCP服务器,其中参数说明如下:

参数 说明
Socket_ID socket号(1-6)
Source_Port 本地端口号(0-65535),可以不填
Remote_IP 服务器ip,字符串类型
Remote_Port 服务器端口,整型
Protocol 协议,整型(0:TCP of IPV4,1 UDP of IPV4,2 SSL of IPV4)

示例:

AT+MIPOPEN=1,,"117.50.111.72",8001,0

OK

+MIPOPEN: 1,1

连接之后,在服务器端也可以看到:

5.3. 模组接收消息

模组连接到服务器后,服务器会自动发送消息,模组配置的接收格式是0,所以直接打印出了:

+MIPRTCP: 1,0,48656C6C6F2C20636C69656E7421

5.4. 模组主动发送消息(发送十六进制字符串)

该命令用于发送 16 进制字符串数据:

+MIPSEND=<Socket_ID>,<Data>

命令参数说明:

  • Socket_ID:整型,socket ID,范围:1-6;
  • Data:要发送多少个字节。

模组响应结果为:

  • 发送成功:SEND OK
  • 发送缓存已满:SEND FAIL
  • 连接不存在:ERROR

示例:

AT+MIPSEND=1,15

>

OK

+MIPPUSH: 1,0

+MIPSEND: 1,0,2048

服务器接收结果为:

5.5. 关闭TCP连接

通信完毕之后,可以使用下面的命令关闭TCP连接:

AT+MIPCLOSE=<Socket_ID>

示例:

AT+MIPCLOSE=1

OK

+MIPCLOSE: 1,0

6. 基于 UDP 协议连接远程服务器通信实例

6.1. 搭建远程UDP服务器

首先我们需要搭建一个UDP服务器,有两种方式:

  • 在服务器上使用Python、Java、C#等语言自行编写服务器程序;
  • 在本地PC上使用网络调试助手开启UDP服务器;

因为L610模组直接注册的是公网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.py

效果如下:

6.2. 模组连接服务器

模组建立socket的AT命令如下:

AT+MIPOPEN=<Socket_ID>,[<Source_Port>],<Remote_IP>,<Remote_Port>,<Protocol>

使用AT命令连接TCP服务器,其中参数说明如下:

参数 说明
Socket_ID socket号(1-6)
Source_Port 本地端口号(0-65535),可以不填
Remote_IP 服务器ip,字符串类型
Remote_Port 服务器端口,整型
Protocol 协议,整型(0:TCP of IPV4,1 UDP of IPV4,2 SSL of IPV4)

示例:

AT+MIPOPEN=1,,"117.50.111.72",8002,1

OK

+MIPOPEN: 1,1

6.3. 模组主动发送消息(发送十六进制字符串)

该命令用于发送 16 进制字符串数据:

+MIPSEND=<Socket_ID>,<Data>

命令参数说明:

  • Socket_ID:整型,socket ID,范围:1-6;
  • Data:要发送多少个字节。

示例:

AT+MIPSEND=1,15

>

OK

+MIPPUSH: 1,0

+MIPSEND: 1,0,2048

服务器接收结果为:

6.4. 模组接收UDP数据

模组发送消息到服务器后,服务器会自动发送消息,模组配置的接收格式是0,所以直接打印出了:

+MIPRUDP: 117.50.111.72,8002,1,0,48656C6C6F2C75647020636C69656E74210A

6.5. 关闭UDP连接

通信完毕之后,可以使用下面的命令关闭TCP连接:

AT+MIPCLOSE=<Socket_ID>

示例:

AT+MIPCLOSE=1

OK

+MIPCLOSE: 1,0

7. 域名解析

指令:

AT+MIPDNS=<hostname>

功能:域名解析

示例:

AT+MIPDNS="www.mculover666.cn"

+MIPDNS: "www.mculover666.cn",122.51.89.94

OK

解析百度:

AT+MIPDNS="www.baidu.com"

+MIPDNS: "www.baidu.com",183.232.231.174

OK

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/108308643