# wifi-connect 组件说明 `wifi-connect` 是一个基于 ESP-IDF 的 Wi-Fi 配网组件,支持: - 长按按键进入配网模式 - 启动 SoftAP + Captive Portal(网页配网) - 手机连接热点后,通过网页扫描并选择路由器 - 保存 Wi-Fi 凭据到 NVS - 下次开机自动重连 - 配网成功后自动关闭热点(可配置延迟) 面向最终用户的一页版操作说明见:`USER_GUIDE.md` 现场打印张贴版(四步卡)见:`QUICK_POSTER.md` --- ## 目录结构 - `wifi-connect.c`:组件主实现(按键、APSTA、HTTP、DNS、状态机) - `include/wifi-connect.h`:对外 API - `Kconfig.projbuild`:组件配置项 - `CMakeLists.txt`:组件构建依赖 --- ## 对外 API 头文件:`include/wifi-connect.h` - `esp_err_t wifi_connect_init(void);` - 初始化组件(NVS、Wi-Fi、事件、按键任务等) - 尝试自动连接已保存网络 - `esp_err_t wifi_connect_start(void);` - 启动配网(APSTA + HTTP + DNS) - `esp_err_t wifi_connect_stop(void);` - 停止配网(关闭热点与相关服务) - `wifi_connect_status_t wifi_connect_get_status(void);` - 获取当前状态:`idle / provisioning / connecting / connected / failed / timeout` - `esp_err_t wifi_connect_get_config(wifi_connect_config_t *config);` - 读取已保存的 Wi-Fi 凭据 - `esp_err_t wifi_connect_clear_config(void);` - 清除已保存的 Wi-Fi 凭据(SSID/密码) --- ## 快速使用 在 `main/main.c`: ```c #include "esp_check.h" #include "wifi-connect.h" void app_main(void) { ESP_ERROR_CHECK(wifi_connect_init()); } ``` 运行后: 1. 长按配置按键进入配网 2. 手机连接 `ESP32-xxxxxx` 热点 3. 打开 `http://192.168.4.1` 4. 选择 Wi-Fi 并输入密码提交 5. 设备连接成功后自动关闭配网热点 如需清空历史凭据,可在配网页面点击“清除已保存”。 --- ## Kconfig 配置项 在 `idf.py menuconfig` 中:`WiFi Connect` 菜单 - `WIFI_CONNECT_BUTTON_GPIO`:进入配网的按键 GPIO - `WIFI_CONNECT_BUTTON_ACTIVE_LEVEL`:按键有效电平 - `WIFI_CONNECT_DEBOUNCE_MS`:按键去抖时间 - `WIFI_CONNECT_LONG_PRESS_MS`:长按触发时长 - `WIFI_CONNECT_CONNECT_TIMEOUT_SEC`:连接路由器超时 - `WIFI_CONNECT_IDLE_TIMEOUT_SEC`:配网页面空闲超时 - `WIFI_CONNECT_MAX_SCAN_RESULTS`:扫描网络最大数量 - `WIFI_CONNECT_AP_MAX_CONNECTIONS`:SoftAP 最大连接数 - `WIFI_CONNECT_AP_GRACEFUL_STOP_SEC`:联网成功后 AP 延迟关闭秒数 --- ## 日志与状态说明(中文) 组件会输出统一中文状态日志,例如: - `【状态】wifi-connect 初始化完成` - `【状态】检测到按键长按:开始进入配网模式` - `【状态】配网已启动:配网热点已开启,SSID=...` - `【状态】开始连接路由器:收到配网请求,目标网络=...` - `【状态】联网成功:已连接 ...,获取 IP=...` - `【状态】配网已停止:热点已关闭,设备继续以 STA 模式运行` 说明:ESP-IDF 驱动层(如 `wifi:`、`esp_netif_lwip:`)仍会输出英文日志,这是框架默认行为。 --- ## 常见问题 ### 1) 手机连上热点但不自动弹出页面 - 手动访问:`http://192.168.4.1` - 确认手机没有强制使用 HTTPS - 查看串口是否有 `配网已启动`、`DNS 劫持服务已启动` 日志 ### 2) 提交后连接失败 - 检查密码是否正确 - 查看日志中的失败原因码(`连接失败,原因=...`) - 检查路由器是否禁用了新设备接入 - 若曾保存过旧配置,可先在页面点击“清除已保存”后再重试 ### 3) 成功后热点消失是否正常 - 正常。组件设计为连接成功后自动关闭配网热点 - 可通过 `WIFI_CONNECT_AP_GRACEFUL_STOP_SEC` 调整关闭延时 --- ## 依赖 由 `CMakeLists.txt` 声明: - `esp_wifi` - `esp_timer` - `esp_event` - `esp_netif` - `nvs_flash` - `esp_http_server` - `lwip` - `driver` --- ## 版本建议 - 推荐 ESP-IDF `v5.5.x` - 当前项目验证环境:`esp-idf v5.5.2`(ESP32-C3)