TCP/IP指令集
=================


----------------------------------------------------------
AT+ CIPSTATUS:查询TCP/UDP/SSL连接状态和信息
----------------------------------------------------------

**查询命令**

命令:
::

	AT+CIPSTATUS?

返回:
::

	+BIPSTATUS:<type>,<remoteip>,<port>,<localport>,<tetype>

**参数**

- <type>:连接类型

	- 0: “TCP”
	- 1: “UDP”
	- 2: “TLS”
	- 3: “DTLS”

- <remoteip>:远程连接IP
- <port>:远程连接的端口
- <localport>:连接的本地端口
- <tetype>:

	- 0: 设备作为客户端
	- 1: 设备作为服务器


------------------------------------------------------
AT+CIPSTART:建立TCP连接、UDP 传输或 TLS连接
------------------------------------------------------

**执行命令**

命令:
::

	AT+CIPSTART=<linkID>,<"type">,<remotehost>,<remoteport>[,<keepalive>,"localport"],<"localip">

返回:
::

	OK

**参数**

- <linkID>:网络连接 ID (0 ~ 5),最多支持6个连接
- <"type">:连接类型

	- 0: “TCP”
	- 1: “UDP”
	- 2: “TLS”
	- 3: “DTLS”

- <remotehost>:远程连接IP
- <remoteport>:远程连接的端口
- <keepalive>:TCP keep-alive 间隔,默认值:0

	- 0: 禁用 TCP keep-alive 功能
	- 1 ~ 7200: 检测间隔,单位:秒

**说明**

- 只能TCP有效,UDP不需要设置,此参数最终会配置到 socket 选项 TCP_KEEPIDLE,keepalive 另外的 socket 选项。
- TCP_KEEPINTVL 默认会使用 1,TCP_KEEPCNT 默认会使用 3。
- <"localport">:本地端口,当需要设置为server时需要设置此端口。
- <"localip">:本地IP,当需要配置为server时需要配置此IP。

**示例**
::

	//1.建立连接ID为0,keep-alive 1800秒一次的TCP 连接
	AT+CIPSTART=0,"tcp","192.168.0.103",20108,1800

	//2. 建立连接ID为1的TCP Server连接
	AT+CIPSTART=2,"tcp","192.168.0.103",20108,1800, 5637, "192.168.0.107"

	//3. 建立连接ID为1的UDP client连接
	AT+CIPSTART=1,"udp","192.168.0.103",20108

	//4.建立连接ID为1,本地端口为5637的UDP Server连接
	AT+CIPSTART=1,"udp","192.168.0.103",20108,5637, "192.168.0.107"


----------------------------------------------------------------
AT+CIPSEND:在普通传输模式或 Wi-Fi 透传模式下发送数据
----------------------------------------------------------------

**执行命令**

命令:
::

	//执行TCP数据发送
	AT+CIPSEND=<linkID>,<length> 

	//执行UDP数据发送
	AT+CIPSEND=<linkID>,<length>[,<"remotehost">,<remote port>]

返回:
::

	>

上述响应表示 AT 已准备好接收串行数据,此时您可以输入数据,当AT接收到的数据长度达到<length>后,数据传输开始。
如果未建立连接或数据传输时连接被断开,返回:
::

	CMDRSP:ERROR

如果数据传输成功,返回:
::

	SEND OK

**执行命令**

功能:

- 进入 Wi-Fi 透传模式

命令:
::

	AT+CIPSEND

返回:
::

	>

或

::

	CMDRSP:ERROR

**说明**

- 进入 Wi-Fi 透传模式,设备每次最大接收 1024 字节,最大发送 1460 字节;如果当前接收的数据长度大于最大发送字节数,AT 将立即发送;否则,接收的数据将在 20 ms 内发送。当输入单独一包+++ 时,退出透传模式下的数据发送模式,请至少间隔 1 秒再发下一条 AT 命令。本命令必须在开启透传模式 以及单连接下使用。

**参数**

