ESP8266WIFI实验

Tutorial: 电子电路 Category: 嵌入式 Published: 2026-08-29 08:09:36 Views: 0 Likes: 0 Comments: 0

057.8.2 ESP8266WIFI实验

一、接线方式

本节先不用单片机,电脑通过 USB 转 TTL 模块直接向 ESP8266 发送 AT 指令。这样可以把“串口是否正常”“模块能否连接路由器”“TCP 是否能双向通信”三个问题分开验证。

电脑上的串口助手
        │ USB
        ▼
USB 转 TTL(CH340)
        │ UART:TX/RX/GND
        ▼
ESP8266 ──2.4 GHz Wi-Fi──> 路由器/手机热点
                                   │ 局域网
                                   ▼
                         电脑上的 TCP Server

接线时必须同时满足以下条件:

USB 转 TTLESP8266作用
TXDRXD电脑向 ESP8266 发送指令,必须交叉连接
RXDTXDESP8266 向电脑返回结果,必须交叉连接
GNDGND建立共同的电压参考点
独立稳定的 3.3 V 电源VCC、EN/CH_PD为模块供电并使能芯片

**供电与电平安全:**ESP8266 的电源和 I/O 都是 3.3 V 系统,不能把 5 V 直接接到 VCC、EN/CH_PD 或 RXD。Wi-Fi 发射时会产生较大的瞬时电流,建议使用峰值供电能力不低于 500 mA 的稳定 3.3 V 电源,并在模块附近放置去耦电容。如果 USB 转 TTL 的 TXD 是 5 V 电平,还要先经过分压或电平转换再接 ESP8266 RXD。

1.1 配置WiFi模式

串口助手选择 USB 转 TTL 对应的串口号。本实验所用模块固件的串口参数为:

  • 波特率:115200 bit/s;
  • 数据位:8 位;
  • 校验位:无;
  • 停止位:1 位;
  • 流控:无,即常写作 115200 8N1;
  • 文本显示和发送方式:ASCII;
  • 每条 AT 指令末尾:CR-LF,也就是回车加换行。

“ASCII”只是文本的编码/显示方式,和数据位、停止位不是一回事。不同批次模块所烧录的 AT 固件可能采用不同默认波特率;如果 115200 没有任何可读回复,应核对模块资料或尝试查询已配置的波特率,不能把“所有 ESP8266 永远默认 115200”当作固定规律。

先发送最简单的测试指令:

AT

收到 OK 说明串口收发、波特率和换行方式基本正确。随后配置 Wi-Fi 工作模式:

AT+CWMODE=3

参数含义如下:

mode模式含义
0Null关闭 Wi-Fi 射频功能,具体支持情况与固件有关
1StationESP8266 作为终端,连接路由器或手机热点
2SoftAPESP8266 自己建立热点,供其他设备连接
3Station + SoftAP同时作为终端连接外部热点,并保留自身热点

课程使用 AT+CWMODE=3。本实验只需要让 ESP8266 连接电脑端服务器,因此 AT+CWMODE=1 也足够,而且功能更单纯。若所用的是较老的 Non-OS AT 固件,还可能看到 _CUR、_DEF 后缀;不同固件版本在“是否保存到 Flash”方面存在差异,应以实际固件手册和返回结果为准。

输入时不要在 AT 前面或参数外面插入空格。串口助手中的“自动加回车换行”应当开启,否则模块可能一直等待一条完整指令。

1.2 连接路由器

连接接入点的基本格式为:

AT+CWJAP="你的SSID","你的密码"

例如:

AT+CWJAP="Lab_2G","12345678"

指令中两个字符串必须放在英文双引号内。不要把课程画面中的 SSID 和密码照抄到自己的实验里,也不要在截图或博客中暴露真实密码。

连接过程可能返回:

WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP
OK

其中 WIFI CONNECTED 表示已经和无线接入点完成连接,WIFI GOT IP 表示已通过 DHCP 等方式取得 IP 地址,最后的 OK 表示该条 AT 指令执行完成。开头出现一次 WIFI DISCONNECT 不一定代表最终失败,关键要看随后是否出现 CONNECTED、GOT IP 和 OK。

