移远 M26 GSM模组(2G通信模组)AT指令测试 TCP 通信过程 |
您所在的位置:网站首页 › 移远m26模块 › 移远 M26 GSM模组(2G通信模组)AT指令测试 TCP 通信过程 |
移远M26通信模组
M26 是一款超小的四频 (850/900/1800/1900MHz)LCC 封装 GSM/GPRS 模块,尺寸仅为15.8mm×17.7mm×2.3mm,主要特点有: 供电电压3.3V~4.6V,待机电流低至1.3mA 支持音频功能、蓝牙功能 支持移远远程升级技术 QuecFOTATM 升级 内嵌网络服务协议栈,支持多个 Socket 及 IP 地址 支持的协议:TCP/UDP/PPP/FTP/HTTP/SMTP/CMUX/SSL 1. 环境准备 1.1. 硬件准备 小熊派开发板 M26通信模组小熊派开发板右上角的开关拨到AT-PC一端,则模组直接与PC相连,方便调试。 1.2. 软件准备 QCOM串口助手 M26通信模组测试AT命令脚本(M26.ini)下载地址:https://github.com/Mculover666/QCOM_Tools_Scripts 下载之后在QCOM中导入M26测试脚本的方法如下: 1.3. 文档准备 M26 AT命令手册此文档来自于移远官方!阅读本教程时,关于AT指令的详细说明请参考该文档! 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 功能:查询模组的信号强度 响应:第一个值rssi为信号值,0-31则正常,第二个值ber为误码率,99为不可测。 +CSQ: ,示例: AT+CSQ +CSQ: 17,0 OK AT+CREG?指令:AT+CREG? 功能:查询模组是否注册上GSM网络 响应:第一个参数n为0表示禁用网络注册非请求结果码,第二个参数stat为1表示已注册上本地网,为5表示注册上漫游网,其余值表示注册不成功。 +CREG:,示例: AT+CREG? +CREG: 0,1 OK AT+CGREG?指令:AT+CERGE? 功能:查询模组是否注册上GPRS网络 响应:第一个参数n为0表示禁用网络注册非请求结果码,第二个参数stat为1表示已注册上本地网,为5表示注册上漫游网,其余值表示注册不成功。 +CGREG:,示例: AT+CGREG? +CGREG: 0,1 OK 3. 激活移动场景,获取ip地址必须在查询GPRS网络已正常注册网络的情况下进行本节实验! AT+QIFGCNT=0指令:AT+QIFGCNT=0 功能:配置当前场景 示例: AT+QIFGCNT=0 OK AT+QICSGP=1, “CMNET”指令: AT+QICSGP=,功能: 参数mode设置连接模式,0表示CSD连接模式,1表示GPRS连接模式; 参数apn设置GPRS的APN(移动CMNET、联通UNINET);示例: AT+QICSGP=1, "CMNET" OK AT+QIDEACT指令:AT+QIDEACT 功能:在激活GPRS场景之前先关闭GPRS场景,确保连接正确 示例: AT+QIDEACT DEACT OK AT+QIMUX=1指令: AT+QIMUX=功能: mode为1表示启用多路链接模式; mode为0表示不启用多路链接模式;示例: AT+QIMUX=1 OK AT+QIMODE=0指令: AT+QIMODE=功能:设置数据传输模式,mode为0表示非透传模式,mode为1表示透传模式 示例: AT+QIMODE=0 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效果如下: 4.2. 模组连接服务器M26作为 TCP 客户端的时候,连接TCP服务器的指令需要分以下两种情况对待。 ① 如果是单链路模式(之前设置AT+QIMUX=0),则指令如下: AT+QIOPEN=,/,② 如果是多链路模式(之前设置AT+QIMUX=1),则指令如下: AT+QIOPEN=,,/,其中每个参数的意义如下: index:0-5,多链路模式下有效,表示sokcet连接序号,M26 支持 6 个 SOCKET 同时存在; mode:字符串类型,“TCP”或者“UDP”,表示socket连接模式; Ipaddress:字符串类型,表示服务器ip地址; domain name:字符串类型,表示服务器域名地址; port:整数类型,表示服务器端口号;两条指令的响应: ① 如果格式正确,返回: OK如果格式错误,返回: ERROR② 如果连接成功,返回: [,] CONNECT OK如果连接失败,返回: [,] CONNECT FAIL如果该编号的socket已经存在,返回: ALREAY CONNECT示例: AT+QIOPEN=0,"TCP","117.50.111.72",8902 OK 0, CONNECT OK连接之后,在服务器端也可以看到: 4.2. 模组接收消息M26模组接收消息有两种模式,一种是接收到后直接打印,另一种是接收到缓存区中,使用AT指令读取,另外,还可以控制接收数据时的IP头是否显示。 4.2.1. 接收后直接打印模式① 接收后直接打印,不显示IP头(默认模式): +RECEIVE: 0, 14 Hello, client!② 接收后直接打印,显示IP头,需要配置: AT+QIHEAD=1 OK接收效果如下: +RECEIVE: 0, 14 IPD14:Hello, client! 4.2.2. 接收后保存到缓存区中这种模式需要使用AT指令进行配置。 指令: AT+QINDI=功能:配置是否缓存接收到的数据 参数说明: m = 0:默认模式,接收后直接输出到串口; m = 1:缓存模式1,接收到数据将会向串口上报提示(此时可以通过 AT+QIRD 读取缓存的数据),格式为: +QIRDI: ,, m = 2:缓存模式 2;接收到数据将会向串口上报提示,格式为: +QIRDI: ,,,,,每个 Socket 将建立一个缓存,接收的数据将被保存在缓存中,直到通过 AT+QIRD 读取缓存的数据,缓存数据不应超过400KB。 示例: AT+QINDI=1 OK配置之后,模组接收到数据后就只会上报,如下: +QIRDI: 0,1,0使用AT指令读取数据: AT+QIRD=0,1,0,128 +QIRD: 117.50.111.72:8902,TCP,14 Hello, client! OK 4.3. 模组主动发送消息使用如下的命令即可向TCP服务器发送消息,首先设置要发送数据的字节数,等待模组返回>后,输入要发送的数据即可,如果发送的数据超过了设置的n个字节,则只发送前n个字节,后面的数据被认为是无效数据,不会发送: AT+QISEND >hello示例: Hello, client!AT+QISEND > hello SEND OK发送成功看服务器上运行的TCP服务器是否收到: 4.4. 关闭TCP连接通信完毕之后,可以使用下面的命令关闭TCP连接: AT+QICLOSE示例: AT+QICLOSE CLOSE OK 5. 域名解析指令: AT+QIDNSGIP= |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |