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 不一定代表最终失败,关键要看随后是否出现 CONNECTEDGOT IPOK

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。练习时宜选择未被占用的高位端口,例如 51328080。若点击“打开”后失败,可执行以下检查:

  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 侧会返回 CONNECTOK,电脑端服务器会出现一个新接入的客户端,其地址通常就是前面 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 指令并解析返回数据。