ESP8266EX 只支持 2.4 GHz Wi-Fi,不支持仅开放 5 GHz 的热点。双频路由器只要同时提供兼容的 2.4 GHz 网络即可。iPhone 热点可以开启“最大兼容性”来提高 2.4 GHz 设备的连接成功率;Android 热点则应明确选择 2.4 GHz 频段。

SSID 使用中文并非协议上绝对不允许,但路由器编码、串口工具编码与不同 AT 固件的处理可能不一致。为了先完成基础实验,建议使用 ASCII 字母、数字和下划线组成的 SSID/密码。SSID 或密码中含有逗号、双引号、反斜杠等特殊字符时,还要按固件要求进行转义。

校园网、酒店 Wi-Fi 等网络可能要求网页认证或企业级 802.1X 身份认证,普通的 AT+CWJAP 加“SSID+密码”流程不一定适用。遇到这类环境,先用普通 WPA/WPA2-PSK 的 2.4 GHz 路由器或手机热点验证模块。

1.3 查询ESP8266的IP地址

连接成功后发送:

AT+CIFSR

不同固件版本的字段和顺序可能略有差别,常见回复类似:

+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"xx:xx:xx:xx:xx:xx"
+CIFSR:STAIP,"192.168.31.151"
+CIFSR:STAMAC,"yy:yy:yy:yy:yy:yy"
OK

字段应分别理解:

字段含义本实验是否重点使用
APIPESP8266 自身 SoftAP 接口的 IP否
APMACSoftAP 接口的 MAC 地址否
STAIPESP8266 作为 Station 接入路由器后取得的 IP是,用于确认入网状态
STAMACStation 接口的 MAC 地址一般不用

STA 是 Station 的缩写,表示无线终端接口;“TCP 客户端”则是随后建立 TCP 连接时的应用层角色,两者不是同一个概念。IP 地址和 MAC 地址也各占一行:IP 用于网络层寻址,MAC 用于局域网链路层标识。

例如 192.168.31.151 只是路由器本次分配给 ESP8266 的地址,重新入网后可能变化。后续 AT+CIPSTART 中填写的是电脑端 TCP Server 的地址,不能误填这里查询到的 ESP8266 地址。

1.4 建立一个TCP服务器

电脑和 ESP8266 都应接入同一个可互相访问的局域网。电脑端打开网络调试助手,选择 TCP Server,然后设置本机监听地址和端口,例如:

电脑地址:192.168.31.118
监听端口:5132

判断两个地址是否处于同一子网,要结合 IP 地址与子网掩码,不能简单地永远按“前三段相同”判断。典型家庭网络使用掩码 255.255.255.0,也就是 /24,此时才可以简化为前三个十进制段相同:

ESP8266:192.168.31.151  AND  255.255.255.0 = 192.168.31.0
电脑:   192.168.31.118  AND  255.255.255.0 = 192.168.31.0
                                                    ↑ 同一子网

电脑可能同时有 Wi-Fi、有线网、虚拟机和 VPN 等多个网卡。网络助手应绑定到与 ESP8266 同一路由器的那个本机地址;若软件支持,也可以绑定 0.0.0.0,表示监听本机所有 IPv4 接口。

端口的有效范围是 1~65535。练习时宜选择未被占用的高位端口,例如 5132、8080。若点击“打开”后失败,可执行以下检查:

  1. 端口是否已被同一软件的另一个实例或其他程序占用;
  2. 绑定的 IP 是否仍属于当前电脑;
  3. 电脑是否刚切换了热点或网卡,导致地址变化;
  4. 网络调试助手是否有明确的错误提示。

1.5 客户端连接服务器

本实验采用“ESP8266 是 TCP Client、电脑是 TCP Server”的结构:

flowchart LR
    A[串口助手] -->|AT 指令 / UART| B[ESP8266<br/>TCP Client]
    B -->|Wi-Fi| C[无线路由器]
    C -->|局域网 TCP| D[电脑网络助手<br/>TCP Server<br/>192.168.31.118:5132]

在默认单连接模式下,建立 TCP 连接的指令为:

AT+CIPSTART="TCP","192.168.31.118",5132
  • "TCP":连接类型;
  • "192.168.31.118":电脑端服务器的 IP;
  • 5132:电脑端服务器正在监听的端口。