- <linkID>:网络连接 ID (0 ~ 4),用于多连接的情况
- <length>:数据长度,最大值:2048 字节
- <”remote host”>:UDP 传输可以指定对端主机:IPv4 地址或域名
- <remote port>:UDP 传输可以指定对端端口


-------------------------------------------------
AT+CIPCLOSE:关闭 TCP/UDP/SSL 连接
-------------------------------------------------

**执行命令**

命令:
::

	AT+CIPSEND=<linkID>

返回:
::

	OK

**参数**

- <linkID>:需关闭的网络连接 ID,如果设为 5,则表示关闭所有连接


----------------------------------------------------
AT+CIPMUX:启用/禁用多连接模式
----------------------------------------------------

**查询命令**

命令:
::

	AT+CIPMUX?

返回:
::

	+CIPMUX:<mode>
	OK

**执行命令**

命令:
::

	AT+CIPMUX=<mode>

返回:
::

	OK

**参数**

- <mode>:连接模式,默认值:0

	- 0: 单连接
	- 1: 多连接

**说明**

- 只有当所有连接都断开时才可更改连接模式
- 只有普通传输模式 (AT+CIPMODE=0),才能设置为多连接


----------------------------------------------------
AT+CIPMODE:查询/设置传输模式
----------------------------------------------------

**查询命令**

命令:
::

	AT+CIPMODE?

返回:
::

	+CIPMODE:<mode>
	OK

**执行命令**

命令:
::

	AT+CIPMODE=<mode>

返回:
::

	OK

**参数**

- <mode>:

	- 0: 普通传输模式
	- 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况


----------------------------------------------------
AT+CIPSNTPCFG:查询/设置NTP服务器
----------------------------------------------------

**查询命令**

命令:
::

	AT+CIPSNTPCFG?

返回:
::

	+CIPSNTPCFG:<enable>,<timezone>,<SNTP server>
	OK

**执行命令**

命令:
::

	AT+CIPSNTPCFG=<enable>,<timezone>,<SNTP server>

返回:
::

	OK

**参数**

- <enable>:设置 SNTP 服务器:

	- 1: 设置 SNTP 服务器。
	- 0: 不设置 SNTP 服务器。

- <timezone>:

	- 数值范围:[-12,12],它以小时为单位,通过与协调世界时 (UTC) 的偏移来标记大多数时区(UTC−12:00 至 UTC+12:00)

- [<SNTP server>]: SNTP 服务器地址或域名。

**示例**
::

	//使能 SNTP 服务器,设置中国时区 (UTC+08:00)
	AT+CIPSNTPCFG=1,8,"cn.ntp.org.cn"

	//使能 SNTP服务器,设置美国纽约的时区 (UTC−05:00)
	AT+CIPSNTPCFG=1,-5,"0.pool.ntp.org"


--------------------------------------------------------------------
AT+CIPSNTPTIME:查询SNTP时间
--------------------------------------------------------------------

**查询命令**

命令:
::

	AT+CIPSNTPTIME?

返回:
::

	+CIPSNTPTIME:<asctime style time>
	OK

**示例**
::

	AT+CIPSNTPTIME?
	
	+CIPSNTPTIME:2022-10-21 19:20:39
	OK


--------------------------------------------------------------------
AT+PING:ping对端主机
--------------------------------------------------------------------

**执行命令**

命令:
::

	AT+PING=<"host">

返回:
::

	+PING:<time>

或

::

+PING:TIMEOUT

**参数**

- <”host”>:字符串参数,表示对端主机的 IPv4 地址或域名。
- <time>:ping 的响应时间,单位:毫秒。


--------------------------------------------------------------------
AT+CIPDOMAIN:域名解析
--------------------------------------------------------------------

**执行命令**

命令:
::

	AT+CIPDOMAIN=<"domain name">

返回:
::

	+CIPDOMAIN:<"IP address">
	OK

**参数**

- <”domain name”>:待解析的域名
- <”IP address”>:解析出的 IP 地址

