EC600S-CN QuecPython开发板,AT指令开发 (2) - TCP/IP网络连接,透传模式、直吐、缓存-3种数据模式,含用内网穿透映射外网IP

本文主要是介绍EC600S-CN QuecPython开发板,AT指令开发 (2) - TCP/IP网络连接,透传模式、直吐、缓存-3种数据模式,含用内网穿透映射外网IP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

EC600S-CN 使用AT指令控制TCP连接,并使用内网穿透工具映射外网IP,测试联网功能。

同样也适用于 EC200S。(EC200S不支持QuecPython,体积比EC600S略大,但便宜很多)

 

1. 准备

QCOM_V1.6

Quectel_EC200x&EG912Y&EC600S系列_TCP(IP)_应用指导_V1.2.pdf

以上工具和文档已上传GitHub:EC600S-CN 工具及文档下载

内网穿透工具(没有服务器和域名,且又急着要公网IP进行测试,可以使用花生壳、神卓互联等工具,非常方便。花生壳映射外网IP)

 

2. EC600s AT命令 - TCP/IP联网 - 流程图

详见 应用指导的 1.1章节。

 

 

3. 关键AT命令格式

  • 3.1 配置 TCP/IP场景参数 - AT+QICSGP

(1)查询指定场景的配置:AT+QICSGP=<contextID>
(2)配置指定场景的参数:
AT+QICSGP=<contextID>,<context_type>,<APN>,<username>,<password>,<authentication>,<CDMA_pwd>例:
AT+QICSGP=1,1,"CMNET","","",1
场景1,APN接入点名称为 中国移动。(设置完成后配置将保存在非易失性存储器中)

<context ID>:场景ID,范围 1~15。

<context_type>:协议类型。

        1 - IPV4,2 - IPV6,3 - IPV4v6。默认为1 - IPV4。

<APN>:接入点名称。

        用运营商缩写,CMNET、UNINET、CTNET(中国移动、中国联通、中国电信)。

之后参数可以不用配置,为空为默认即可。

 

  • 3.2 激活PDP场景 - AT+QIACT

注意:在用 AT+QIACT 激活场景之前,需要使用 AT+QICSGP 配置场景。场景激活后,可以通过 AT+QIACT? 查询IP地址(运营商为这个模块分配的IP)。

(1)激活PDP场景:AT+QIACT=<contextID>
(2)返回当前所有被激活的场景与IP地址:AT+QIACT?

<context ID>:场景ID,范围 1~15。虽然<contextID>的范围为1~15,但是模块最多仅可同时激活3 路PDP 场景。受网络状态影响,执行AT+QIACT 后,等待返回结果OK 或者ERROR 的最大时间为150 秒,在结果尚未返回之前,无法执行任何AT 命令。

 

TCP场景、PDP场景 都是啥??:手册对他俩的描述没有区分,实际就是一个东西,包含了运营商信息。实际使用中只要根据自己的卡是移动、电信还是联通,配置一个场景就够了,不用深究什么意思。

 

  • 3.3 失能PDP场景 - AT+QIDEACT

(1)去激活(使能)PDP场景:AT+QIDEACT=<contextID>

 

  • 3.4 建立Socket连接 - AT+QIOPEN

(1)建立Socket连接:AT+QIOPEN=<contextID>,<connect ID>,<service_type>,<IP_address>,<remote_port>,<local_port>,<access_mode>例:
AT+QIOPEN=1,0,"TCP","103.46.128.21",8080,0,0

<context ID>:场景ID,范围 1~15。

<connect ID>:Socket ID,范围 0~11。