正常情况下,ESP8266 侧会返回 CONNECT 和 OK,电脑端服务器会出现一个新接入的客户端,其地址通常就是前面 STAIP 查询到的 ESP8266 地址。这里有两个方向容易混淆:

ESP8266 的 STAIP                 电脑服务器的 IP:端口
192.168.31.151   ──主动连接──>   192.168.31.118:5132
       Client                           Server

如果电脑显示 ESP8266 在线,说明 TCP 三次握手已经成功;串口助手和网络调试助手并不是彼此直接通信,中间还经过 USB-UART、ESP8266、无线网络和电脑协议栈。

1.6 发送数据

ESP8266 向服务器发送 4 字节数据时,先声明长度:

AT+CIPSEND=4

模块返回 OK 和 > 后,再输入恰好 4 字节的正文,例如:

QWER

模块在收满 4 字节后才会发送,并返回 SEND OK。这里的 4 是字节数,不是“字符看起来有几个”。ASCII 字母通常每个占 1 字节;中文在 UTF-8 下通常每个占 3 字节,串口助手是否额外附加 CR-LF 也会改变实际字节数。发送正文时要关闭自动追加换行,或者把附加的两个字节计入长度。

完整过程如下:

串口助手                        ESP8266                     TCP Server
     │ AT+CIPSEND=4                 │                             │
     ├──────────────────────────>│                             │
     │             OK、>          │                             │
     │<──────────────────────────┤                             │
     │ QWER(恰好 4 字节)         │                             │
     ├──────────────────────────>│──── TCP 字节流“QWER”──────>│
     │            SEND OK         │                             │
     │<──────────────────────────┤                             │

电脑防火墙可能拦截入站连接,但不应为了实验长期关闭整个防火墙。更安全的做法是把当前 Wi-Fi 设为“专用网络”,并只为网络调试助手或指定 TCP 端口添加入站允许规则。若必须临时关闭防火墙来定位问题,验证后应立即恢复。

二、实验常见问题

2.1 例题1: 网络和端口设置问题

“看起来在同一网段却找不到或连不上”时,按链路由近到远检查:

  1. AT 是否返回 OK,排除串口问题;
  2. AT+CWJAP? 或 AT+CIFSR 是否表明确实连上热点并取得 STAIP;
  3. 电脑当前 Wi-Fi 地址和子网掩码是否正确,不能选到虚拟网卡/VPN 地址;
  4. 电脑与 ESP8266 是否真的连接同一个热点,热点是否开启“客户端隔离/AP isolation”;
  5. TCP Server 是否已经在目标 IP 和端口上监听;
  6. 防火墙是否允许该应用或端口的局域网入站连接。

仅仅重开网络调试助手可以刷新网卡列表,但它不能替代上述检查。电脑切换 Wi-Fi 后,服务器绑定地址也要重新选择。

2.2 例题2: 网络调试助手TCP Sever设置问题

TCP Server 的“打开”是开始监听,“关闭”是停止监听。打开失败常见于:

  • 同一个端口已被占用;
  • 选择了已经失效或不属于本机的 IP;
  • 软件缺少权限或被安全软件拦截;
  • 重复启动多个网络调试助手实例,其中一个已经占用端口。

可换一个未占用的高位端口进行对照测试。改端口后,AT+CIPSTART 中的端口也必须同步修改。

2.3 例题3: 网络调试助手TCP Sever点不开问题

先检查任务栏通知区域和任务管理器,确认只保留一个网络调试助手实例。然后重新选择正确网卡地址和一个未占用端口,再点击“打开”。

服务器窗口中的“在线/已连接”状态只能说明 TCP 连接已经建立;红色或未连接状态通常表示当前没有客户端,不能单凭图标判断 ESP8266 的串口和 Wi-Fi 是否正常。

2.4 例题4: 实验不成功问题

拔下 USB 转 TTL 或断开外部 3.3 V 电源,会让 ESP8266 重新上电,可清除当前 TCP 连接等运行状态。这是一种复位手段,不是万能修复方法。重新上电后仍需从 AT 测试开始,依次确认:

串口正常 → Wi-Fi 模式正确 → 已加入热点 → 已取得 IP
         → 电脑服务器已监听 → CIPSTART 成功 → CIPSEND 成功

