Files
BotanicalBuddy/components/wifi-connect/README.md
Wang Beihong 7261022611 feat: 初始化 BotanicalBuddy 项目并集成 Wi-Fi 配网组件
- 新增 wifi-connect 组件(AP 配网、DNS 劫持、Captive Portal)

- 支持长按按键进入配网,网页配置路由器 SSID/密码

- 增加清除已保存 Wi-Fi 参数能力(API + 页面按钮)

- 增加中文状态日志与中文注释,优化配网交互

- 补充组件文档:README、USER_GUIDE、QUICK_POSTER、BLOG
2026-03-05 12:41:15 +08:00

149 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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