ESP32 web配网demo_esp32内嵌web网页
espweblink 项目文档
https://gitee.com/qu_haoran/esp-idf-WEBlink项目链接
一、项目概述
espweblink
是一个基于 ESP32 的项目,主要用于实现 WiFi 扫描、配置和建立连接,同时包含一个 Web 服务器和 DNS 服务器,支持通过 Web 页面进行 WiFi 配置。项目利用 ESP-IDF 框架开发,具备 WiFi Station 和 SoftAP 模式,可自动重连 WiFi,支持将 WiFi 配置信息存储到 NVS(非易失性存储)中。
二、项目结构
espweblink/├── main/│ ├── main.c # 主程序文件,包含WiFi初始化、事件处理、HTTP和DNS服务器启动等功能│ ├── dns_server.c # DNS服务器相关代码,用于解析DNS请求并响应│ ├── scan.c # WiFi扫描功能实现,可获取附近WiFi列表并生成JSON数据│ ├── root.html # 前端Web页面,用于展示WiFi列表和进行配置│ └── CMakeLists.txt # 主模块CMake配置文件├── pytest_captive_portal.py # 测试脚本,用于测试重定向和捕获页面功能├── CMakeLists.txt # 项目CMake配置文件
三、功能特性
- WiFi 扫描:周期性扫描附近的 WiFi 网络,并将扫描结果存储在全局变量中,可通过 JSON 格式获取。
- WiFi 配置:支持通过 Web 页面输入 WiFi 的 SSID 和密码进行配置,配置信息会存储到 NVS 中。
- 自动重连:在 WiFi 连接失败时,会自动尝试重新连接,达到最大重试次数后会切换到 SoftAP 模式。
- Web 服务器:提供 HTTP 服务,可访问根页面和获取 WiFi 列表,支持处理 WiFi 配置的 POST 请求。
- DNS 服务器:解析 DNS 请求,将所有请求重定向到 SoftAP 的 IP 地址。
- 测试脚本:包含测试重定向和捕获页面功能的脚本,可验证项目的基本功能。
四、环境搭建
4.1 安装 ESP-IDF
请按照 ESP-IDF 官方文档的指引,完成 ESP-IDF 的安装和环境配置。
4.2 配置项目
根据实际需求,在 main.c 文件中修改以下配置项:
#define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID#define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD#define EXAMPLE_MAX_STA_CONN CONFIG_ESP_MAX_STA_CONN#define EXAMPLE_ESP_MAXIMUM_RETRY 5
4.3 编译和烧录
idf.py buildidf.py -p /dev/ttyUSB0 flash # 根据实际情况修改串口设备路径
五、使用说明
5.1 启动项目
烧录完成后,ESP32 会自动启动,尝试连接到之前配置的 WiFi 网络。如果连接失败,会切换到 SoftAP 模式。
5.2 访问 Web 页面
在 SoftAP 模式下,将设备连接到 ESP32 创建的 WiFi 网络,然后在浏览器中输入 SoftAP 的 IP 地址,即可访问配置页面。
5.3 配置 WiFi
在 Web 页面上,选择要连接的 WiFi 网络,输入密码,点击保存即可完成配置。配置信息会存储到 NVS 中,下次启动时会自动使用。
5.4 测试功能
可以运行 pytest_captive_portal.py 脚本进行功能测试,验证重定向和捕获页面功能是否正常。
六、代码说明
6.1 main.c
wifi_init()
:初始化 WiFi,包括 NVS、网络接口和事件循环。wifi_init_sta()
:初始化 WiFi Station 模式,尝试连接到指定的 WiFi 网络。wifi_init_softapsta()
:初始化 SoftAP 和 Station 模式,创建 WiFi 热点。root_get_handler()
:处理 HTTP GET 请求,返回根页面。wifi_list_get_handler()
:处理 HTTP GET 请求,返回 WiFi 列表的 JSON 数据。wifi_config_post_handler()
:处理 HTTP POST 请求,接收 WiFi 配置信息并保存到 NVS 中。
6.2 scan.c
wifi_scan_task()
:周期性扫描附近的 WiFi 网络,并将结果存储在全局变量中。get_wifi_list_json()
:将扫描到的 WiFi 列表转换为 JSON 格式的字符串。
6.3 dns_server.c
parse_dns_name()
:解析 DNS 请求中的域名。parse_dns_request()
:解析 DNS 请求并生成响应,将所有请求重定向到 SoftAP 的 IP 地址。
七、注意事项
- 请确保 ESP-IDF 环境配置正确,编译和烧录过程中可能会出现依赖问题,需要根据错误信息进行解决。
- 在使用测试脚本时,需要确保主机能够连接到 ESP32 创建的 WiFi 网络,并且具备相应的 WiFi 接口。
- 存储在 NVS 中的 WiFi 配置信息可以在设备重启后保留,但如果需要清除配置信息,可以通过代码或 NVS 工具进行操作。