某些 Wi-Fi 参数是否在重启后保留取决于 AT 固件版本及其存储设置,不能假设断电一定清除,也不能假设一定自动恢复全部状态。

2.5 例题5: 手机热点问题

某个手机热点无法连接而换另一个热点可以,通常说明模块基本功能正常,应重点检查原热点:

  • 是否实际开放 2.4 GHz;
  • 密码和加密方式是否兼容;
  • SSID 是否被隐藏或含有编码/转义问题;
  • 是否限制了接入设备数量;
  • 是否启用了客户端隔离;
  • 手机是否关闭了热点或进入省电状态。

ESP8266 在持续联网时有温升并不罕见,但“明显烫手、伴随异味、频繁重启或电流异常”不能当成正常现象。应立即断电,检查是否误接 5 V、是否短路,以及 3.3 V 电源是否稳定。

2.6 例题6:TCP实验第一阶段

TCP 实验第一阶段可以按以下最小闭环执行:

1. 打开串口助手,发送 AT,确认 OK
2. CWMODE 配置 Station 能力
3. CWJAP 加入 2.4 GHz 热点
4. CIFSR 查询 STAIP
5. 电脑建立 TCP Server
6. CIPSTART 连接电脑的 IP:端口
7. CIPSEND 声明长度并发送正文
8. 检查服务器是否收到相同字节

每一步成功后再进入下一步,发生错误时就能快速定位所在层级。

2.7 例题7: 指令发送问题

收到 ERROR 时,首先区分当前发送的是 AT 指令还是数据正文:

  • AT 指令必须以 CR-LF 结束,不能带中文标点和多余空格;
  • AT+CIPSEND=n 后要先等待 >,再发送正文;
  • 正文应恰好为 n 字节,正文阶段不要误加回车换行;
  • TCP 尚未连接、已经被服务器关闭或 Wi-Fi 已断开时,发送也会失败;
  • 不同固件版本支持的指令和返回文本可能不同。

复制粘贴可以减少拼写错误,但仍要确认英文双引号、逗号、等号和 CR-LF 都正确。

2.8 例题8: 客户端与服务端的连接问题

如果电脑关闭 TCP Server,原有连接会被释放,ESP8266 可能输出 CLOSED。只要 Wi-Fi 仍然连接,一般不必重新执行全部 Wi-Fi 指令,只需重新打开服务器,然后再次发送:

AT+CIPSTART="TCP","服务器IP",服务器端口

连接成功后,可继续执行:

AT+CIPSEND=6

看到 > 后发送恰好 6 字节,例如 QWERTY。

电脑服务器向 ESP8266 发送 ABCD 时,ESP8266 串口侧通常会收到:

+IPD,4:ABCD

+IPD 表示有网络数据到达,4 表示本次上报的数据长度,冒号后才是数据正文。完整接收方向为:

电脑 TCP Server ──TCP──> 路由器 ──Wi-Fi──> ESP8266
                                            │ UART
                                            ▼
                                      串口助手/单片机

2.9 例题9: 数据接收问题

TCP 提供的是连续字节流,不保存应用层“每点一次发送按钮就是一包”的边界。电脑连续两次发送 ABCD,ESP8266 有可能收到:

+IPD,4:ABCD
+IPD,4:ABCD

也可能在一次上报中看到:

+IPD,8:ABCDABCD

还可能因网络、缓冲区和固件调度而被拆成其他长度。因此,不能把“连续发送两次就一定变成长度 8”写成固定规律。单片机程序应先解析 +IPD,<长度>:,再按长度收取正文;真正的应用协议还应设计自己的消息边界,例如固定长度、分隔符或“消息头+长度+负载+校验”。

flowchart LR
    A[服务器调用两次 send<br/>ABCD / ABCD] --> B[TCP 字节流<br/>ABCDABCD]
    B --> C1[可能上报<br/>+IPD,4:ABCD 两次]
    B --> C2[也可能上报<br/>+IPD,8:ABCDABCD]
    B --> C3[也可能拆分成<br/>其他长度组合]

至此已经验证了双向链路:电脑可经 TCP 把数据送到 ESP8266 的 UART,ESP8266 也可把 UART 数据经 TCP 发给电脑。下一步只需把串口助手换成 51 单片机,让程序自动发送相同的 AT 指令并解析返回数据。