ESP32 使用 esp_wifi_scan_start 的一点小tips

背景

我的一个工程中,有使用扫描附近wifi这个feature,借鉴了ESP32官方的示例程序,在原esp-idf v5.0.1 上可以运行,esp-idf v5.2.1 中却扫描不到。
核心流程:就是在STA模式或STA+AP模式下,启动wifi(不连接)后,可以使用esp_wifi_scan_start()函数进行扫描,扫描后,使用 esp_wifi_scan_get_ap_num 和 esp_wifi_scan_get_ap_records 进行获取扫描的结果。
在这里插入图片描述

问题解决方法

一顿“控制变量法”不断实验,以及深入阅读官方文档后,有了解决方案。

实验中发现

实验中发现,先 esp_wifi_scan_get_ap_num 后,再 esp_wifi_scan_get_ap_records 可以解决。

文档中发现

文档中发现:
在这里插入图片描述
esp_wifi_scan_get_ap_records的一个个参数竟然是inout类型的,并且有Attention说调用后 will free all memory occupied by scanned AP list. 也就是再读取后会清除缓存?
所以再esp_wifi_scan_get_ap_num就读出的是0? 这是个人猜测。

最终解决办法

所以,最后的解决办法是,干脆只用esp_wifi_scan_get_ap_records 函数,不用 esp_wifi_scan_get_ap_num ,这样就OK了。

放一个代码片段:

#define DEFAULT_SCAN_LIST_SIZE     16
my_ap_wifi_info my_aps_info[DEFAULT_SCAN_LIST_SIZE];
uint16_t my_aps_num = 0;

	typedef struct 
{
   
    uint8_t ssid[33];
    int8_t  rssi;
    uint8_t rssi_level;
    uint8_t rssi_percent;
    uint8_t channel;
    bool needpsw;
} my_ap_wifi_info;

//不能在AP模式下扫描,需要启动wifi,但不能连接。
void wifi_scan(void){
   
    wifi_country_t country_config  = {
   
    .cc = "01",
    .schan = 1,
    .nchan = 11,
    .policy = WIFI_COUNTRY_POLICY_AUTO,
    };
    esp_wifi_set_country(&country_config);

    uint16_t ap_num = DEFAULT_SCAN_LIST_SIZE;
    wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE];
    uint16_t ap_count = 0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值