3.1.1 TCP/UDP ============= 作者:闫国梁 最后修改时间:2020年7月23日 关键词:\ **TCP,UDP,SOCKET,透传,服务器** 1 概述 ------ Air724模组内置TCP/IP协议栈,提供TCP客户端和服务器端服务(PS:模块没有公网IP所以服务端模式多用于专属VPN网络)。 通过AT指令使用TCP服务主要包含设备联网,配置连接,建立连接,发送数据等步骤,具体流程如图\ `高清版TCP流程图.pdf `__ .. image:: http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20200609174128779_TCP流程图.jpg 2 相关AT指令介绍 ---------------- 2.1 启动多IP连接:AT+CIPMUX --------------------------- 语法规则: +----------+-------------------------------------+-------------------+ | 命令类型 | 语法 | 返回 | +==========+=====================================+===================+ | 设置命令 | AT+CIPMUX= | OK | +----------+-------------------------------------+-------------------+ | 查询命令 | AT+CIPMUX? | +CIPMUX: OK | +----------+-------------------------------------+-------------------+ | 测试命令 | AT+CIPMUX=? | +CIPMUX: (0,1) OK | +----------+-------------------------------------+-------------------+ | 注意事项 | 只在 IP initial | | | | 状态,本命令的设置命令才能设置成功 | | +----------+-------------------------------------+-------------------+ 参数定义: ==== ============ ==== ================== 参数 定义 取值 对取值的说明 ==== ============ ==== ================== \ 多路连接开关 0 单路连接(缺省值) \ 1 多路连接 ==== ============ ==== ================== 2.2 启动任务并设置接入点APN、用户名、密码:AT+CSTT -------------------------------------------------- 语法规则: +----+-------------------------------------+--------------------------+ | 命 | 语法 | 返回 | | 令 | | | | 类 | | | | 型 | | | +====+=====================================+==========================+ | 设 | AT+CSTT=[,[,]] | OK | | 置 | | | | 命 | | | | 令 | | | +----+-------------------------------------+--------------------------+ | 查 | AT+CSTT? | +CSTT: ,, OK | | 询 | | | | 命 | | | | 令 | | | +----+-------------------------------------+--------------------------+ | 测 | AT+CSTT=? | +CSTT: | | 试 | | “APN”,“USER”,“PWD” OK | | 命 | | | | 令 | | | +----+-------------------------------------+--------------------------+ | 注 | 1) 设置命令和执行命令只有在 IP | | | 意 | INITIAL | | | 事 | 状态下 | | | 项 | 执行有效。执行设置命令后,状态变为 | | | | IP START 2) | | | | 模块注册网络后会从网络自动获 | | | | 取并激活一个PDP上下文,用于RNDIS上 | | | | 网使用。此可以通过AT+CGDCONT?来查询 | | | | V980之前(不含V980),需 | | | | 要AT+CGDCONT?查询得到后设置AT+CSTT= | | | | V980之后 | | | | (包含V980),直接输入AT+CSTT即可, | | | | 模块会按照自动获取的来设置CSTT的APN | | +----+-------------------------------------+--------------------------+ 参数定义: ==== =============== ==== ============================================= 参数 定义 取值 对取值的说明 ==== =============== ==== ============================================= \ GPRS 接入点名称 - 字符串参数(双引号可加可不加),不超过128个字符 \ GPRS 用户名 - 字符串参数(双引号可加可不加),不超过32个字符 \ GPRS 密码 - 字符串参数(双引号可加可不加),不超过32个字符 ==== =============== ==== ============================================= 2.3 激活移动场景(或发起GPRS 或CSD无线连接):AT+CIICR ---------------------------------------------------- 语法规则: +---+---------------------------------+-------------------------------+ | 命 | 语法 | 返回和说明 | | 令 | | | | 类 | | | | 型 | | | +===+=================================+===============================+ | 执 | AT+CIICR | 如果激活成功,返回: OK | | 行 | | 如果激活失败,返回: ERROR | | 命 | | | | 令 | | | +---+---------------------------------+-------------------------------+ | 测 | AT+CIICR=? | 返回: OK | | 试 | | | | 命 | | | | 令 | | | +---+---------------------------------+-------------------------------+ | 注 | AT+CIICR 只有在IP | | | 意 | START状态下才能 | | | 事 | 激活移动场景,执行后状态变为IP | | | 项 | CONFIG。 | | | | 在模块接受激活场景操作后,如 | | | | 果移动场景激活成功,状态变为IPG | | | | PRSACT,返回OK,否则返回ERROR。 | | +---+---------------------------------+-------------------------------+ 2.4 查询本地IP地址:AT+CIFSR ---------------------------- 语法规则: +------+----------------------------------------------------+----------+ | 命令 | 语法 | 返 | | 类型 | | 回和说明 | +======+====================================================+==========+ | 执行 | AT+CIFSR | | | 命令 | | | +------+----------------------------------------------------+----------+ | 测试 | AT+CIFSR=? | OK | | 命令 | | | +------+----------------------------------------------------+----------+ | 注意 | 只 有 在 移 动 场 景 已 激 活 的 状 态 : IP | | | 事项 | GPRSACT 、 TCP/UDPCONNECTING 、 CONNECT OK 、 IP | | | | CLOSE 下 才 可 以 通 过AT+CIFSR 查询得到本地 IP | | | | 地址,否则返回 ERROR | | +------+----------------------------------------------------+----------+ 参数定义: ==== ======= ==== ============================ 参数 定义 取值 对取值的说明 ==== ======= ==== ============================ \ IP 地址 - 字符串参数(字符串需要加引号) ==== ======= ==== ============================ 2.5 设置TCP使用SSL功能:AT+CIPSSL --------------------------------- 语法规则: +-----+-----------------------------------------------+----------------+ | 命 | 语法 | 返回 | | 令 | | | | 类 | | | | 型 | | | +=====+===============================================+================+ | 设 | AT+CIPSSL= | OK | | 置 | | | | 命 | | | | 令 | | | +-----+-----------------------------------------------+----------------+ | 查 | AT+CIPSSL? | +CIPSSL: OK | | 询 | | | | 命 | | | | 令 | | | +-----+-----------------------------------------------+----------------+ | 测 | AT+CIPSSL=? | +CIPSSL: (0-1) | | 试 | | OK | | 命 | | | | 令 | | | +-----+-----------------------------------------------+----------------+ | 注 | 在CIPSTART之前输 | | | 意 | 入设置命令AT+CIPSSL=1来打开SSL功能。打开SSL功 | | | 事 | 能后,模块会在TCP连接建立后自动进行SSL验证。 | | | 项 | 当前仅支持作为SSL Client应用。 | | +-----+-----------------------------------------------+----------------+ 参数定义: ==== =========== ==== ============ 参数 定义 取值 对取值的说明 ==== =========== ==== ============ \ SSL功能开关 0 关闭SSL \ 1 打开SSL ==== =========== ==== ============ 2.6 配置TCP SSL参数:AT+SSLCFG ------------------------------ 设置命令用来设置SSL版本,SSL加密算法(ciphersuites),安全等级(security level),CA 证书(Certificate Authority Certificate),客户端证书(client certificate)和客户端密钥(client key)。这些参数在SSL协议的握手过程中会用到。 语法规则: +---+-----------------------------+-----------------------------------+ | 命 | 语法 | 返回 | | 令 | | | | 类 | | | | 型 | | | +===+=============================+===================================+ | 设 | AT+SSLCFG=“sslversion”,[,] | ** | | 置 | | 如果缺失,则查询对应的SSL版本:** | | 命 | | +SSLCFG: “sslversion”,, OK | | 令 | | **否则,设置对应的SSL版本:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“ciphersuite”,[,] | **如 | | | | 果缺失,则查询对应的加密算法:** | | | | +SSLCFG: ciphersuite",, OK | | | | **否则,设置对应的加密算法:** | | | | 如果格式和参数正确,返回: OK | | | | 如果目录格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“cacert”,[,] | **如果参数 | | | | 缺失,则查询对应的CA证书路径:** | | | | +SSLCFG:“cacert”,, OK | | | | **否则,设置对应的CA证书路径:** | | | | 如果格式和参数正确,返回: OK | | | | 如果目录格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“clientcert”,[,] | **如果参数缺失, | | | | 则是查询对应的客户端证书路径:** | | | | +SSLCFG:“clientcert”,, OK | | | | **否 | | | | 则,设置对应的客户端证书路径:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“clientkey”,[,] | **如果缺失, | | | | 则是查询对应的客户端密钥路径:** | | | | +SSLCFG:“clientkey”,, OK | | | | **否 | | | | 则,设置对应的客户端密钥路径:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“seclevel”,[,] | **如果参数缺 | | | | 失,则是查询相关的安全等级**\ : | | | | +SSLCFG:“seclevel”,, OK | | | | **否则,设置对应的安全等级:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“hostname”,[,] | **如果 | | | | 参数缺失,则是查询相关的域名:** | | | | +SSLCFG:“hostname”,, OK | | | | **否则,设置对应的主机名:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+S | **如果缺失,则是查询相关 | | | SLCFG=“ignorelocaltime”,[,] | 的证书过期时间检查这项的设置:** | | | | +SSLCFG:“ignorelocaltime”,, OK | | | | **否则,设 | | | | 置对应的证书过期时间检查参数:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SS | **如果参数缺失, | | | LCFG=“negotiatetimeout”,[,] | 则是查询对应的最大SSL协商时间:** | | | | +SSLCFG:“negotiatetimeout”,, OK | | | | **否则, | | | | 设置对应的最大SSL写上协商时间:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | A | **如果 | | | T+SSLCFG=“clientrandom”,[,] | 缺失,则是查询相关的随机数**\ : | | | | +SSLCFG:“clientrandom”,, OK | | | | **否则,设置对应的随机数:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“premaster”,[,] | **如果缺失,则是查询相关的:** | | | | +SSLCFG:“premaster”,, OK | | | | **否则,设置对应的premaster:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=“verifymode”,[,] | **如果缺失,则查询 | | | | 相关的证书验证模式,此时返回:** | | | | +SSLCFG:" verifymode",, OK | | | | **否则,设置证书认证模式 | | | | 是根证书认证还是其他证书认证:** | | | | 如果格式和参数正确,返回: OK | | | | 如果命令格式或参数错误,返回: | | | | ERROR | +---+-----------------------------+-----------------------------------+ | | AT+SSLCFG=”XXXXX”,, | 擦除相应的 | | | | 参数。”XXXXX”是指:“sslversion”, | | | | “ciphersuite”,“cacert”等关键字。 | | | | **注意:后一定要有逗号, | | | | 如果后面没有逗号,则只是查询。** | +---+-----------------------------+-----------------------------------+ | 测 | AT+SSLCFG=? | OK | | 试 | | | | 命 | | | | 令 | | | +---+-----------------------------+-----------------------------------+ | 注 | TCP | | | 意 | SSL的功能示 | | | 事 | 例,请参考本章后面的例子。 | | | 项 | | | +---+-----------------------------+-----------------------------------+ 参数定义: +--------+-----------------------+-------+-----------------------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +========+=======================+=======+=============================+ | | SSL上下文 id | 0~5 | 整数型。 | | | | ,34,8 | TCP功能时与 | | | | 8,153 | CIPSTART中的绑定。例如:当 | | | | | 多链接中CIPSTART中设置链接 | | | | | 号为1,则SSL上下文id也为1。 | | | | | TCP | | | | | 单链接中SSL上下文id固定为0. | | | | | FTP功能时=34(十进制) | | | | | MQTT功能时=88(十进制) | | | | | HTTP功能时=153(十进制) | +--------+-----------------------+-------+-----------------------------+ | | SSL 版本 | 0 | SSL3.0 | +--------+-----------------------+-------+-----------------------------+ | | | 1 | TLS1.0 | +--------+-----------------------+-------+-----------------------------+ | | | 2 | TLS1.1 | +--------+-----------------------+-------+-----------------------------+ | | | 3 | TLS1.12 | +--------+-----------------------+-------+-----------------------------+ | | | 4 | ALL above | +--------+-----------------------+-------+-----------------------------+ | | SSL ciphersuites | 0 | T | | | | X0035 | LS_RSA_WITH_AES_256_CBC_SHA | +--------+-----------------------+-------+-----------------------------+ | | | 0 | T | | | | X002F | LS_RSA_WITH_AES_128_CBC_SHA | +--------+-----------------------+-------+-----------------------------+ | | | 0 | TLS_RSA_WITH_RC4_128_SHA | | | | X0005 | | +--------+-----------------------+-------+-----------------------------+ | | | 0 | TLS_RSA_WITH_RC4_128_MD5 | | | | X0004 | | +--------+-----------------------+-------+-----------------------------+ | | | 0 | TL | | | | X000A | S_RSA_WITH_3DES_EDE_CBC_SHA | +--------+-----------------------+-------+-----------------------------+ | | | 0 | TLS_ | | | | X003D | RSA_WITH_AES_256_CBC_SHA256 | +--------+-----------------------+-------+-----------------------------+ | | | 0 | ALL above | | | | XFFFF | | +--------+-----------------------+-------+-----------------------------+ | | 被信任的CA 证书路径 | | 字符串型 | +--------+-----------------------+-------+-----------------------------+ | | 客户端证书路径 | | 字符串型 | +--------+-----------------------+-------+-----------------------------+ | | 客户端密钥路径 | | 字符串型 | +--------+-----------------------+-------+-----------------------------+ | | 安全等级 | 0 | No authentication | +--------+-----------------------+-------+-----------------------------+ | | | 1 | 服务器鉴权 | +--------+-----------------------+-------+-----------------------------+ | | | 2 | 服务器鉴权和客户端 | | | | | 鉴权(如果服务器要求的话) | +--------+-----------------------+-------+-----------------------------+ | | 主机名 | | | +--------+-----------------------+-------+-----------------------------+ | | 该参数 | 0 | 关心证书的过期时间 | | | 决定如何对待过期证书 | | | +--------+-----------------------+-------+-----------------------------+ | | | 1 | 忽略证书的过期时间 | +--------+-----------------------+-------+-----------------------------+ | | SSL协商阶段的最大时间 | 1 | 单位:秒 | | | | 0~300 | | +--------+-----------------------+-------+-----------------------------+ | | 随机数, | 数字 | 字符串型,双引号可加 | | | 十六进制数组成的字符 | 和字 | 可不加,数字的范围:0~9,字 | | | 串,支持56和64个字节 | 母的 | 母的范围:ABCDEF(大小写不 | | | | 组合 | 敏感)。例如56个字节的:10 | | | | | 1B12C3141516171F19202122232 | | | | | 425262728293031323334353637 | +--------+-----------------------+-------+-----------------------------+ | | premaster | | | +--------+-----------------------+-------+-----------------------------+ | | 证书验证模式 | 0 | 根证书认证 | +--------+-----------------------+-------+-----------------------------+ | | | 1 | 其他证书认证 | +--------+-----------------------+-------+-----------------------------+ 2.7 建立TCP连接或注册UDP端口号:AT+CIPSTART ------------------------------------------- 语法规则: +---+--------------------------------+--------------------------------+ | 命 | 语法 | 返回和说明 | | 令 | | | | 类 | | | | 型 | | | +===+================================+================================+ | 设 | 单 路 连 接 (+CIPMUX=0)时: | 如果格式正确且处于IP INITIAL | | 置 | AT+CIPSTART=,, 或 | 或者 IP STATUS或TCP/UDP | | 命 | AT+CIPSTART=,, | CLOSE状态,返回: **OK** | | 令 | | 否则返回: **+CME ERROR ** | | | | 紧接着会有\ | | | | **URC**\ 上报,上报内容如下: | | | | 如果连接已经存在,返回: | | | | **ALREADY CONNECT** | | | | 如果连接成功(非透传),返回: | | | | **CONNECT OK** | | | | 如果连接成功(透传),返回: | | | | **CONNECT** 否则返回: **STATE: | | | | ** **CONNECT FAIL** | +---+--------------------------------+--------------------------------+ | | 多路连接(+CIPMUX=1)时: | 如果格式正确且处于 IP | | | AT+CIPSTART=,,< IP address>, | STATUS或IP | | | 或 AT+CIPSTART=,,, | PROCESSING时,返回: **OK** | | | | 否则返回: **+CME ERROR ** | | | | 紧接着会有\ | | | | **URC**\ 上报,上报内容如下: | | | | 如果连接已经存在, 返回: | | | | **,ALREADY CONNECT** | | | | 如果连接成功,返回: | | | | **,CONNECT OK** 否则返回: | | | | **,CONNECT FAIL** | +---+--------------------------------+--------------------------------+ | 测 | AT+CIPSTART=? | 单路连接(+CIPMUX=0)时返回: | | 试 | | +CIPSTART: (取值列表),(IP | | 命 | | address range),(port range)? | | 令 | | +CIPSTART: (取值列表),(domain | | | | name),(port range) OK | +---+--------------------------------+--------------------------------+ | | | 多路连接(+CIPMUX=1)时返回: | | | | +CIPSTART: ( 取 值 列 表 ),( | | | | 取 值 列 表 ),(IP | | | | addressrange),(port range) | | | | +CIPSTART: (取值列表),( | | | | 取值列表),(domain | | | | name),(portrange) OK | +---+--------------------------------+--------------------------------+ | 注 | 此命令应用于建立 TCP/UDP | | | 意 | 连接; | | | 事 | 当前状态可用AT+CIPSTATUS查询; | | | 项 | 单路连接时只当前状态为IP | | | | INITIAL 或者 IP | | | | STATUS或TCP/UDP CLOSE | | | | 时可执行,多路连接时当前状态为 | | | | IP STATUS或IP | | | | PROCESSING时可执行; | | | | 在当前状 | | | | 态不是上述可执行状态时,需执行 | | | | AT+CIPSHUT后再开始建立连接; | | | | 多路连接时,设 | | | | 置此命令前,必须先执行AT+CSTT, | | | | AT+CIICR,AT+CIFSR这三个命令。 | | +---+--------------------------------+--------------------------------+ 参数定义: +------+-------------------+-------------------+-------------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +======+===================+===================+===================+ | | Link No. | 0~5 | 整数 | | | | | 型,表示连接序号 | +------+-------------------+-------------------+-------------------+ | | 连接类 | “TCP” | 建立TCP连接 | | | 型,字符串型(双 | | | | | 引号可加可不加) | | | +------+-------------------+-------------------+-------------------+ | | | “UDP” | 建立UDP连接 | +------+-------------------+-------------------+-------------------+ | | 远端服务器 IP | 最大32个字节 | 字符串参数(双 | | | 地址 | | 引号可加可不加) | +------+-------------------+-------------------+-------------------+ | | 远端服务器域名 | 最大32个字节 | 字符串参数(双 | | | | | 引号可加可不加) | +------+-------------------+-------------------+-------------------+ | | 远端服务端口 | 1~65535 | 整数型 | +------+-------------------+-------------------+-------------------+ | | 单连接状态 | IP INITIAL | 初始化 | +------+-------------------+-------------------+-------------------+ | | | IP START | 启动任务 | +------+-------------------+-------------------+-------------------+ | | | IP CONFIG | 配置场景 | +------+-------------------+-------------------+-------------------+ | | | IP GPRSACT | 场景已激活 | +------+-------------------+-------------------+-------------------+ | | | IP STATUS | 获得本地 IP 状态 | +------+-------------------+-------------------+-------------------+ | | | TCP | TCP 连接中/UDP | | | | CONNECTING/UDP | 端口注 | | | | CONNECTING/SERVER | 册中/服务器侦听中 | | | | LISTENING | | +------+-------------------+-------------------+-------------------+ | | | CONNECT OK | 连接建立成功 | +------+-------------------+-------------------+-------------------+ | | | TCP CLOSING/UDP | 正在关闭 TCP | | | | CLOSING | 连接,正在注销 | | | | | UDP 端口 | +------+-------------------+-------------------+-------------------+ | | | TCP CLOSED/UDP | 连接断开 /UDP | | | | CLOSED | 端口被注销 | +------+-------------------+-------------------+-------------------+ | | | PDP DEACT | 场景被释放 | +------+-------------------+-------------------+-------------------+ 2.8 选择TCPIP应用模式:AT+CIPMODE --------------------------------- 语法规则: +----------+----------------------------+----------------------------+ | 命令类型 | 语法 | 返回 | +==========+============================+============================+ | 设置命令 | AT+CIPMODE= | OK | +----------+----------------------------+----------------------------+ | 查询命令 | AT+CIPMODE? | +CIPMODE: OK | +----------+----------------------------+----------------------------+ | 测试命令 | AT+CIPMODE=? | +CIPMODE: (0-NORMAL | | | | MODE,1-TRANSPARENT MODE) | | | | OK | +----------+----------------------------+----------------------------+ | 注意事项 | 此命令只有在IP | | | | INITIAL状态下才能进行设置 | | | | 只有T | | | | CP单链接才支持透明传输模式 | | +----------+----------------------------+----------------------------+ 参数定义: ==== ============= ==== ============== 参数 定义 取值 对取值的说明 ==== ============= ==== ============== \ TCPIP应用模式 0 非透明传输模式 \ 1 透明传输模式 ==== ============= ==== ============== 2.9 选择非透传数据发送模式:AT+CIPQSEND --------------------------------------- 语法规则: ======== ============= ===================== 命令类型 语法 返回 ======== ============= ===================== 设置命令 AT+CIPQSEND= OK 查询命令 AT+CIPQSEND? +CIPQSEND: OK 测试命令 AT+CIPQSEND=? +CIPQSEND: (0,1,2) OK ======== ============= ===================== 参数定义: +------+--------------------+------+--------------------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +======+====================+======+==========================+ | | 非透传数据发送模式 | 0 | 缺省值。快发模式0。 | | | | | 当服 | | | | | 务器收到数据,模块返回: | | | | | SEND OK (单链接) 或 , | | | | | SEND OK (多链接) | +------+--------------------+------+--------------------------+ | | | 1 | 快发 | | | | | 模式1。当数据发送到模块 | | | | | , 终 端 返 回: | | | | | DATAACCEPT: (单链接) | | | | | DATAACCEPT:, (多链接) | +------+--------------------+------+--------------------------+ | | | 2 | 慢发模式 | | | | | 当服 | | | | | 务器收到数据,模块返回: | | | | | SEND OK (单链接) 或 , | | | | | SEND OK (多链接) | +------+--------------------+------+--------------------------+ 注: 慢发模式每发送一笔数据需要服务器那边的确认,而快发则发送到模块就可以了,不需要服务器的确认。推荐使用0或1,即快发模式; 这两种快发模式实现机制没有区别,区别只在于发送完数据,模式0提示SEDN OK,模式1提示DATA ACCEPT; 建议使用CIPACK命令查询每笔数据对端是否已经收到 2.10 设置接收的数据末尾是否自动添加回车换行:AT+CIPRXF ------------------------------------------------------ 语法规则: ======== =========== ======================== 命令类型 语法 返回 ======== =========== ======================== 设置命令 AT+CIPRXF= OK 查询命令 AT+CIPRXF? +CIPRXF: OK 测试命令 AT+CIPRXF=? +CIPRXF: (的取值列表) OK ======== =========== ======================== 参数定义: +------+------+------+-------------------------------------------------------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +======+======+======+=============================================================+ | | 模式 | 0 | 每笔收到的数据末尾自动添加一个回车换行(:raw-latex:`\r\n`) | +------+------+------+-------------------------------------------------------------+ | | | 1 | 每笔收到的数据末尾不添加回车换行(:raw-latex:`\r\n`) | +------+------+------+-------------------------------------------------------------+ 2.11 配置透明传输模式:AT+CIPCCFG --------------------------------- 语法规则: +---+--------------------------------+--------------------------------+ | 命 | 语法 | 返回 | | 令 | | | | 类 | | | | 型 | | | +===+================================+================================+ | 设 | AT+CIPCCFG=,,,[,,,,] | OK | | 置 | | | | 命 | | | | 令 | | | +---+--------------------------------+--------------------------------+ | 查 | AT+CIPCCFG? | +CIPCCFG: ,,,,,,, OK | | 询 | | | | 命 | | | | 令 | | | +---+--------------------------------+--------------------------------+ | 测 | AT+CIPCCFG=? | +CIPCCFG: | | 试 | | (NmRetry:3-8),(WaitTm:2-10 | | 命 | | ),(SendSz:1-1460),(esc:0,1),(R | | 令 | | xmode:0,1),(RxSize:50-1460),(R | | | | xtimer:20-1000),(BufClean:0,1) | | | | OK | +---+--------------------------------+--------------------------------+ | 注 | 此命 | | | 意 | 令只在单路连接(AT+CIPMUX=0) | | | 事 | 且AT+CIPMODE=1的情况下可以设置 | | | 项 | | | +---+--------------------------------+--------------------------------+ 参数定义: +------+------------------------+---------+------------------------+ | 参数 | 定义 | 取值 | 对取值的说明 | +======+========================+=========+========================+ | | 一个IP包的重传次数 | 3~8 | 缺省值为5 | +------+------------------------+---------+------------------------+ | | 间隔发送时间 | 2~10 | 单位为 | | | | | 100ms,缺省值为2。 | +------+------------------------+---------+------------------------+ | | 每次发送数据字节数 | 1~1460 | 缺省值为1024 | +------+------------------------+---------+------------------------+ | | 是否开启转义序列 | 1 | 开启转义序列,缺省值 | +------+------------------------+---------+------------------------+ | | | 0 | 不开启转义序列 | +------+------------------------+---------+------------------------+ | | 从串口 | 1 | 设置时间间隔,间隔为 | | | 接收数据的时间间隔设置 | | | +------+------------------------+---------+------------------------+ | | | 0 | 没有时间间隔 | +------+------------------------+---------+------------------------+ | | 每次接收数据的长度 | 50-1460 | 单位为bytes | +------+------------------------+---------+------------------------+ | | 从 | 20-1000 | 单位为ms,缺省值为50ms | | | 串口接收数据的时间间隔 | | | +------+------------------------+---------+------------------------+ | | 退出透 | 0 | 不清空缓冲区 | | | 传后是否清空发送缓存区 | | 一旦出错自 | | | | | 动退出透传模式后,保留 | | | | | 缓存数据。下次重连进入 | | | | | 透传模式后,会发送之前 | | | | | 缓冲区中的数据给服务器 | +------+------------------------+---------+------------------------+ | | | 1 | 清空缓存区 | | | | | 一旦出错自动退出 | | | | | 透传模式后,缓存被清空 | | | | | 。下次重连进入透传模式 | | | | | 后,不会发送之前缓冲区 | | | | | 中被清空的数据给服务器 | +------+------------------------+---------+------------------------+ 2.12 发送数据:AT+CIPSEND ------------------------- 语法规则: +---+--------------------------------+--------------------------------+ | 命 | 语法 | 返回和说明 | | 令 | | | | 类 | | | | 型 | | | +===+================================+================================+ | 设 | 单路连接(AT+CIPMUX=0): | 本命令用于在单 | | 置 | AT+CIPSEND= | 链接模式下发送长度不可变的数据 | | 命 | | 1) 正常情况下返回 **>** | | 令 | | >后输入长 | | | | 度的数据,则数据自动发送出去。 | | | | 如果是慢发模式,则 | | | | 数据发送成功后,有如下的返回: | | | | **(不推荐使用慢发模式!)** | | | | **SEND OK** | | | | 如果是快发模式,则 | | | | 数据发送成功后,有如下的返回: | | | | **(推荐使用快发模式!)** | | | | **DATA ACCEPT:** | | | | 如果 | | | | 数据发送失败,则有如下的返回: | | | | **SEND FAIL** 2) | | | | 如果连 | | | | 接未建立或者连接被断开,返回: | | | | **+CME ERROR ** | +---+--------------------------------+--------------------------------+ | | 多路连接(+CIPMUX=1): | 当省略时,本命令用于多连接模 | | | AT+CIPSEND=[,] | 式下发送长度可变的数据。响应”> | | | | ”, 此时 | | | | 输入数据,执行CTRL+Z(0x1A)发 | | | | 送,或执行ESC(0x1B)中止操作; | | | | 当 | | | | 不省略时,本命令用于多连接模式 | | | | 下发送长度不可变的数据。响应”> | | | | ”,>后输入长 | | | | 度的数据,则数据自动发送出去。 | | | | 如果连 | | | | 接未建立或者连接被断开,返回: | | | | **+CME ERROR ** | | | | 如果是慢发模式,则 | | | | 数据发送成功后,有如下的返回: | | | | **(不推荐使用慢发模式!)** | | | | **,SEND OK** | | | | 如果是快发模式,则 | | | | 数据发送成功后,有如下的返回: | | | | **(推荐使用快发模式!)** | | | | **DATA ACCEPT:,** | | | | 如果数据发送失败,返回: | | | | **,SEND FAIL** | +---+--------------------------------+--------------------------------+ | 执 | AT+CIPSEND | 本命令用于在 | | 行 | | 单链接模式下发送长度可变的数据 | | 命 | | 响应”\ **>** ”, 此时 | | 令 | | 输入数据,执行CTRL+Z(0x1A | | | | )发送,或执行ESC(0x1B)中止操作 | | | | 如 | | | | 果连接未建立或已被断开,返回: | | | | **+CME ERROR ** | | | | 如果是慢发模式,则 | | | | 数据发送成功后,有如下的返回: | | | | **(不推荐使用慢发模式!)** | | | | **SEND OK** | | | | 如果是快发模式,则 | | | | 数据发送成功后,有如下的返回: | | | | **(推荐使用快发模式!)** | | | | **DATA ACCEPT:** | | | | 如果数据发送失败,返回: | | | | **SEND FAIL** | +---+--------------------------------+--------------------------------+ | 查 | AT+CIPSEND? | 单路连接(AT+CIPMUX=0)返回: | | 询 | | +CIPSEND: OK | | 命 | | | | 令 | | | +---+--------------------------------+--------------------------------+ | | | 多路连接(AT+CIPMUX=1)返回: | | | | +CIPSEND: , OK | +---+--------------------------------+--------------------------------+ | 测 | AT+CIPSEND=? | 单路连接(AT+CIPMUX=0)返回: | | 试 | | +CIPSEND: OK | | 命 | | | | 令 | | | +---+--------------------------------+--------------------------------+ | | | 多路连接(AT+CIPMUX=1)返回: | | | | +CIPSEND: <0-7>, OK | +---+--------------------------------+--------------------------------+ | 注 | l | | | 意 | 数据的最大发送长度由网络决定。 | | | 事 | l | | | 项 | 通过AT+CIPATS可 | | | | 以在设定的时间内自动发送数据。 | | | | l | | | | 只有在连接 | | | | 已建立的状态下才可以发送数据。 | | | | l 一次最多能发送字节数不大于值 | | | | l **不推荐使用慢发模式!** l | | | | 发送命令AT+C | | | | IPSEND或AT+CIPSEND=以:raw-late | | | | x:`\r或`:raw-latex:`\r\n为结尾 | | | | `。若用户以:raw-latex:`\r结尾` | | | | ,如果发送的数据第一个字节恰好 | | | | 是:raw-latex:`\n`,模块会判断 | | | | 发送命令以:raw-latex:`\r\n为结 | | | | 尾`,导致发送的数据的第一个字 | | | | 符:raw-latex:`\n被吞掉`。所以 | | | | ,此时建议用户用CIPSEND发送数 | | | | 据以:raw-latex:`\r\n为结尾`。 | | | | 例如: | | | | AT+CIPSEND:raw-late | | | | x:`\r >`:raw-latex:`\n123456` | | | | 模块会 | | | | 判断为AT+CIPSEND:raw-latex:`\r | | | | \n`,会把数据中第一个字符:raw- | | | | latex:`\n吃掉`。服务器那边收到 | | | | 的数据是123456。解决的方法是: | | | | AT+CIPSEND:raw-latex:` | | | | \r\n `>:raw-latex:`\n123456` | | | | 再例如: | | | | AT+CIPSEND=7:raw-late | | | | x:`\r >`:raw-latex:`\n123456` | | | | 模块会判断为A | | | | T+CIPSEND:raw-latex:`\r\n`,会 | | | | 把数据中第一个字符:raw-latex: | | | | `\n吃掉`,导致数据少一个字符, | | | | 会一直发不出去。解决的方法是: | | | | AT+CIPSEND=7:raw-latex:` | | | | \r\n `>:raw-latex:`\n123456` | | +---+--------------------------------+--------------------------------+ 参数定义: ==== ============================== ==== ====================== 参数 定义 取值 对取值的说明 ==== ============================== ==== ====================== \ Link No. 与+CIPSTRAT中定义一致 0~5 整数型,表示连接序号 \ 发送数据长度 - 整数型,它必须小于 \ 每次发送数据最大值 - 整数型,目前是1460字节 ==== ============================== ==== ====================== 2.13 设置自动发送数据前的定时时间:AT+CIPATS -------------------------------------------- 语法规则: ======== ============= ================================== 命令类型 语法 返回 ======== ============= ================================== 设置命令 AT+CIPATS=[,] OK 查询命令 AT+CIPATS? +CIPATS: , OK 测试命令 AT+CIPATS=? +CIPATS: (取值列表),( 取值列表) OK ======== ============= ================================== 参数定义: ==== ============================ ===== ============================ 参数 定义 取值 对取值的说明 ==== ============================ ===== ============================ \ 是否设置自动发送时间,整数型 0 未设置自动发送数据 (缺省值) \ 1 设置自动发送数据 \ 数据将在多少秒后被发送 1~100 整数型,以秒为单位 ==== ============================ ===== ============================ 2.14 设置发送数据时是否显示‘>’和发送情况提示:AT+CIPSPRT -------------------------------------------------------- 语法规则: ======== ============ ======================= 命令类型 语法 返回 ======== ============ ======================= 设置命令 AT+CIPSPRT= OK 查询命令 AT+CIPSPRT? +CIPSPRT: OK 测试命令 AT+CIPSPRT=? +CIPSPRT: (取值列表) OK ======== ============ ======================= 参数定义: +-----+------------------------------+---+------------------------------+ | 参 | 定义 | 取 | 对取值的说明 | | 数 | | 值 | | +=====+==============================+===+==============================+ | | 执行 AT+CIPSEND | 0 | 不显示‘>’,但返回 “SEND | | | 后是否显示‘>’ | | OK”或”DATA ACCEPT” | | | 和发送情况提示(即‘SEND | | **注:**\ 返回 “SEND | | | OK‘或‘DATA ACCEPT‘)。 | | OK”或”DATA | | | 整数型 | | ACCEPT”由AT+ | | | | | CIPQSEND这个命令的设定来决定 | +-----+------------------------------+---+------------------------------+ | | | 1 | 显示‘>’,且返回 “SEND OK” | | | | | 或”DATA ACCEPT” 缺省值 | | | | | **注:**\ 返回 “SEND | | | | | OK”或”DATA ACCEPT” | | | | | 由AT+ | | | | | CIPQSEND这个命令的设定来决定 | +-----+------------------------------+---+------------------------------+ | | | 2 | 不显示‘>’,不返回 “SEND OK” | | | | | 或”DATA ACCEPT” | +-----+------------------------------+---+------------------------------+ 状态机 .. image:: http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20200611142457420_Snipaste_2020-06-11_14-24-41.png ◆输入 AT+CIICR,会马上进入 IPCONFIG 状态,当返回 OK 后,会进入到 IPGPRSACT 状态; ◆输入 AT+CIPSTART 后,会立马进入 IP/UDPCONNECTING 状态,如果后续模块上报 CONNECTOK 这个 URC, 表明连接服务器成功,此时进入 CONNECTOK 状态; ◆输入 AT+CIPCLOSE 后,立马进入 TCP/UDPCLOSING 状态,此时如果模块上报 CLOSEOK,则表明关闭与服务 器的连接成功,此时模块进入 TCP/UDPCLOSED 状态; ◆如果模块上报+PDPDEACT 这个 URC,则标志着模块释放 PDP 上下文,并进入了 PDPDEACT 状态; ◆在 IPGPRSACT,IPSTATUS,CONNECT OK 以及 TCP/UDPCLOSED 状态下,输入 AT+CGATT=0,则也可以使模 块释放上下文,进入 PDPDEACT 状态; ◆模块进入 PDPDEACT 状态,仍需要输入 AT+CIPSHUT,进入 IPINITIAL 状态; ◆模块在各个状态下均可以输入 AT+CIPSHUT,进入 IPINITIAL 状态。 3 AT指令示例 ------------ 3.1 连接网络 ------------ **3.1.1 开机** ~~~~~~~~~~~~~~ 通过拉低powerkey2秒进行开机,开机以后通过串口循环发送AT直到收到OK,如果90秒没有收到OK请拉低 RESET_IN_N 引脚 150ms 以上。或使用其他方法见\ `开关机 `__\ 章节 3.1.2 查询卡状态 ~~~~~~~~~~~~~~~~ **AT+CPIN?**\ 查询卡状态,直到收到+CPIN: READY,如果10s内没有收到建议重启模块 3.1.3 查询网络注册情况 ~~~~~~~~~~~~~~~~~~~~~~ **AT+CGATT?**\ 查询是否注册网络收到+CGATT: 1值是1即为注册成功,正常情况下注册时间不会超过两分钟,如果超过两分钟没有注册可以进入飞行模式五秒后退出再查询,或者直接重启模块。 3.1.4 激活网络 ~~~~~~~~~~~~~~ **AT+CSTT**\ 配置网络,非私有APN以外Cat1的固件支持根据卡自动配置APN,直接输入AT+CSTT即可,模块会按照自动获取的APN设置CSTT的APN。 **AT+CIICR**\ 激活网络,在IP START的状态使用AT+CIICR激活网络,激活以后通过\ **AT+CIFSR**\ 查询是否获取IP,如果成功就可以开始配置TCP连接了,如果不成功使用AT+CIPSHUT关闭移动网络,从AT+CSTT重新进行。 3.2 连接TCP ----------- 此处使用的是非SSL连接,SSL见\ `相关章节 `__ AT+CIPSTART建立连接 +---+--------------------------------+--------------------------------+ | 命 | 语法 | 返回和说明 | | 令 | | | | 类 | | | | 型 | | | +===+================================+================================+ | 设 | 单 路 连 接 | 如 果 格 式 正 确 且 处 于 IP | | 置 | (+CIPMUX=0)时:AT+CIPSTART=,, | INITIAL 或 者 IP | | 命 | 或 AT+CIPSTART=,, | STATUS或TCP/UDP | | 令 | 多路连接 | CLOSE状态,返回: OK | | | (+CIPMUX=1)时:AT+CIPSTART=,,< | 否则返回: +CME ERROR | | | IP address>, 或 | 紧接着会有URC上报,上报内容 | | | AT+CIPSTART=,,, | 如下:如果连接已经存在,返回: | | | | ALREADY | | | | CONNE | | | | CT如果连接成功(非透传),返回: | | | | CONNECT OK | | | | 如果连接成功(透传),返回: | | | | CONNECT否则返回: STATE: | | | | CONNECT FAIL如果格式正确且处于 | | | | IP STATUS或IP | | | | PROCESSING时,返回: OK | | | | 否则返回: +CME ERROR | | | | 紧接着会有URC上报,上 | | | | 报内容如下:如果连接已经存在, | | | | 返回: ,ALREADY | | | | CONNECT如果连接成功,返回: | | | | ,CONNECT OK 否则返回: ,CONNECT | | | | FAIL | +---+--------------------------------+--------------------------------+ | 测 | AT+CIPSTART=? | 单路连接(+CIPMUX=0)时返回: | | 试 | | +CIPSTART: (取值列表),(IP | | 命 | | address range),(port range)? | | 令 | | +CIPSTART: (取值列表),(domain | | | | name),(port range)OK | | | | 多路连接(+CIPMUX=1)时返回: | | | | +CIPSTART: ( 取 值 列 表 ),( | | | | 取 值 列 表 ),(IP | | | | addressrange),(port range) | | | | +CIPSTART: (取值列表),( 取值 | | | | 列表),(domain | | | | name),(portrange)OK | +---+--------------------------------+--------------------------------+ | 注 | 此命令应用于建立 TCP/UDP | | | 意 | 连接;当前状态可用 | | | 事 | AT+CIPSTATUS | | | 项 | 查询;单路连接时只当前状态为 | | | | IP INITIAL 或者 IP STATUS 或 | | | | TCP/UDP CLOSE | | | | 时可执行,多路连接时当 | | | | 前状态为 IP STATUS 或 IP | | | | PROCESSING | | | | 时可执行;在当前状 | | | | 态不是上述可执行状态时,需执行 | | | | AT+CIPSHUT | | | | 后再开始建立连接;多路连 | | | | 接时,设置此命令前,必须先执行 | | | | AT+CSTT, AT+CIICR,AT+CIFSR | | | | 这三个命令。 | | +---+--------------------------------+--------------------------------+ 参数定义 +------+-------------------+----------------+-------------------+ | 参数 | 参数 | 取值 | 对取值的说明 | +======+===================+================+===================+ | | Link No. | 0~5 | 整数 | | | | | 型,表示连接序号 | +------+-------------------+----------------+-------------------+ | | 连接类 | “TCP”“UDP” | 建立T | | | 型,字符串型(双 | | CP连接建立UDP连接 | | | 引号可加可不加) | | | +------+-------------------+----------------+-------------------+ | | 远端服务器 IP | 最大32个字节 | 字符串参数(双 | | | 地址 | | 引号可加可不加) | +------+-------------------+----------------+-------------------+ | | 远端服务器域名 | 最大 32 个字节 | 字符串参数(双 | | | | | 引号可加可不加) | +------+-------------------+----------------+-------------------+ | | 远端服务端口 | 1~65535 | 整数型 | +------+-------------------+----------------+-------------------+ **示例** AT+CIPSTART=“TCP”,“120.76.201.131”,2000 返回 CONNECT OK表示连接成功 3.3 发送数据 ------------ AT+CIPSEND发送不定长数据,收到>以后就可以发送数据,然后发送十六进制1A结束发送,发送完1A以后设备会向服务器发送1A之前的所有数据。 3.4 接收数据 ------------ 当连接服务器成功以后默认配置是服务器下发的数据会通过串口自动上报,直接就可以接收数据。 **其他说明** 最新的AT固件支持开机直接发送AT+CIPSTART联网,不过不推荐使用,推荐根据状态机一步一步实现 4 相关资料以及购买链接 ---------------------- `《AT指令手册》 `__ 相关开发板购买链接 `Air724UG开发板 `__ `Air724 开发板使用说明 `__ 5 常见问题 ---------- - **连接服务器失败** 1. 服务器必须是公网地址 2. 使用PC上的TCP UDP测试工具客户端、或者mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障 3. 如果连接ssl服务器,确认下core文件是否支持ssl功能(例如2G模块的某些core文件不支持ssl功能) 4. 2G模块不要使用中国联通卡 5. 检查下模块信号、网络注册、网络附着、PDP激活状态 6. 检查下SIM卡是否欠费【4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络】 - **最多同时支持多少个连接** AT版本最多8个连接