ESP8266 单连接 TCP 客户端、UDP 传输、透传、多连接 TCP 服务器
目录
- 一、单连接 TCP Client
- 二、UDP 传输
- 2.1 固定远端的 UDP 通信
- 2.2 远端可变的 UDP 通信
- 三、透传
- 3.1 TCP Client 单连接透传
- 3.2 UDP 透传
- 四、多连接 TCP 服务器
一、单连接 TCP Client
1、配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode
响应 :
OK
2、连接路由器
AT+CWJAP=“SSID”,“password” // SSID and password of router
响应 :
OK
3、查询 ESP8266 设备的 IP 地址
AT+CIFSR
响应 :
+CIFSR:APIP,“192.168.4.1”
+CIFSR:APMAC,“1a:fe:34:a5:8d:c6”
+CIFSR:STAIP,“192.168.3.133”
+CIFSR:STAMAC,“18:fe:34:a5:8d:c6”
OK
4、PC 与 ESP8266 设备连接同一路由器,在 PC 端使用网络调试工具,建立一个 TCP 服务器。
网络调试工具选择TCPServer

假设,PC 创建的服务器 IP 地址为 192.168.3.116,端口为 8080。
5、ESP8266 设备作为 TCP client 连接到上述服务器
AT+CIPSTART=“TCP”,“192.168.3.116”,8080 //protocol, server IP and port
响应 :
OK
6、ESP8266 设备向服务器发送数据
AT+CIPSEND=4 // set date length which will be sent, such as 4 bytes
>test // enter the data, no CR
响应 :
Recv 4 bytes
SEND OK
注意:
• 发送数据时,如果输入的字节数超过了设置长度(n):
- 系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK。
- 超出长度的部分数据被认为是无效数据,不被接受。
7、当 ESP8266 设备接收到服务器发来的数据,将提示如下信息:
+IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
二、UDP 传输
UDP 传输不区分 server 或者 client ,由指令 AT+CIPSTART 建立传输。
1、配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode
响应 :
OK
2、连接路由器
AT+CWJAP=“SSID”,“password” // SSID and password of router
响应 :
OK
3、查询 ESP8266 设备的 IP 地址
AT+CIFSR
响应 :
+CIFSR:APIP,“192.168.4.1”
+CIFSR:APMAC,“1a:fe:34:a5:8d:c6”
+CIFSR:STAIP,“192.168.101.133”
+CIFSR:STAMAC,“18:fe:34:a5:8d:c6”
OK
4、PC 与 ESP8266 设备连接同一路由器,在 PC 端使用网络调试工具,建立一个 UDP 传输。
网络调试工具选择UDP

