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编程指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/662882.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

输入与输出的魔法:探索Python的内置函数

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、从键盘捕获输入&#xff1a;input()函数的力量 二、打印输出&#xff1a;print()函数的…

简单模拟实现shell(Linux)

目录​​​​​​​ 前言 展示效果 实现代码 前言 该代码模拟了shell的实现&#xff0c;也就是解析类似于“ls -a -l"的命令&#xff0c;当我们启动我们自己写的shell的可执行程序时&#xff0c;我们输入"ls"的命令&#xff0c;也可以展示出在shell中输入&…

50etf期权购是什么意思?

今天带你了解50etf期权购是什么意思&#xff1f;很多刚刚接触50ETF期权的投资者或许不太明白50ETF期权投资是一种什么样的投资&#xff0c;对于50ETF期权投资来说&#xff0c;有认购合约与认沽合约&#xff0c;那么“购”也就是认购的意思。 50etf期权购是什么意思&#xff1f;…

速看!!24上软考【电子商务设计师】真题回顾,含答案解析

2024上半年软考考试已经结束了&#xff0c;为大家整理了网友回忆版的电子商务设计师真题及答案&#xff0c;25-26日两批考试总共60道题。 上半年考试的宝子们可以对答案预估分数&#xff01;准备下半年考的宝子可以提前把握考试知识点和出题方向&#xff0c;说不定会遇到相同考…

当今世界三个最厉害的人物颜廷利:全球最受欢迎的点赞第一人

我们生活在一个历史的拐点&#xff0c;一个要求我们重新构思自我、解读世界以及预见未来的时代。在这个时代&#xff0c;那些能够洞悉社会发展的深层逻辑&#xff0c;并据此提出全新定义的人&#xff0c;将成为引领人类思维、塑造普遍价值观和主导全球发展议程的先锋。因此&…

插件“猫抓”使用方法 - 浏览器下载m3u8视频 - 合并 - 视频检测下载 - 网课下载神器

前言 浏览器下载m3u8视频 - 合并 - 网课下载神器 chrome插件-猫抓 https://chrome.zzzmh.cn/info/jfedfbgedapdagkghmgibemcoggfppbb 步骤&#xff1a; P.s. 推荐大佬的学习视频&#xff01; 《WEB前端大师课》超级棒&#xff01; https://ke.qq.com/course/5892689#term_id…

01_Spring Ioc DI案例,setter方法和构造方法注入(详解) + 思维导图

文章目录 一.概念实操Maven父子工程 二. IOC和DI入门案例【重点】1 IOC入门案例【重点】问题导入1.1 门案例思路分析1.2 实现步骤2.1 DI入门案例思路分析2.2 实现步骤2.3 实现代码2.4 图解演示 三、Bean的基础配置问题导入问题导入1 Bean是如何创建的【理解】2 实例化Bean的三种…

Java导出excel带图片(希望能帮助你们节省时间)

第一天太慌张&#xff0c;下班逃跑&#xff0c;一夜没睡好&#xff0c;第二天决定搞出来。 查了好多博客&#xff0c;感觉都挺繁琐的&#xff0c;好多工具类、引入类找不到。经过一上午的琢磨&#xff0c;终于搞定。记录一下 借鉴了这个博主的文章 需求前端点击导出按钮&#…

HackTheBox-Machines--Lazy

Lazy测试过程 1 信息收集 1.端口扫描 发现 SSH&#xff08;22&#xff09;、HTTP&#xff08;80&#xff09;端口 nmap -sC -sV 10.129.159.512.访问 80 端口 1.页面中存在注册功能&#xff0c;测试注册功能 页面返回登录页面及用户名 使用burpsuite观察注册请求 /register.p…

骑车不戴头盔监测摄像机

骑行是一种健康的出行方式&#xff0c;但是在骑行途中不戴头盔存在安全隐患&#xff0c;容易造成头部受伤。为了规范骑行行为&#xff0c;保障骑行安全&#xff0c;可以考虑使用骑车不戴头盔监测摄像机进行监测和识别。这种摄像机可以通过智能识别技术&#xff0c;实时监测骑自…

Centos7时区设置及手动修改时间

