LiteOS通信模组教程02-AT指令玩转2G通信

举报
小熊派开源社区 发表于 2020/02/17 14:38:24 2020/02/17
【摘要】 1. 环境准备硬件准备小熊派开发板M26通信模组软件准备QCOM串口助手文档准备M26 AT命令手册此文档来自于移远官方!阅读本教程时,关于AT指令的详细说明请参考该文档!切换开关小熊派开发板右上角的开关拨到AT-PC一端,则模组直接与PC相连,方便调试。所有工具和文档均在『小熊派开源社区』公众号回复“通信模组”获取!2. 模组信号查询与网络查询AT指令AT指令:AT功能:测试AT指令功能是...

1. 环境准备

硬件准备

  • 小熊派开发板

image.png

  • M26通信模组

image.png

软件准备

  • QCOM串口助手

image.png

文档准备

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

切换开关

小熊派开发板右上角的开关拨到AT-PC一端,则模组直接与PC相连,方便调试。

所有工具和文档均在『小熊派开源社区』公众号回复“通信模组”获取!

2. 模组信号查询与网络查询AT指令

AT

指令:AT

功能:测试AT指令功能是否正常

示例:

AT

OK

AT+CPIN?

指令:AT+CPIN?

功能:查询SIM卡是否正常,返回ready则表示SIM卡正常

示例:

AT+CPIN?

+CPIN: READY

OK

AT+CSQ

指令:AT+CSQ

功能:查询模组的信号强度,第一个值为0-31则正常,99为不正常

示例:

AT+CSQ

+CSQ: 17,0

OK

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. 激活移动场景,获取ip地址

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

AT+QIFGTCNT=0

指令:AT+QIFGTCNT=0

功能:配置当前场景

示例:

AT+QIFGCNT=0

OK

AT+QICSGP=1, "CMNET"

指令:AT+QICSGP=1, "CMNET"

功能:设置GPRS的APN,移动CMNET,联通UNINET

示例:

AT+QICSGP=1, "CMNET"OK

AT+QIMODE=0

指令:AT+QIMODE=0

功能:设置数据传输模式,0表示非透传模式,1表示透传模式

示例:

AT+QIMODE=0

OK

AT+QIDEACT

指令:AT+QIDEACT

功能:在激活GPRS场景之前先关闭GPRS场景,确保连接正确

示例:

AT+QIDEACT

DEACT OK

AT+QIREGAPP

指令:AT+QIREGAPP

功能:启动任务并设置接入点APN、用户名和密码

示例:

AT+QIREGAPP

OK

AT+QIACT

指令:AT+QIACT

功能:激活移动场景

示例:

AT+QIACT

OK

AT+QILOCIP

指令:AT+QILOCIP

功能:查看模组获取的IP地址

示例:

AT+QILOCIP

100.125.208.23

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

4.1. 搭建远程TCP服务器

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

  • 在服务器上使用Python、Java、C#等语言自行编写服务器程序;

  • 在本地PC上使用网络调试助手开启TCP服务器;

因为M26模组直接注册的是公网ip地址,所以这里我们使用第一种方式,在Linux服务器上运行一个Python编写的tcp测试服务器:

本地PC使用的是局域网,公网不可以直接根据ip地址访问到本PC,需要进行内网穿透,不推荐使用。

这里的Python程序如下:

# tcp-server.py

from socket import *

host = ''
port = 8000

# 创建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

效果如下:

image.png

4.2. 模组连接服务器

查询ip地址:

AT+QILOCIP

100.125.208.23

使用AT命令连接TCP服务器,其中第一个参数是协议类型,“TCP”则表示使用TCP协议,第二个参数是TCP服务器ip地址,也可以使用域名,最一个参数是TCP服务器开启监听的端口:

AT+QIOPEN=<mode>,<IPaddress>/<domain name>,<port>

示例:

AT+QIOPEN="TCP","122.51.89.94","8000"

OK

CONNECT OK

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

image.png

4.2. 模组接收消息

模组连接到服务器后,服务器会自动发送消息,模组会打印出收到的信息:

Hello, client!

4.3. 模组主动发送消息

使用如下的命令即可向TCP服务器发送消息,首先设置要发送数据的字节数,等待模组返回>后,输入要发送的数据即可,如果发送的数据超过了设置的n个字节,则只发送前n个字节,后面的数据被认为是无效数据,不会发送:

AT+QISEND

>hello<0x1a>

示例:

Hello, client!AT+QISEND

> hello

SEND OK

发送成功看服务器上运行的TCP服务器是否收到:

image.png

4.4. 关闭TCP连接

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

AT+QICLOSE

示例:

AT+QICLOSE

CLOSE OK


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。