远端IP设置为客户端 ESP8266 的IP
假设,PC 创建的 UDP 自身 IP 地址为 192.168.101.116,端口为 8080。
5、后文将基于前述步骤,介绍两种 UDP 通信的示例。
2.1 固定远端的 UDP 通信
UDP 通信的远端固定,由 AT+CIPSTART 指令的最后一个参数设置为 0 决定。系统将分配一个连接号给这个固定连接,UDP 通信双方不会被其他设备替代。
1、使能多连接
AT+CIPMUX=1
响应 :
OK
2、创建 UDP 传输。例例如,分配连接号为 4,指令如下:
AT+CIPSTART=4,“UDP”,“192.168.101.110”,8080,1112,0
响应 :
4,CONNNECT
OK
说明:
示例指令中的参数说明如下:
• “192.168.101.110”, 8080 为 UDP 传输的远端 IP 和端口,即前文步骤 4 中 PC 建立的 UDP 端口;
• 1112 为 ESP8266 本地的 UDP 端口,用户可自行设置,如不设置则为随机值;
• 0 表示当前 UDP 传输建立后,UDP 远端不会被其他设备更改;即使有其他设备通过 UDP 协议发数据到ESP8266 UDP 端口 1112,ESP8266 的第 4 号 UDP 传输的远端也不会被替换,使用指令 “AT+CIPSEND=4, X” 发送数据,仍然是当前固定的 PC 端收到。
3、发送数据
AT+CIPSEND=4,7 // Send 7 bytes to transmission NO.4
>UDPtest // enter the data, no CR
响应 :
Recv 7 bytes
SEND OK
注意:
• 发送数据时,如果输入的字节数超过了设置长度(n):
- 系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK。
- 超出长度的部分数据被认为是无效数据,不被接受。
4、接收数据。 当 ESP8266 设备接收到服务器器发来的数据,将提示如下信息:
+IPD,4,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
5、断开 UDP 传输
AT+CIPCLOSE=4
响应 :
4,CLOSED
OK
2.2 远端可变的 UDP 通信
1、在 ESP8266 的 AT 指令中,若要实现“远端 IP 或端口可变”的 UDP 通信(即动态向不同目标发送 UDP 包),必须设置为单连接模式:AT+CIPMUX=0。
2、创建 UDP 传输
当使用 AT+CIPSTART 指令创建 UDP 通信,将最后一个参数设置为 2 时,UDP 通信的远端可改变。
AT+CIPSTART=“UDP”,“192.168.101.110”,8080,1112,2
响应 :
CONNNECT
OK
说明:
示例指令中的参数说明如下:
• “192.168.101.110”, 8080 为 UDP 传输的远端 IP 和端口,即前文 PC 建立的 UDP 端口;
• 1112 为 ESP8266 本地的 UDP 端口,用户可自行设置,如不设置则为随机值;
• 2 表示当前 UDP 传输建立后,UDP 传输远端仍然会更改;UDP 传输远端会自动更改为最近一个与ESP8266 UDP 通信的远端。
3、发送数据
AT+CIPSEND=7 // Send 7 bytes
>UDPtest // enter the data, no CR
响应 :
Recv 7 bytes
SEND OK
注意:
• 发送数据时,如果输入的字节数超过了设置长度(n):
- 系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK。
- 超出长度的部分数据被认为是无效数据,不被接受。
4、发送数据到其他指定远端。例如,发数据到 192.168.101.111, 端口 1000。
AT+CIPSEND=7,“192.168.101.111”,1000 // Send 7 bytes
>UDPtest // enter the data, no CR
响应 :
Recv 7 bytes
SEND OK
5、接收数据。 当 ESP8266 设备接收到服务器发来的数据,将提示如下信息:
+IPD,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
6、断开 UDP 传输
AT+CIPCLOSE (单连接方式不用指定对应的连接ID号)
响应 :
CLOSED
OK
三、透传
ESP8266 AT 默认仅在 TCP client 单连接或 UDP 传输模式时,支持透传。
3.1 TCP Client 单连接透传
以下为 ESP8266 作为 station 实现 TCP client 单连接透传的举例,ESP8266 作为 softAP 可同理实现透传。
1、配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode
响应 :
OK
2、连接路由器
AT+CWJAP=“SSID”,“password” // SSID and password of router
响应 :
OK
3、查询 ESP8266 设备的 IP 地址
AT+CIFSR
响应 :
+CIFSR:APIP,“192.168.4.1”
+CIFSR:APMAC,“1a:fe:34:a5:8d:c6”
+CIFSR:STAIP,“192.168.3.133”
+CIFSR:STAMAC,“18:fe:34:a5:8d:c6”
OK
4、PC 与 ESP8266 设备连接同一路由器,在 PC 端使用网络调试工具,建立一个 TCP 服务器。
网络调试工具选择TCPServer

假设,PC 创建的服务器 IP 地址为 192.168.3.116,端口为 8080。
5、ESP8266 设备作为 TCP client 连接到上述服务器
AT+CIPSTART=“TCP”,“192.168.3.116”,8080 //protocol, server IP and port
响应 :
OK
6、使能透传模式
AT+CIPMODE=1
响应 :
OK
7、ESP8266 设备向服务器器发送数据
AT+CIPSEND
*> //From now on, data received from UART will be transmitted to server automatically.
注意:
• 发送数据时,如果输入的字节数超过了设置长度(n):
- 系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK。
- 超出长度的部分数据被认为是无效数据,不被接受。
8、退出发送数据:
在透传发送数据过程中,若识别到单独的一包数据 “+++”,则退出透传发送。
- 如果使用键盘打字输入 “+++” ,可能耗时太长,不被认为是连续的三个 “+”,建议使用串口工具一次性发送 “+++”,并请注意不要携带空格或换行符等不可见字符。
- 之后,请至少间隔 1 秒,再发下一条 AT 指令。
注意:
“+++“ 退出透传发送数据,回到正常 AT 指令模式。此时,TCP 连接仍然是保持的,可以再发 AT+CIPSEND 指令,重新开始透传。
9、退出透传模式
AT+CIPMODE=0
响应 :
OK
10、断开 TCP 连接
AT+CIPCLOSE
响应 :
CLOSED
OK
3.2 UDP 透传
以下为 ESP8266 作为 softAP 实现 UDP 透传的举例,ESP8266 作为 station 可同理实现透传。
1、配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode
响应 :
OK
2、PC 连入 ESP8266 softAP

