ESP32开发入门(五):WiFi 开发实践
ESP32-S3是乐鑫推出的WiFi+蓝牙双模芯片,内置32位双核处理器,具有丰富的IO接口和外设。下面我将基于ESP32-S3介绍ESP32系列的WiFi功能开发实践。
一、WiFi简介
WiFi(Wireless Fidelity,无线保真)是一种基于 IEEE 802.11 标准的无线局域网(WLAN)技术,允许电子设备通过无线方式连接到互联网或局域网。WiFi 使用无线电波在设备之间传输数据,通常工作在 2.4GHz 和 5GHz 频段。
WiFi 的工作模式
WiFi 设备可以工作在不同的模式下,以适应不同的网络需求和环境。以下是常见的 WiFi 工作模式:
-
STA(Station)模式(客户端模式)
-
设备作为客户端连接到现有的 WiFi 网络(如无线路由器或热点)。
-
例如:手机、笔记本电脑连接到家庭 WiFi 路由器。
-
-
AP(Access Point,接入点)模式
-
设备充当 WiFi 热点,允许其他设备(STA)连接到它。
-
例如:无线路由器提供 WiFi 接入服务。
-
-
AP+STA 模式(混合模式)
-
设备同时作为 AP(提供 WiFi 热点)和 STA(连接到另一个 WiFi 网络)。
-
例如:无线中继器或某些物联网设备。
-
-
Ad-Hoc 模式(点对点模式)
-
设备之间直接通信,无需通过 AP 中转。
-
适用于临时组网,如设备间的直接文件传输。
-
-
Mesh 模式(网状网络模式)
-
多个设备组成一个自组织、自修复的网络,扩展覆盖范围。
-
通常用于大范围 WiFi 覆盖(如智能家居或企业网络)。
-
-
WDS(Wireless Distribution System,无线分布式系统)
-
通过无线链路扩展网络覆盖范围(如多个 AP 之间的无线桥接)。
-
常用于无法布线的环境。
-
-
Monitor 模式(监听模式)
-
设备仅监听 WiFi 信号,不主动参与通信。
-
用于网络分析或安全测试(如抓包工具)。
-
-
P2P(Wi-Fi Direct,点对点直连)
-
设备之间直接建立高速连接,无需传统 AP。
-
例如:手机与打印机直接通过 WiFi 传输文件。
-
其中STA、AP、AP+STA三种模式是日常生活中最常见的WiFi模式。这里就基于这3中模式的开发展开讲解。
二、ESP32WiFi开发实践
1、连接WiFi网络(STA模式)
#include <WiFi.h>
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
void connectToWiFi() {Serial.println("正在连接到WiFi...");WiFi.disconnect();WiFi.begin(ssid, password);unsigned long startAttemptTime = millis();while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 20000) { // 20秒超时delay(500);Serial.print(".");}if (WiFi.status() != WL_CONNECTED) {Serial.println("连接失败!");// 可以在这里添加失败处理逻辑} else {Serial.println("");Serial.println("WiFi连接成功");Serial.print("IP地址: ");Serial.println(WiFi.localIP());}
}
void setup() {Serial.begin(115200);connectToWiFi();
}
void loop() {if (WiFi.status() != WL_CONNECTED) {connectToWiFi();}delay(1000);
}
关键点说明:
-
WiFi.begin() 启动连接过程
-
WiFi.status() 检查连接状态
-
WiFi.localIP() 获取分配的IP地址
-
Serial.begin(115200),使用uart0,波特率115200,使用串口助手连接之后非常方便调试。
2、WiFi扫描
扫描周围可用的WiFi网络:
#include <WiFi.h>
void setup() {Serial.begin(115200);// 设置WiFi为STA模式WiFi.mode(WIFI_STA);WiFi.disconnect();delay(100);Serial.println("开始扫描WiFi网络...");// 扫描网络int n = WiFi.scanNetworks();Serial.println("扫描完成");if (n == 0) {Serial.println("没有发现任何网络");} else {Serial.print(n);Serial.println(" 个网络发现");for (int i = 0; i < n; ++i) {// 打印SSID和信号强度Serial.print(i + 1);Serial.print(": ");Serial.print(WiFi.SSID(i));Serial.print(" (");Serial.print(WiFi.RSSI(i));Serial.print(")");Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");delay(10);}}Serial.println("");
}
void loop() {// 这里不需要做任何事情
}
关键点说明:
-
WiFi.mode(WIFI_STA)设置WiFi为STA模式
-
WiFi.scanNetworks()扫描网络
若有兴趣,可以把上述两个程序结合在一起,扫描完成之后选择其中一个网络进行连接。
3、创建WiFi热点(AP模式)
ESP32-S3还可以作为WiFi热点(AP)使用:
#include <WiFi.h>
const char* ssid = "ESP32-S3-AP";
const char* password = "12345678";
void setup() {Serial.begin(115200);// 配置为AP模式WiFi.softAP(ssid, password);Serial.println("WiFi热点已创建");Serial.print("SSID: ");Serial.println(ssid);Serial.print("IP地址: ");Serial.println(WiFi.softAPIP());
}
void loop() {// 显示连接到热点的客户端数量Serial.print("连接设备数: ");Serial.println(WiFi.softAPgetStationNum());delay(3000);
}
关键点说明:
-
WiFi.softAP(ssid, password):设置WiFi为AP模式
-
WiFi.softAPIP():获取Wifi地址
-
WiFi.softAPgetStationNum():获取设备连接数量
4、STA+AP模式
ESP32-S3可以同时作为STA(连接到路由器)和AP(创建热点):
#include <WiFi.h>
const char* sta_ssid = "你的WiFi名称";
const char* sta_password = "你的WiFi密码";
const char* ap_ssid = "ESP32-S3-AP";
const char* ap_password = "12345678";
void setup() {Serial.begin(115200);// 设置为STA+AP模式WiFi.mode(WIFI_AP_STA);// 连接到路由器WiFi.begin(sta_ssid, sta_password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi连接成功");Serial.print("STA IP地址: ");Serial.println(WiFi.localIP());// 创建热点WiFi.softAP(ap_ssid, ap_password);Serial.println("WiFi热点已创建");Serial.print("AP IP地址: ");Serial.println(WiFi.softAPIP());
}
void loop() {Serial.print("STA状态: ");Serial.println(WiFi.status() == WL_CONNECTED ? "已连接" : "已断开");Serial.print("AP连接设备数: ");Serial.println(WiFi.softAPgetStationNum());delay(3000);
}
注意事项
-
在长时间运行中,建议添加WiFi断开重连机制
-
对于电池供电设备,考虑使用WiFi低功耗模式
-
生产环境中,建议将WiFi凭证存储在非易失性存储器中
-
ESP32-S3的WiFi性能优于传统ESP32,支持更高的吞吐量
希望这个教程对你有所帮助!如果需要更高级的功能如Web服务器、MQTT客户端等,可以基于这些基础WiFi功能进一步开发。