完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我能够使用 ESPTOUCH 应用程序成功设置 smartconfig 示例。 我想修改此示例以自动连接到上次工作的WiFi网络。 有人可以就最佳方法提供指导吗?
我可以使用类似于 NVS RW 示例的东西轻松保存 ssid 和密码。 但是,我在文档中注意到 esp_wifi_init() 方法有一个 WiFi NVS 结构的选项。https://esp-idf.readthedocs.io/en/v2.0/api/wifi/esp_wifi.html有没有一种自动方法可以使用它在启动时检索以前有效的凭据? |
|
相关推荐
1个回答
|
|
要将智能配置的SSID和密码存储在WiFi NVS结构中,并在启动时自动连接到上次工作的WiFi网络,您可以按照以下步骤操作:
1. 首先,确保您已经安装了ESP-IDF开发框架,并将其配置正确。 2. 在您的项目中,包含以下头文件: ```c #include "esp_wifi.h" #include "esp_system.h" #include "nvs_flash.h" #include "esp_event_loop.h" ``` 3. 初始化NVS存储: ```c static void initialize_nvs() { esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); } ``` 4. 创建一个函数来保存SSID和密码到NVS存储: ```c static void save_wifi_credentials(const char *ssid, const char *password) { nvs_handle_t handle; esp_err_t err = nvs_open("wifi_config", NVS_READWRITE, &handle); if (err != ESP_OK) { return; } err = nvs_set_str(handle, "ssid", ssid); if (err != ESP_OK) { goto exit; } err = nvs_set_str(handle, "password", password); if (err != ESP_OK) { goto exit; } err = nvs_commit(handle); if (err != ESP_OK) { goto exit; } exit: nvs_close(handle); } ``` 5. 创建一个函数来从NVS存储中检索SSID和密码: ```c static bool retrieve_wifi_credentials(char *ssid, char *password) { nvs_handle_t handle; esp_err_t err = nvs_open("wifi_config", NVS_READONLY, &handle); if (err != ESP_OK) { return false; } size_t length = sizeof(ssid); err = nvs_get_str(handle, "ssid", ssid, &length); if (err != ESP_OK) { goto exit; } length = sizeof(password); err = nvs_get_str(handle, "password", password, &length); if (err != ESP_OK) { goto exit; } exit: nvs_close(handle); return err == ESP_OK; } ``` 6. 修改您的主函数以使用这些函数: ```c void app_main() { initialize_nvs(); char ssid[32] = {0}; char password[64] = {0}; if (retrieve_wifi_credentials(ssid, password)) { esp_wifi_init(&wifi_init_config); esp_wifi_set_storage(WIFI_STORAGE_FLASH); esp_wifi_set_mode(WIFI_MODE_STA); esp_wifi_start(); wifi_config_t wifi_config = { .sta = { .ssid = ssid, .password = password, }, }; esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config); } else { // 如果没有找到有效的凭据,使用ESPTOUCH或其他方法进行配置 } } ``` 这样,您的设备将在启动时自动尝试连接到上次工作的WiFi网络。如果找不到有效的凭据,您可以使用ESPTOUCH或其他方法进行配置。 |
|
|
|
只有小组成员才能发言,加入小组>>
733 浏览 1 评论
552浏览 6评论
461浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
445浏览 5评论
445浏览 4评论
417浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 13:19 , Processed in 0.904387 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号