三种工作模式
ESP32 的 WiFi 支持三种模式,Arduino 框架下用 WiFi.mode() 切换:
| 模式 | 含义 | 典型用途 |
|---|---|---|
| WIFI_STA(Station) | 加入现有 WiFi 网络,像手机一样 | 联网取数据、上报传感器读数 |
| WIFI_AP(Access Point) | 自己发出一个 WiFi 热点 | 配网门户、无路由器时的直连控制 |
| WIFI_STA_AP | 两者同时 | 已联网的同时提供配置页面 |
注意 ESP32 只支持 2.4 GHz 频段,连不上网先确认路由器没把 2.4 GHz 关掉,也别拿 5 GHz 专属 SSID 去连。
STA 模式:连接家里 WiFi
WiFi.h 已内置于 Arduino-ESP32 核心,无需安装库。最小连接代码:
#include <WiFi.h>
const char* ssid = "你的WiFi名";
const char* password = "你的WiFi密码";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("连接中");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n已连接");
Serial.print("IP 地址:");
Serial.println(WiFi.localIP());
}
void loop() {}
串口监视器(115200 波特率)看到 IP 地址即连接成功。WiFi.begin() 是非阻塞的启动动作,需要自己轮询 WiFi.status() 等到 WL_CONNECTED。
断线自动重连
Arduino-ESP32 默认开启自动重连,但路由器重启等场景下仍可能失联。稳妥做法是在 loop 里检测并主动恢复:
void loop() {
if (WiFi.status() != WL_CONNECTED) {
WiFi.disconnect();
WiFi.reconnect();
delay(5000);
}
// 正常业务逻辑
}
HTTP 请求:GET 与 POST
联网之后最常见的需求是取数据和上报数据,用内置的 HTTPClient 库。
GET 请求
#include <WiFi.h>
#include <HTTPClient.h>
// ... setup 中先连上 WiFi ...
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://httpbin.org/ip"); // 公共测试接口
int httpCode = http.GET();
if (httpCode > 0) {
Serial.printf("HTTP 状态码:%d\n", httpCode);
Serial.println(http.getString()); // 响应正文
} else {
Serial.printf("请求失败:%s\n",
http.errorToString(httpCode).c_str());
}
http.end(); // 释放资源,务必调用
}
delay(10000);
}
POST 请求
http.begin("http://example.com/api/data");
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST("{\"temperature\":25.5}");
http.end();
上报传感器数据到服务器基本都用 POST,把读数拼成 JSON 放在请求体里。
AP 模式:ESP32 自己当热点
没有路由器、或者设备第一次配网时,让 ESP32 自己发出热点,手机连上来直接通信:
#include <WiFi.h>
void setup() {
Serial.begin(115200);
WiFi.softAP("ESP32-Setup", "12345678"); // 密码至少 8 位
Serial.print("AP IP 地址:");
Serial.println(WiFi.softAPIP()); // 默认 192.168.4.1
}
void loop() {}
运行后手机 WiFi 列表会出现 ESP32-Setup,连接后浏览器访问 192.168.4.1 即可与 ESP32 通信(配合 WebServer 库可搭出配网页面)。
这是商用 IoT 设备的标准套路:首次上电进 AP 模式,手机连入后填写家里 WiFi 的账号密码,设备保存后切换到 STA 模式联网。
省电与稳定性的取舍
WiFi 射频是 ESP32 上最耗电的部分,电池供电项目可用 WiFi.setSleep(true) 开启调制解调器休眠(默认开启),代价是响应延迟增加几十毫秒;交流供电的常驻设备可 WiFi.setSleep(false) 换取低延迟。
常见坑速查
- 一直连不上:确认是 2.4 GHz 网络;SSID 和密码区分大小写;公司或校园网的 Portal 认证网络 ESP32 无法登录
- 连上了很快掉线:路由器 AP 隔离或 DHCP 地址池耗尽;换频段带宽 20 MHz 试试
- HTTP 请求返回 -1:URL 写成了 https 而 ESP32 未处理证书,或域名解析失败;先 ping 通再查代码
- 开了 WiFi 后 ADC 读数异常:用了 ADC2 引脚(详见基础外设页),换 GPIO 32-39
- 软AP密码无效:
softAP密码不足 8 位时会启动失败,日志会提示