29-ESP32-S3-WIFI篇-00 STA模式扫描全部 AP

ESP32-S3 WIFI_Driver

引言

ESP32-S3是一款集成了Wi-Fi和蓝牙功能的芯片。关于WIFI的部分,其实内容比我想象的要多得多。所以通常来说,如果你想要编写自己的Wi-Fi应用程序,最快捷的方法就是先找一个类似的示例应用,然后将它的相关部分搬移到你的项目中,强烈建议在开始项目前先阅读ESP-IDF-Wi-Fi 驱动程序编程指南

ESP32-S3 Wi-Fi概述

ESP32-S3的Wi-Fi库提供了配置和监控ESP32-S3 Wi-Fi网络功能的支持。这包括以下配置:

  • Station模式 (也称为STA模式或Wi-Fi客户端模式):ESP32-S3连接到一个接入点。
  • AP模式 (也称为Soft-AP模式或接入点模式):站点连接到ESP32-S3。
  • Station/AP共存模式 (ESP32-S3同时作为一个接入点和一个连接到另一个接入点的站点)。

ESP32-S3 Wi-Fi STA模式扫描 AP流程

初始化Wi-Fi、设置Wi-Fi模式、启动Wi-Fi

在这里插入图片描述
1. Wi-Fi/LwIP 初始化阶段

  • s1.1:主任务通过调用函数 esp_netif_init() 创建一个 LwIP 核心任务,并初始化 LwIP 相关工作。

  • s1.2:主任务通过调用函数 esp_event_loop_create() 创建一个系统事件任务,并初始化应用程序事件的回调函数。在此情况下,该回调函数唯一的动作就是将事件中继到应用程序任务中。

  • s1.3:主任务通过调用函数 esp_netif_create_default_wifi_ap() 或 esp_netif_create_default_wifi_sta() 创建有 TCP/IP 堆栈的默认网络接口实例绑定 station 或 AP。

  • s1.4:主任务通过调用函数 esp_wifi_init() 创建 Wi-Fi 驱动程序任务,并初始化 Wi-Fi 驱动程序。

2. Wi-Fi 配置阶段

  • Wi-Fi 驱动程序初始化成功后,可以进入到配置阶段。该场景下,Wi-Fi 驱动程序处于 station 模式。因此,首先你需调用函数 esp_wifi_set_mode() (WIFI_MODE_STA) 将 Wi-Fi 模式配置为 station 模式。可通过调用其它 esp_wifi_set_xxx API 进行更多设置,例如:协议模式、国家代码、带宽等。

3. Wi-Fi 启动阶段

  • s3.1:调用函数 esp_wifi_start() 启动 Wi-Fi 驱动程序。

配置扫描信息、获取扫描的AP数量和获取具体的AP信息

请添加图片描述
4. WIFI 扫描配置阶段

  • s1.1:如果默认的国家信息有误,调用函数 esp_wifi_set_country() 进行配置。请参阅 Wi-Fi 国家/地区代码。

  • s1.2:调用函数 esp_wifi_scan_start() 配置扫描信息,可参阅 扫描配置。该场景为全信道扫描,将 SSID/BSSID/channel 设置为 0 即可。

5. 扫描完成后事件处理阶段

  • 调用函数 esp_wifi_scan_get_ap_num() 获取在本次扫描中找到的 AP 数量。然后,分配出足够的事物槽,并调用函数 esp_wifi_scan_get_ap_records() 获取 AP 记录

ESP32-S3 Wi-Fi扫描程序

在ESP32-S3上进行Wi-Fi扫描的主要步骤包括初始化NVS存储、初始化Wi-Fi、设置Wi-Fi模式、启动Wi-Fi、配置扫描信息、获取扫描的AP数量和获取具体的AP信息。

#include <stdio.h>
#include <string.h>
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_wifi.h"

void app_main(void)
{

    ESP_LOGI("WIFI", "0. 初始化NVS存储");
    ESP_ERROR_CHECK(nvs_flash_init());                   // 对NVS默认的区域进行初始化

    ESP_LOGI("WIFI", "1. WIFI 初始化阶段");
    esp_netif_init();                    // 1.1 创建一个 LwIP 核心任务
    esp_event_loop_create_default();             // 1.2 创建一个系统事件任务
    esp_netif_create_default_wifi_sta(); // 1.3.1 创建有 TCP/IP 堆栈的默认网络接口实例

    wifi_init_config_t wifi_config = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&wifi_config);             // 1.3.2 创建 Wi-Fi 驱动程序任务

    ESP_LOGI("WIFI", "2. WIFI 配置阶段");
    esp_wifi_set_mode(WIFI_MODE_STA);       // 2 将 Wi-Fi 模式配置为 station

    ESP_LOGI("WIFI", "3. WIFI 启动阶段");
    esp_wifi_start();                        // 3.1 启动 Wi-Fi 驱动程序

    ESP_LOGI("WIFI", "4. WIFI 扫描");

    //在所有信道中扫描全部 AP(前端)
    wifi_country_t country_config = {
        .cc = "CN",
        .schan = 1,
        .nchan = 13,
    };
    esp_wifi_set_country(&country_config); // 4.1 扫描配置国家代码

    wifi_scan_config_t scan_config = {
        .show_hidden = true               // 显示隐藏
    };
    esp_wifi_scan_start(&scan_config,true); // 4.2 配置扫描信息 true表示当这个任务执行的时候,回进入阻塞状态等待扫描

    //得到扫描的AP数量
    uint16_t ap_num =0;
    ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_num)); 
    ESP_LOGI("WIFI","AP Count : %d",ap_num);

    //获取具体的AP信息
    uint16_t max_aps=20;
    wifi_ap_record_t ap_records[max_aps];
    memset(ap_records,0,sizeof(ap_records));

    uint16_t aps_count =max_aps;
    ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&aps_count,ap_records));

    //打印信息
    ESP_LOGI("WIFI","AP Count: %d",aps_count);
    printf("%30s %3s %3s %3s\n","SSID","频道","强度","MAC地址");

    for(int i=0;i<aps_count;i++){
        printf("%30s %4d %4d %02X-%02X-%02X-%02X-%02X-%02X\n", 
       ap_records[i].ssid, 
       ap_records[i].primary, 
       ap_records[i].rssi, 
       ap_records[i].bssid[0], 
       ap_records[i].bssid[1], 
       ap_records[i].bssid[2], 
       ap_records[i].bssid[3], 
       ap_records[i].bssid[4], 
       ap_records[i].bssid[5]);
    }
}

