ESP8266WIFI实验
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 转 TTL | ESP8266 | 作用 |
|---|---|---|
| TXD | RXD | 电脑向 ESP8266 发送指令,必须交叉连接 |
| RXD | TXD | ESP8266 向电脑返回结果,必须交叉连接 |
| GND | GND | 建立共同的电压参考点 |
| 独立稳定的 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 | 模式 | 含义 |
|---|---|---|
| 0 | Null | 关闭 Wi-Fi 射频功能,具体支持情况与固件有关 |
| 1 | Station | ESP8266 作为终端,连接路由器或手机热点 |
| 2 | SoftAP | ESP8266 自己建立热点,供其他设备连接 |
| 3 | Station + 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
字段应分别理解:
| 字段 | 含义 | 本实验是否重点使用 |
|---|---|---|
APIP | ESP8266 自身 SoftAP 接口的 IP | 否 |
APMAC | SoftAP 接口的 MAC 地址 | 否 |
STAIP | ESP8266 作为 Station 接入路由器后取得的 IP | 是,用于确认入网状态 |
STAMAC | Station 接口的 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。若点击“打开”后失败,可执行以下检查:
- 端口是否已被同一软件的另一个实例或其他程序占用;
- 绑定的 IP 是否仍属于当前电脑;
- 电脑是否刚切换了热点或网卡,导致地址变化;
- 网络调试助手是否有明确的错误提示。
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: 网络和端口设置问题
“看起来在同一网段却找不到或连不上”时,按链路由近到远检查:
AT是否返回OK,排除串口问题;AT+CWJAP?或AT+CIFSR是否表明确实连上热点并取得STAIP;- 电脑当前 Wi-Fi 地址和子网掩码是否正确,不能选到虚拟网卡/VPN 地址;
- 电脑与 ESP8266 是否真的连接同一个热点,热点是否开启“客户端隔离/AP isolation”;
- TCP Server 是否已经在目标 IP 和端口上监听;
- 防火墙是否允许该应用或端口的局域网入站连接。
仅仅重开网络调试助手可以刷新网卡列表,但它不能替代上述检查。电脑切换 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 指令并解析返回数据。