建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

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

确定
我再想想
选择版块

小熊派开源...

发帖: 24粉丝: 1

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2020-2-14 17:38:19 853 6 楼主 显示全部楼层
[干货分享] LiteOS通信模组教程02-AT指令玩转2G通信

# 1. 环境准备 ## 硬件准备 - 小熊派开发板 ![BearPi-IoT](http://mculover666.cn/blog/20191216/iJK93SnGETKt.png?imageslim) - M26通信模组 ![M26通信模组](http://mculover666.cn/blog/20191221/oB0uhxgPYWeO.png?imageslim) ## 软件准备 - QCOM串口助手 ![QCOM串口助手](http://mculover666.cn/blog/20191216/JUoqQ6OVklTM.png?imageslim) ## 文档准备 - [M26 AT命令手册]() >此文档来自于移远官方!阅读本教程时,关于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程序如下: ```py # 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服务器程序](http://mculover666.cn/blog/20191221/WumXqgaHEXyw.png?imageslim) # 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 ``` 连接之后,在服务器端也可以看到: ![连接成功界面](http://mculover666.cn/blog/20191222/eijui8of6oSk.png?imageslim) ## 4.3. 模组接收消息 模组连接到服务器后,服务器会自动发送消息,模组会打印出收到的信息: ``` Hello, client! ``` ## 4.4. 模组主动发送消息 使用如下的命令即可向TCP服务器发送消息,首先设置要发送数据的字节数,等待模组返回`>`后,输入要发送的数据即可,如果发送的数据超过了设置的n个字节,则只发送前n个字节,后面的数据被认为是无效数据,不会发送: ``` AT+QISEND >hello<0x1a> ``` 示例: ``` Hello, client!AT+QISEND > hello SEND OK ``` 发送成功看服务器上运行的TCP服务器是否收到: ![收到模组发送数据](http://mculover666.cn/blog/20191222/YhiUQ9s3Mah3.png?imageslim) ## 4.5. 关闭TCP连接 通信完毕之后,可以使用下面的命令关闭TCP连接: ``` AT+QICLOSE ``` 示例: ``` AT+QICLOSE CLOSE OK ```
举报
分享

分享文章到朋友圈

分享文章到微博

yjt_zhang

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2020-2-15 16:34:25 沙发 显示全部楼层

我使用的是自己的移动卡, 使用 at指令,返回错误,是什么原因?


AT+CSQ

+CSQ: 99,99


AT+CGATT=1

+CME ERROR: 100


AT+QIACT

ERROR



点赞 评论 引用 举报

NB的老王

发帖: 53粉丝: 55

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于2020-2-16 15:44:49 板凳 显示全部楼层

回复:yjt_zhang 发表于 2020-2-15 16:34 我使用的是自己的移动卡, 使用 at指令,返回错误,是什么原因?AT+CSQ+CSQ: 99,99AT+CGATT=1+CME ERROR: 100AT+QIA

你这个好像没收到信号 建议换个地方试试

点赞 评论 引用 举报

yjt_zhang

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于2020-2-16 16:34:17 地板 显示全部楼层

谢谢,不会是信号问题,同一个地方、用同一张卡,手机信号满格,我拿到楼顶上去也是这样。是不是这个m26模块有问题?

点赞 评论 引用 举报

yjt_zhang

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于6 天前 5# 显示全部楼层

+CSQ: 99,99, 這個問題怎麽 解決?

点赞 评论 引用 举报

yjt_zhang

发帖: 0粉丝: 0

级别 : 新手上路

Rank: 1

发消息 + 关注

发表于6 天前 6# 显示全部楼层

如何測試這個M26的2G模塊是好的還是 壞的?

点赞 评论 引用 举报

NB的老王

发帖: 53粉丝: 55

级别 : 版主

Rank: 7Rank: 7Rank: 7

发消息 + 关注

发表于5 天前 7# 显示全部楼层

回复:yjt_zhang 发表于 2020-2-23 16:27 如何測試這個M26的2G模塊是好的還是 壞的?

发指令有回复就说明是好的,手机满格用的是4G网络,不能证明这个地方有2G信号

点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册