一、修改系统时区 1、查看时区命令 timedatectl 2、设置时区命令 #下面将时区设置为上海时区 timedatectl set-timezone Asia/Shanghai 3、查看时区看一下新时区有没有生效 timedatectl 二、手动修改系统时间 修改系统时间 date -s "2023-12-25 16:05:10" 查…

串口调试助手中文乱码 解决方案

输出乱码 一般&#xff0c;当串口调试助手输出乱码时&#xff0c;可能有以下几个原因&#xff1a; 波特率设置错误&#xff1a;串口通信需要保证发送和接收的设备使用相同的波特率。请检查串口调试助手和目标设备的波特率设置是否一致。 数据位、停止位或校验位设置错误&…

自建视频托管平台:MediaCMS

目录 1 MediaCMS简介1.1 介绍1.2 特性1.3 应用场景 2 安装配置2.1 安装1、安装2、汉化 2.2 一些常见配置 3 简单使用3.1 上传3.2 下载3.3 添加标题或者字幕3.4 通过Tag/Category实现视频/文件分类添加 Tag给任一资源分类 1 MediaCMS简介 1.1 介绍 MediaCMS是一个现代的&#…

Vue项目运行页面禁止缩放【移动端和PC端都禁止缩放】解决方案

Vue项目运行页面禁止缩放【移动端和PC端都禁止缩放】解决方案&#xff0c;有的人手很J,总喜欢放大缩小&#xff0c;从而会导致页面错乱&#xff0c;以下是解决方案&#xff0c;简单有效 效果图PC&#xff1a;滚轮缩放和其他缩放都会禁止 移动端效果图&#xff1a;各种手机平板…

活动会议邀请函制作易企秀源码系统 清爽的画面轻轻滑动自动翻页 带完整的前后端搭建教程

系统概述 在当今数字化时代&#xff0c;活动会议的组织和宣传变得至关重要。为了满足这一需求&#xff0c;活动会议邀请函制作易企秀源码系统应运而生。它不仅为用户提供了一个便捷、高效的工具&#xff0c;还具备一系列令人瞩目的特色功能&#xff0c;为活动会议的成功举办提…

Redis篇 哈希表在redis中的命令

哈希命令 一.哈希表的基本认识二. 哈希表在redis中的命令1.hset,hget2.hdel3.hkeys,hvals4.hexists5.hgetall6.hmget7.hlen8.hincrby和hincrbyfloat 一.哈希表的基本认识 在JAVA数据结构中&#xff0c;我们就已经接触到了哈希表&#xff0c; 在当时&#xff0c;我们主要用到的哈…

香港Web3媒体:Techub News

Techub News&#xff1a;香港领先&#xff0c;世界一流的科技媒体平台 在数字化时代&#xff0c;Web3技术的崛起为媒体行业注入了新的活力。作为香港领先的Web3媒体平台&#xff0c;Techub News凭借其专业的团队、丰富的资源和创新的业务模式&#xff0c;成为了行业内的佼佼者。…

Go开发Prometheus客户端实战步骤

1、项目背景 在当前的IT运维环境中&#xff0c;我们的业务系统日益复杂&#xff0c;特别是针对特定的业务逻辑和定制化需求&#xff0c;传统的通用监控工具往往难以覆盖所有的监控场景。例如&#xff0c;考虑到一个复杂的电商平台&#xff0c;除了基础的服务器性能、网络状况等…

Python+Playwright自动化测试-playwright操作iframe(三)

1.简介 iframe 是web自动化里面一个比较头疼的测试场景&#xff0c;在Selenium中处理 iframe 需要切换来切换去非常麻烦。但是在playwright中&#xff0c;让其变得非常简单&#xff0c;我们在使用中无需切换iframe&#xff0c;直接定位元素即可。 2.iframe是什么 iframe就是我…

异步编程的魔力:如何显著提升系统性能

异步编程的魔力:如何显著提升系统性能 今天我们来聊聊一个对开发者非常重要的话题——异步编程。异步编程是提升系统性能的一种强大手段,尤其在需要高吞吐量和低时延的场景中,异步设计能够显著减少线程等待时间,从而提升整体性能。 异步设计如何提升系统性能? 我们通过…