**说明**

- 目前仅支持解析为 IPv4 地址


--------------------------------------------------------------------
AT+CIPDNS:查询/设置 DNS 服务器信息
--------------------------------------------------------------------

**查询命令**

命令:
::

	AT+CIPDNS?

返回:
::

	+CIPDNS:<enable>[,<"DNS IP1">,<"DNS IP2">,<"DNS IP3">]
	OK

**执行命令**

命令:
::

	AT+CIPDNS=<enable>[,<"DNS IP1">,<"DNS IP2">,<"DNS IP3">]

返回:
::

	OK

或

::

	ERROR

**参数**

- <enable>:设置 DNS

	- 0: 启用自动获取 DNS 设置,DNS 将会恢复为 208.67.222.222,只有当 DHCP 更新时才会生效。
	- 1: 启用手动设置 DNS 信息,如果不设置参数 <DNS IPx> 的值,则使用默认值 208.67.222.222。

- <DNS IP1>:第一个 DNS IP 地址,对于执行命令,只有当 <enable> 参数为 1 时,也就是启用手动 DNS 设置,本参数才有效。
- <DNS IP2>:第二个 DNS IP 地址,对于执行命令,只有当 <enable> 参数为 1 时,也就是启用手动 DNS 设置,本参数才有效。
- <DNS IP3>:第三个 DNS IP 地址,对于执行命令,只有当 <enable> 参数为 1 时,也就是启用手动 DNS 设置,本参数才有效。

**说明**

- 若AT+SYSSTORE=1,配置更改将保存在 NVS 区。


--------------------------------------------------------------------
AT+CIPSSLCPSK:查询/设置 SSL 客户端的 PSK
--------------------------------------------------------------------

**查询命令**

命令:
::

	AT+CIPSSLCPSK?

返回:
::

	+CIPSSLCPSK:<linkID>,<"psk">,<"hint">
	OK

**执行命令**

命令:
::

	//单连接:(AT+CIPMUX=0)
	AT+CIPSSLCPSK=<"psk">,<"hint">

	//多连接:(AT+CIPMUX=1)
	AT+CIPSSLCPSK=<linkID>,<"psk">,<"hint">

返回:
::

	OK

**参数**

- <linkID>:网络连接 ID (0 ~ max),在单连接的情况下,本参数值为 0;在多连接的情况下,若参数值设为 max,则表示所有连接;本参数默认值为 5。
- <”psk”>:PSK identity,最大长度:48。
- <”hint”>:PSK hint,最大长度:48。

**说明**

- 如果想要本配置立即生效,请在建立 SSL 连接前运行本命令。


--------------------------------------------------------------------
AT+CIPDNS:查询/设置 DNS 服务器信息
--------------------------------------------------------------------

**查询命令**

命令:
::

	AT+CIPDNS?

返回:
::

	+CIPDNS:<enable>[,<"DNS IP1">,<"DNS IP2">,<"DNS IP3">]
	OK

**执行命令**

命令:
::

	AT+CIPDNS=<enable>[,<"DNS IP1">,<"DNS IP2">,<"DNS IP3">]

返回:
::

	OK

或

::

	ERROR

**参数**

- <enable>:设置 DNS

	- 0: 启用自动获取 DNS 设置,DNS 将会恢复为 208.67.222.222,只有当 DHCP 更新时才会生效;
	- 1: 启用手动设置 DNS 信息,如果不设置参数 <DNS IPx> 的值,则使用默认值 208.67.222.222。

- <DNS IP1>:第一个 DNS IP 地址。
- <DNS IP2>:第二个 DNS IP 地址。
- <DNS IP3>:第三个 DNS IP 地址。

**说明**

- 若AT+SYSSTORE=1,配置更改将保存在 NVS 区。
- 这三个参数不能设置在同一个服务器上。
- 当 <enable> 为 0 时,DNS 服务器可能会根据设备所连接的路由器的配置而改变。