WiFi 连接上网实战

📅 2026-05-06 · 📂 硬件编程 · ⏱ 阅读约 5 分钟

📺 B站推荐视频:ESP32 入门教程

概述

ESP32 的灵魂能力就是 WiFi。本篇教你用三种模式连接网络:Station 模式(连路由器)、AP 模式(自己当热点)、STA+AP 混合模式。掌握 WiFi 是后续所有物联网项目的基础。

学习目标:理解 WiFi 工作模式,掌握 WiFi 库基本 API,学会处理断线重连。

物料清单

不需要额外硬件!ESP32 内置 2.4GHz WiFi 模组。注意:ESP32 不支持 5GHz WiFi

三种 WiFi 模式

模式说明典型场景
STA (Station)连接到路由器,获取 IP上传数据到云端、请求 API
AP (Access Point)自己创建热点,其他设备连接本地配置页面、离线控制
STA+AP同时连接路由器+创建热点一边上网一边提供本地服务

实战一:Station 模式 — 连接路由器

// WiFi_Station.ino — 连接到家庭 WiFi #include <WiFi.h> const char* ssid = "你的WiFi名"; const char* password = "你的WiFi密码"; void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); // 设为Station模式 WiFi.begin(ssid, password); // 开始连接 Serial.print("正在连接"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" ✓ 连接成功!"); Serial.print("IP地址: "); Serial.println(WiFi.localIP()); Serial.printf("信号强度: %d dBm ", WiFi.RSSI()); } void loop() { static unsigned long lastCheck = 0; if (millis() - lastCheck > 10000) { lastCheck = millis(); Serial.printf("WiFi状态: %d, RSSI: %d ", WiFi.status(), WiFi.RSSI()); } }

实战二:AP 模式 — 自己做热点

// WiFi_AP.ino — 创建自己的 WiFi 热点 #include <WiFi.h> const char* ap_ssid = "ESP32_Hotspot"; const char* ap_password = "12345678"; // 至少8位 void setup() { Serial.begin(115200); WiFi.mode(WIFI_AP); WiFi.softAP(ap_ssid, ap_password); Serial.println("✓ 热点已创建"); Serial.print("SSID: "); Serial.println(ap_ssid); Serial.print("IP: "); Serial.println(WiFi.softAPIP()); // 默认 192.168.4.1 Serial.printf("已连接设备: %d ", WiFi.softAPgetStationNum()); } void loop() { static int lastCount = 0; int count = WiFi.softAPgetStationNum(); if (count != lastCount) { Serial.printf("连接设备数: %d → %d ", lastCount, count); lastCount = count; } delay(2000); }

断线自动重连(生产级)

// WiFi 断线自动重连 — 生产环境必备 #include <WiFi.h> void WiFi_Reconnect() { static unsigned long lastAttempt = 0; if (WiFi.status() != WL_CONNECTED) { if (millis() - lastAttempt > 30000) { // 每30秒重试 lastAttempt = millis(); Serial.println("WiFi 断开,尝试重连..."); WiFi.disconnect(); WiFi.reconnect(); } } } void WiFiEvent(WiFiEvent_t event) { switch (event) { case SYSTEM_EVENT_STA_GOT_IP: Serial.println("✓ WiFi已连接"); break; case SYSTEM_EVENT_STA_DISCONNECTED: Serial.println("✗ WiFi断开"); break; } } void setup() { Serial.begin(115200); WiFi.onEvent(WiFiEvent); // 注册事件回调 WiFi.begin(ssid, password); } void loop() { WiFi_Reconnect(); // 你的业务代码... }

常见问题

⚠️ 仅支持 2.4GHz:ESP32 不支持 5GHz WiFi。如果你的路由器开启了"双频合一",可能导致连接失败。建议给 2.4GHz 单独命名 SSID。
⚠️ WiFi.begin 阻塞:默认 WiFi.begin() 会阻塞直到连接成功或超时(约 30 秒)。上电后整个 setup() 会卡住。可用 WiFi.setAutoReconnect(true) 让底层自动重连。
💡 信号强度:RSSI > -50 dBm 为优秀,-50~-70 良好,-70~-80 一般,< -80 不稳定。天线朝向和金属外壳都会影响信号。
💡 省电策略:WiFi 是 ESP32 最大的耗电来源(~100mA)。电池供电项目可在不通信时 WiFi.mode(WIFI_OFF) 关闭 WiFi,唤醒后再打开。

延伸练习

  1. WiFi 扫描:WiFi.scanNetworks() 打印周围所有 WiFi 的 SSID 和信号强度
  2. 智能配网:用 SmartConfig 或网页配网,避免硬编码密码
  3. 获取网络时间:configTime() 从 NTP 服务器同步当前时间