当前位置: 首页 > news >正文

ESP‑IDF 默认的连接流程是

确实,按官方文档,ESP‑IDF 默认的连接流程是:

  1. 按信号强度排序
    在执行 esp_wifi_connect() 时,底层会对「所有匹配目标 SSID 的 AP 列表」应用策略 WIFI_CONNECT_AP_BY_SIGNAL,即按照 RSSI 从大到小降序排列,并优先尝试连接信号最强的那台 AP (espressif-docs.readthedocs-hosted.com)。

  2. 扫描结果本身也是按 RSSI 排序
    通过 esp_wifi_scan_get_ap_records() 拿到的扫描列表,API 保证返回的记录已经按 RSSI 降序排列 (Espressif 文档)。


为什么有时会连到弱信号 AP?

  • 没做「新一轮扫描」就连了
    如果你直接调用 esp_wifi_connect() 而没有先手动 esp_wifi_scan_start() + 等待 WIFI_EVENT_SCAN_DONE,驱动会用「上次扫描」的缓存结果,可能那时信号最强的 AP 现在反而变弱了,但列表没更新,就依旧选它。

  • 扫描-连接时序冲突
    WIFI_EVENT_STA_START 或其它地方触发了扫描,又立刻调用了 esp_wifi_connect(),有可能扫描还没完成就开始连接,于是使用了旧的或部分扫描结果中的第一个匹配项。

  • 断线重连优先上次 BSSID
    默认断线后重连,驱动会先尝试上次成功连接的 BSSID,再才按策略(信号或安全)去重选。

  • 策略被改成「按安全优先」
    在 menuconfig 里可切换策略为 WIFI_CONNECT_AP_BY_SECURITY(按安全性排序),这时即使信号弱,如果安全性更高也会被先尝试。


如何确保连到「当前」最强信号?

最稳妥的做法是 手动全流程:

  1. 调用

    esp_wifi_scan_start(NULL, false);
    

    并在事件回调里等待 WIFI_EVENT_SCAN_DONE

  2. 取最新列表:

    uint16_t n = 0;
    esp_wifi_scan_get_ap_num(&n);
    wifi_ap_record_t *records = malloc(n * sizeof(*records));
    esp_wifi_scan_get_ap_records(&n, records);
    // 由于 API 已经按 RSSI 降序,records[0] 即信号最强
    
  3. 强制指定 BSSID 连接:

    wifi_config_t cfg = { 0 };
    strcpy((char*)cfg.sta.ssid, TARGET_SSID);
    cfg.sta.bssid_set = true;
    memcpy(cfg.sta.bssid, records[0].bssid, 6);
    esp_wifi_set_config(WIFI_IF_STA, &cfg);
    esp_wifi_connect();
    
  4. 释放内存并处理连接事件。

通过这种方式,就能保证每次都拿到「实时扫描」里信号最强的那台 AP。

http://www.dtcms.com/a/282779.html

相关文章:

  • 2_概要设计编写提示词_AI编程专用简化版
  • 快速开发汽车充电桩的屏幕驱动与语音提示方案
  • __is_constexpr(x)宏介绍---max()宏扩展
  • Linux 常用指令
  • 信而泰×DeepSeek:AI推理引擎驱动网络智能诊断迈向 “自愈”时代
  • Java基础语法补充v2
  • C# --- 单例类错误初始化 + 没有释放资源导致线程泄漏
  • The 2024 ICPC Asia Shenyang Regional Contest B. Magical Palette
  • Docker容器技术讲解
  • Liunx练习项目6-创建dns服务器
  • 主机安全---开源wazuh安装
  • 深入理解概率图模型:贝叶斯网络因子分解、d-分离与马尔可夫毯
  • 基于用户空间操作IIC接口调试云台电机
  • 7.16 Java基础 | 集合框架(上)
  • 微服务架构中实现跨服务的字段级权限统一控制
  • PyTorch深度学习框架入门案例实战
  • 第一章 【vue】基础(超详细)
  • 【动归解题套路框架】【带备忘录的递归】【最优子结构】【自下而上DP table】
  • Spring核心注解@RequestMapping详解
  • Java 二维数组详解:从基础语法到实战应用,彻底掌握多维数据结构
  • 边缘计算革命:AWS Snowcone在智慧工厂的落地实践(2025工业4.0实战指南)
  • 笔试——Day10
  • 【AI交叉】天文学:人工智能如何赋能星辰大海的探索
  • 如何关闭Elasticsearch的安全认证的解决方法
  • Maven入门指南:生命周期、阶段和执行顺序详解
  • 基于深度学习的情感分析模型:从文本数据到模型部署
  • leetcode:990.等式方程的可满足性[图]
  • 推荐《Python 编程:从入门到实践》之Python编程的基础知识
  • 经典算法之基数排序
  • 算法精讲--正则表达式(二):分组、引用与高级匹配技术