1. ESP32自动配网方案概述
当拿到一块全新的ESP32开发板时,最让人头疼的就是首次联网配置。传统做法需要硬编码SSID和密码,或者每次修改代码重新烧录,这对量产设备来说简直是噩梦。今天要分享的这套自动配网方案,可以让设备初次上电时自动进入配网模式,用户通过手机连接指定热点并提交WiFi凭证后,设备就能永久记住网络配置。
这个方案的核心在于利用NVS(Non-Volatile Storage)闪存分区存储网络配置。ESP32的NVS特性允许我们将键值对数据永久保存在闪存中,即使断电也不会丢失。实测在ESP32-WROOM-32D模块上,配置信息可以保存超过10万次擦写周期。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件与开发环境准备
2.1 所需硬件组件
- ESP32开发板(推荐使用ESP32-WROOM系列)
- Micro USB数据线
- 可选:LED指示灯(用于状态显示)
- 可选:按键开关(用于手动触发重置配置)
2.2 软件环境配置
建议使用PlatformIO + VSCode组合开发,相比Arduino IDE具有更好的项目管理能力:
- 安装VSCode
- 在扩展商店搜索安装PlatformIO IDE
- 创建新项目,选择"Espressif 32"平台
- 在platformio.ini中添加依赖库:
ini复制lib_deps =
arduino-libraries/ArduinoJson @ ^6.21.3
tzapu/WiFiManager @ ^2.0.16-alpha
注意:WiFiManager库的2.0.x版本对ESP32支持更完善,建议不要使用老版本。
3. 核心代码实现解析
3.1 NVS存储初始化
首先需要在setup()中初始化NVS存储系统:
cpp复制#include <nvs_flash.h>
void setup() {
// 初始化NVS分区
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES) {
// 如果NVS分区被破坏,先擦除再初始化
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
}
3.2 WiFiManager配置流程
使用WiFiManager库实现智能配网界面:
cpp复制#include <WiFiManager.h>
void startConfigPortal() {
WiFiManager wm;
// 设置配置超时时间(秒)