3、在 PC 端使用网络调试工具,建立一个 UDP 传输。
假设,PC 创建的 UDP 自身 IP 地址为 192.168.4.2,端口为 1001。
4、ESP8266 与 PC 对应端口建立固定对端的 UDP 传输
AT+CIPSTART=“UDP”,“192.168.4.2”,1001,2233,0
响应 :
OK
5、使能透传模式
AT+CIPMODE=1
响应 :
OK
6、ESP8266 设备向服务器发送数据
AT+CIPSEND
*> //From now on, data received from UART will be transmitted to server automatically.
注意:
• 发送数据时,如果输入的字节数超过了设置长度(n):
- 系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK。
- 超出长度的部分数据被认为是无效数据,不被接受。
7、退出发送数据:
在透传发送数据过程中,若识别到单独的一包数据 “+++”,则退出透传发送。
- 如果使用键盘打字输入 “+++” ,可能耗时太长,不被认为是连续的三个 “+”,建议使用串口工具一次性发送 “+++”,并请注意不要携带空格或换行符等不可见字符。
- 之后,请至少间隔 1 秒,再发下一条 AT 指令。
注意:
“+++“ 退出透传发送数据,回到正常 AT 指令模式。此时,UDP 连接仍然是保持的,可以再发 AT+CIPSEND 指令,重新开始透传。
8、退出透传模式
AT+CIPMODE=0
响应 :
OK
9、断开 UDP 连接
AT+CIPCLOSE
响应 :
CLOSED
OK
四、多连接 TCP 服务器
ESP8266 AT 仅支持建立⼀一个 TCP 服务器,且必须使能多连接,即允许连接多个 TCP client。
以下为 ESP8266 作为 softAP ,建立 TCP 服务器的举例;如果是 ESP8266 作为 station,可在连接路由后,同理建立服务器。
1、配置 WiFi 模式
AT+CWMODE=3 // softAP+station mode
响应 :
OK
2、使能多连接
AT+CIPMUX=1
响应 :
OK
3、建立 TCP server
AT+CIPSERVER=1, 9090 // port = 9090
响应 :
OK
4、PC 连入 ESP8266 softAP

5、在 PC 端使用网络调试工具,建立一个 TCP client,连接 ESP8266 的 TCP server。
注意:
ESP8266 作为 TCP server 有超时机制,如果连接建立后,一段时间内无数据来往,ESP8266 TCP server 会将 TCP client 踢掉。因此,请在 PC TCP client 连上 ESP8266 TCP server 后建立一个 2s 的循环数据发送,用于保持连接。
6、发送数据
// ID number of connection is defaulted to be 0.
AT+CIPSEND=0,4 // send 4 bytes to connection NO.0
*>test // enter the data, no CR
响应:
Recv 4 bytes
SEND OK
注意:
• 发送数据时,如果输入的字节数超过了设置长度(n):
- 系统将提示 busy,并发送数据的前 n 个字节,发送完成后响应 SEND OK。
- 超出长度的部分数据被认为是无效数据,不被接受。
7、接收数据。 当 ESP8266 设备接收到服务器发来的数据,将提示如下信息:
+IPD,0,n:xxxxxxxxxx // received n bytes, data=xxxxxxxxxxx
8、断开 TCP 传输
AT+CIPCLOSE=0
响应 :
0,CLOSED
OK
ESP8266 作为 TCP 服务器,会断开一直不通信直至超时了的 TCP 客户端连接。
AT+CIPSTO=10 设置 TCP 服务器超时时间为10s











