zoukankan      html  css  js  c++  java
  • LiteOS通信模组教程02-AT指令玩转2G通信

    1. 环境准备

    硬件准备

    • 小熊派开发板

    BearPi-IoT

    • M26通信模组

    M26通信模组

    软件准备

    • QCOM串口助手

    QCOM串口助手

    文档准备

    此文档来自于移远官方!阅读本教程时,关于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
    

    效果如下:

    Tcp服务器程序

    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
    

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

    连接成功界面

    4.2. 模组接收消息

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

    Hello, client!
    

    4.3. 模组主动发送消息

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

    AT+QISEND
    
    >hello<0x1a>
    

    示例:

    Hello, client!AT+QISEND
    
    > hello
    
    SEND OK
    

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

    收到模组发送数据

    4.4. 关闭TCP连接

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

    AT+QICLOSE
    

    示例:

    AT+QICLOSE
    
    CLOSE OK
    
  • 相关阅读:
    【插件开发】—— 10 JFace开发详解
    百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。
    Python3中遇到UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)
    Python 3.X 要使用urllib.request 来抓取网络资源。转
    python创建目录保存文件
    Python返回数组(List)长度的方法
    python中for、while循环、if嵌套的使用
    (转)python3 urllib.request.urlopen() 错误UnicodeEncodeError: 'ascii' codec can't encode characters
    python 之 string() 模块
    (转)Python3异常-AttributeError: module 'sys' has no attribute 'setdefaultencoding
  • 原文地址:https://www.cnblogs.com/bearpi/p/12383065.html
Copyright © 2011-2022 走看看