效果如下
在这里插入图片描述

参考资料

  1. ESP-IDF编程指南
<think>好的,我现在需要回答用户关于如何重置ESP32-S3设备上的WiFi设置的问题。首先,我要确保自己理解用户的需求。用户可能在使用ESP32-S3时遇到了WiFi连接问题,或者想要清除之前的配置以便重新设置网络。 接下来,我应该查阅提供的参考资料,看看是否有相关的信息。引用[1]提到了ESP32-S3WiFi库支持STA模式AP模式以及共存模式,还提到了安全模式扫描功能。引用[2]和[3]涉及配置连接的热点和开发板的使用,但没有直接提到重置方法。引用[4]是硬件连接相关的,可能不直接相关。引用[5]提到数据上传的验证,但可能也不涉及重置步骤。 根据这些资料,直接的信息可能有限,但可以结合ESP-IDF框架的一般知识来推断。通常,重置WiFi设置的方法可能包括软件复位或清除保存的配置。比如,在ESP-IDF中,可以使用`esp_wifi_restore()`函数来恢复默认设置,或者断开当前连接并清除保存的SSID和密码。 另外,用户可能需要通过代码来实现重置。例如,在初始化WiFi时,先断开现有连接,然后停止WiFi,再重新启动。可能需要调用`esp_wifi_disconnect()`、`esp_wifi_stop()`和`esp_wifi_deinit()`函数来彻底重置状态。此外,如果设备保存了之前的网络配置到NVS(非易失性存储),可能需要清除NVS中的相关数据。 需要确保步骤正确,避免遗漏关键操作。比如,停止WiFi后是否要释放资源,是否需要重新初始化等。同时,还要考虑用户可能的开发环境,如是否使用Arduino框架或ESP-IDF,因为函数调用可能有所不同。根据引用[4],用户可能使用的是HAL库,但ESP32-S3通常使用ESP-IDF或Arduino核心,所以应确认适用的函数。 可能还需要检查是否有例程或官方文档中的重置方法。例如,引用[2]中的示例可能包含配置热点的代码,但重置可能需要不同的流程。此外,引用[3]中的项目可能涉及中断处理,但与WiFi重置关系不大。 总结可能的步骤:1. 断开当前WiFi连接;2. 停止WiFi服务;3. 清除保存的配置;4. 恢复默认设置;5. 重新初始化WiFi。需要将这些步骤转化为具体的代码示例,并验证其正确性。同时,提醒用户注意保存的数据,如NVS中的信息可能需要手动清除。 最后,生成相关问题时要围绕WiFi设置的其他方面,比如恢复出厂设置、清除NVS、不同开发框架的差异等。</think>### 如何重置ESP32-S3WiFi设置 重置ESP32-S3WiFi设置通常包括清除已保存的SSID、密码以及网络配置。以下是具体方法: --- #### **方法1:通过代码重置** 在固件代码中调用WiFi库的相关函数,强制断开连接并清除配置: ```c #include "esp_wifi.h" void reset_wifi_settings() { // 断开当前WiFi连接 esp_wifi_disconnect(); // 停止WiFi服务 esp_wifi_stop(); // 清除保存的WiFi配置(SSID和密码) esp_wifi_restore(); // 重新初始化WiFi(根据需求选择模式esp_wifi_init(&wifi_config); esp_wifi_start(); } ``` **说明**: - `esp_wifi_restore()` 会将WiFi配置恢复为出厂默认值[^1]。 - 需确保在调用前已正确初始化WiFi(如通过`esp_wifi_init()`)。 --- #### **方法2:清除非易失性存储(NVS)** ESP32-S3会将WiFi配置存储在NVS(非易失性存储)中。彻底重置需清除NVS分区: ```c #include "nvs_flash.h" void erase_nvs() { nvs_flash_erase(); // 擦除整个NVS分区 nvs_flash_init(); // 重新初始化NVS } ``` **注意**:此操作会清除所有保存在NVS中的数据(包括WiFi以外的配置)[^4]。 --- #### **方法3:硬件复位(可选)** 通过复位引脚(EN/RST)短暂拉低电平触发硬件重启,但此方法不会清除已保存的WiFi配置,需结合软件方法使用。 --- #### **验证重置是否成功** 重置后,可通过以下方式验证: 1. 扫描周围WiFi网络,确认设备未自动连接。 2. 检查NVS中是否无残留的SSID或密码。 --- ### 关键注意事项 1. **开发框架差异**: - 若使用Arduino核心,需调用`WiFi.disconnect(true)`(参数`true`表示清除配置)[^3]。 -ESP-IDF中需直接操作`esp_wifi`接口[^2]。 2. **NVS管理**:频繁擦写NVS可能影响存储器寿命,建议仅在必要时使用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁子希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值