<service_type>:Socket 服务类型:

        "TCP" 建立TCP客户端连接

        "UDP" 建立UDP客户端连接

        "TCP LISTENER" 建立TCP服务器,并监听TCP连接

        "UDP SERVICE" 建立UDP服务(UDP不是不区分client和server嘛?文档咋回事?

<IP_address>

        如果<service_type>是"TCP"或"UDP",则为远程服务器的IP地址。如果是 "TCP LISTENER"或"UDP SERVICE",请输入 127.0.0.1。

<remote_port>:远程服务器端口,范围0~65535。

        仅当<service_type>是"TCP"或"UDP"时有效。

<local_port>:本地端口,范围0~65535。

        如果<service_type>是"TCP LISTENER"或"UDP SERVICE",该参数必须指定端口。

        如果是"TCP"或"UDP",且<local_port>是0,那么将会自动分配本地端口;否则本地端口会被指定。

<access_mode>:Socket服务的数据访问模式。

        0-缓存模式(Buffer);1-直吐模式(Push);2-透传模式。

 

URC又是啥?:作数据和连接提示用的,在下文实测时会经常看到 +QIURC:。吐槽下官方手册中为啥不写下英文全称?第一眼看好懵

 

  • 3.5 关闭Socket连接 - AT+QICLOSE

(1)关闭Socket连接:AT+QICLOSE=<contextID>

<connect ID>:Socket ID,范围 0~11。

 

  • 3.6 查询现存所有Socket连接状态 - AT+QISTATE

(1)查询现存所有Socket连接状态:AT+QISTATE
返回格式:
+QISTATE: <connect ID>,<service_type>,<IP_address>,<remote_port>,<local_port>,<socket_state>,<context ID>,<serverID>,<access_mode>,<AT_port>例:
AT+QISTATE
+QISTATE: 0,"TCP","103.46.128.21",8080,7531,1,1,0,0,"uart1"OK

<context ID>:场景ID,范围 1~15。

<service_type>:Socket 服务类型。

<IP_address>

<remote_port>:远程服务器端口,范围0~65535。

<local_port>:本地端口,范围0~65535。

<socket_state>:Socket服务状态。

        0 - "Initial":尚未建立连接

        1 - "Opening":客户端正在连接或者服务器正尝试监听

        2 - "Connected":客户端连接已建立

        3 - "Listening":服务器正在监听

        4 - "Closing":连接断开

<context ID>:场景ID,范围 1~15。

<serverID>:只有当<service_type>是"TCP INCOMING"时才有。

<access_mode>:Socket服务的数据访问模式。

<AT_port>:Socket 服务的COM口。

 

 

  • 3.7 三种数据访问模式

(如仅使用透传模式,这部分的AT可以不看)

 

  • 3.8 Socket发送数据 - AT+QISEND

(如仅使用透传模式,这部分的AT可以不看)

(1)Socket发送数据:AT+QISEND=<connect ID>
指定<connect ID>Socket发送消息。Ctrl + z 发送。

注意:AT+QISEND 仅限于 缓存模式、直吐模式 使用。

 

Ctrl + z 发送按不出来怎么办?:(QCOM上按不出来不要慌,左下角勾选上HEX,输入Ctrl+z对应的ASC2码 1A,可实现一样的效果)

 

 

4. 缓存模式的发送和接收

缓存模式:发送和接收都需要指令控制。

例程操作事项:EC600S-CN通过AT命令,用缓存模式发送了 "HELLO!" "HE" 两次消息共8个字节。外网服务器发送来 "Hi!" "I'm Server" 两次消息,但第二帧只命令显示了8个字节,共接收13,已读11,未读2。

RDY
ATOK
AT+CPIN?+CPIN: READYOK
AT+CREG?+CREG: 0,1OK
AT+CGREG?+CGREG: 0,1OK
AT+CEREG?+CEREG: 0,1OK
AT+QICSGP=1+QICSGP: 1,"CMNET","","",1OK
AT+QICSGP=1,1,"CMNET","","",1OK
AT+QIACT=1OK
AT+QIACT?+QIACT: 1,1,1,"10.152.49.227"OK
AT+QIOPEN=1,0,"TCP","103.46.128.21",12931,0,0OK+QIOPEN: 0,0
AT+QISEND=0> HELLO!
SEND OK
AT+QISEND=0,2> HE
SEND OK
AT+QISEND=0,0+QISEND: 8,8,0OK+QIURC: "recv",0
AT+QIRD=0+QIRD: 3
Hi!OK+QIURC: "recv",0
AT+QIRD=0,8+QIRD: 8
I'm ServOK
AT+QIRD=0,0+QIRD: 13,11,2OK

 

 

5. 直吐模式的发送和接收

直吐模式:发送与缓存模式一样,接收时不需要指令控制。

例程操作事项:EC600S-CN通过AT命令,用直吐模式发送了 "HELLO!" 1次消息共6个字节。外网服务器发送来 "Hi!" "I'm Server" 两次消息。

RDY
ATOK
AT+CPIN?+CPIN: READYOK
AT+CREG?+CREG: 0,1OK
AT+CGREG?+CGREG: 0,1OK
AT+CEREG?+CEREG: 0,1OK
AT+QICSGP=1+QICSGP: 1,"CMNET","","",1OK
AT+QICSGP=1,1,"CMNET","","",1OK
AT+QIACT=1OK
AT+QIACT?+QIACT: 1,1,1,"10.130.193.62"OK
AT+QIOPEN=1,0,"TCP","103.46.128.21",12931,0,1OK+QIOPEN: 0,0
AT+QISEND=0> HELLO!
SEND OK+QIURC: "recv",0,3
Hi!+QIURC: "recv",0,10
I'm Server

 

6. 透传模式

透传模式:如果用过ESP8266的AT或者蓝牙透传模块,那这个就很好理解了。不需要任何指令,串口发送什么网络就传输什么。在透传模式下,发送 "+++" 退出透传输入模式,回到指令模式。

AT+QIOPEN=1,0,"TCP","103.46.128.21",12931,0,2

 

总结:透传模式,最方便使用。其次是 直吐模式。不推荐使用缓存模式,如未及时处理接收,容易造成堆积,造成类似TCP粘包的现象。

 

2.2.9之后的指令用处不大,不了解对应用也不会有什么影响。

2.2.9 发送16进制字符串数据

2.2.11 Ping

2.2.12 NTP服务器同步本地时间

2.2.13 配置DNS服务器地址

2.2.14 DNS域名解析指令

2.2.16 回显

2.2.17 查询上一个错误代码

 

7. 连接建立现象

  • 7.1 连接失败

不会立即返回 +QIOPEN: 0,x,且其中的x不为0。

AT+QIOPEN=1,0,"TCP","103.46.128.21",8080,0,0OK+QIOPEN: 0,566
AT+QISTATEOK

 

  • 7.2 连接成功(缓存模式)

连接 内网穿透映射出的外网端口(连接成功后会立即返回 +QIOPEN: 0,0。通过 AT+QISTATE 查询Socket连接状态显示2,"Connected"客户端连接已建立。)

AT+QIOPEN=1,0,"TCP","103.46.128.21",12931,0,0OK+QIOPEN: 0,0
AT+QISTATE+QISTATE: 0,"TCP","103.46.128.21",12931,6792,2,1,0,0,"uart1"OK

 

  • 7.3 连接成功(透传模式)

连接 内网穿透映射出的外网端口(连接成功后会立即返回 CONNECT,之后开始透传,直到输入 "+++" 退出透传模式。第三行的OK,是发送+++退出透传模式的响应。通过 AT+QISTATE 查询Socket连接状态显示2,"Connected"客户端连接已建立。)

AT+QIOPEN=1,0,"TCP","103.46.128.21",12931,0,2CONNECTOK
AT+QISTATE+QISTATE: 0,"TCP","103.46.128.21",12931,9583,2,1,0,0,"uart1"OK

 

 

8. 注意事项 - 输入回车

左下角的输入框,直接按 "Enter回车" 是发送,换行需要使用 Ctrl + "Enter回车"。

 

9. 异常处理

遇到异常,合理应用 AT+QISTATE(查询现存所有连接状态,观察<socket_state>Socket连接状态)、AT+QICLOSE=x(关闭指定Socket),可以很判断错误位置并重新建立连接。

  • 9.1 服务器主动断开连接

商业云平台的用户庞大、稳定性高,是开发物联网应用的首选。可由于接入数量巨大,云服务器会严格限制单个设备的无活动接入时间,超时后主动断开,以节约系统资源。下面以OneNET的80端口为例,模拟下服务器主动断开后的异常处理。

 

透传模式:连接OneNET的80端口。(第三行的OK,是发送+++退出透传模式的响应。第7行的的 +QIURC: "closed",0,是因为保持连接时间过长,OneNET服务器主动断开了连接。查询Socket连接状态显示4,"Closing"连接断开。最后重新发起连接,可由于上次连接发生错误,指令不能被执行)

AT+QIOPEN=1,0,"TCP","183.230.40.33",80,0,2CONNECTOK
AT+QISTATE+QISTATE: 0,"TCP","183.230.40.33",80,6534,2,1,0,0,"uart1"OK+QIURC: "closed",0
AT+QISTATE+QISTATE: 0,"TCP","183.230.40.33",80,6534,4,1,0,0,"uart1"OK
AT+QIOPEN=1,0,"TCP","183.230.40.33",80,0,2ERROR

 

第三行 NO CARRIER,是因为长时间保持连接无动作,OneNET服务器主动断开了连接。查询Socket连接状态显示4,"Closing"连接断开。之后重新发起连接,可由于上次连接发生错误,指令不能被执行。最后使用AT+QICLOSE=0断开Socket后,再次重连成功。

AT+QIOPEN=1,0,"TCP","183.230.40.33",80,0,2CONNECTNO CARRIER
AT+QISTATE+QISTATE: 0,"TCP","183.230.40.33",80,5176,4,1,0,0,"uart1"OK
AT+QIOPEN=1,0,"TCP","183.230.40.33",80,0,2ERROR
AT+QICLOSE=0OK
AT+QIOPEN=1,0,"TCP","183.230.40.33",80,0,2CONNECT

 

  • 9.2 GET请求消息错误

GET请求没有按照OneNET规定的协议发送,导致返回有效信息失败,并且云服务器会主动断开连接。查询Socket连接状态显示4,"Closing"连接断开。

AT+QIOPEN=1,0,"TCP","183.230.40.33",80,0,2CONNECT
HTTP/1.1 400 Bad Request
Server: nginx
Date: Wed, 27 Jan 2021 09:08:25 GMT
Content-Type: text/html
Content-Length: 150
Connection: close<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>NO CARRIER
AT+QISTATE+QISTATE: 0,"TCP","183.230.40.33",80,7800,4,1,0,0,"uart1"OK

 

这篇关于EC600S-CN QuecPython开发板,AT指令开发 (2) - TCP/IP网络连接,透传模式、直吐、缓存-3种数据模式,含用内网穿透映射外网IP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/220055

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof