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

2024-05-29 19:52

本文主要是介绍29-ESP32-S3-WIFI_Driver-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 模式配置为 stationESP_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编程指南

这篇关于29-ESP32-S3-WIFI_Driver-00 STA模式扫描全部 AP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014492

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona