ESP32 WiFi扫描、WiFi通道查询

news2024/12/23 6:45:27

ESP32WiFi扫描程序

代码解决什么问题?

扫描周围WiFi并识别指定WiFi名称的WiFi通道(为了ESP32的esp-now协议正常通信)。
在这里插入图片描述

这跟ESP32 now有什么关系?

ESP32使用NOW协议进行通信时,要求参与通信的设备必须处于同一物理网络中(例如,连接到同一个路由器或接入点)。这是因为NOW协议是基于WiFi的,并且只能在同一个WiFi通道上进行通信。
NOW协议使用广播方式发送数据包,而广播数据包只能在同一个无线电信道上传输。如果两个设备不在同一个通道上,则它们将无法互相看到彼此的数据包。

如何更改WiFi的通道

首先包含头文件

#include <esp_wifi.h>
WiFi.mode(WIFI_STA); // 设置为WiFi站点
esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE);

注意,如果要更改WiFi信道,请确保将其放在WiFi.begin()之前,因为该方法会触发ESP32与指定的WiFi网络建立连接。
在这里插入图片描述

WiFi扫描代码

#include <WiFi.h>


void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);  // Set WiFi mode to station (client)
  WiFi.disconnect();
  delay(100);
  Serial.println("Scanning for WiFi networks...");
  int networkCount = WiFi.scanNetworks();  // Start scanning for available networks
  if (networkCount == 0) {
    Serial.println("No WiFi networks found.");
  } else {
    Serial.print(networkCount);
    Serial.println(" WiFi networks found:");
    for (int i = 0; i < networkCount; ++i) {
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));  // Get the SSID (name) of the network
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));  // Get the signal strength in dBm
      Serial.println(")");
      if (WiFi.SSID(i) == "ssid") { // Check if the current network has the specified name
        Serial.println("WiFi network found");
        Serial.print("wifi_channel: ");
        Serial.println(WiFi.channel(i));  // Get the channel number of the network
      }
      delay(10);
    }
  }
}


void loop() {
  // Empty loop
}

下面是代码详细讲解:


#include <WiFi.h>

这行代码导入了WiFi.h库,该库提供了ESP32 WiFi模块所需的函数和方法。


void setup() {
  Serial.begin(115200);

setup()函数中,我们启用了ESP32的串行调试接口,并设置为115200波特率。这将允许我们通过串行监视器与ESP32通信。


  WiFi.mode(WIFI_STA); // Set WiFi mode to station (client)



接下来,我们使用WiFi.mode()方法将ESP32的WiFi模式设置为客户端模式(即连接到现有的WiFi网络)。


  WiFi.disconnect();
  delay(100);

然后,我们使用WiFi.disconnect()方法断开任何之前的WiFi连接,并使用delay()函数等待100毫秒以确保断开连接。


  Serial.println("Scanning for WiFi networks...");


我们向串行监视器输出一条消息,表示ESP32正在扫描附近的WiFi网络。


  int networkCount = WiFi.scanNetworks(); // Start scanning for available networks

我们使用WiFi.scanNetworks()方法开始扫描可用网络,并将结果存储在networkCount变量中。


if (networkCount == 0) {
    Serial.println("No WiFi networks found.");
  } else {
    Serial.print(networkCount);
    Serial.println(" WiFi networks found:");
    for (int i = 0; i < networkCount; ++i) {
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));  // Get the SSID (name) of the network
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));  // Get the signal strength in dBm
      Serial.println(")");
      if (WiFi.SSID(i) == "ssid") { // Check if the current network has the specified name
        Serial.println("WiFi network found");
        Serial.print("wifi_channel: ");
        Serial.println(WiFi.channel(i));  // Get the channel number of the network
      }
      delay(10);
    }
  }

接下来,我们检查networkCount是否为0。如果是,则表示没有可用的WiFi网络。否则,我们输出发现的WiFi网络总数,并使用一个循环遍历每个网络并输出其名称和信号强度,其中使用if语句检查当前网络的名称是否与指定的名称(“ssid”)匹配,如果是,我们向串行监视器输出一条消息表示已找到该网络,并使用WiFi.channel()方法获取其通道号并输出。
在这个例子中,我们使用了以下方法:

  • WiFi.SSID(i):获取第i个网络的名称(也称为SSID)。
  • WiFi.RSSI(i):获取第i个网络的信号强度(以dBm为单位)。

void loop() {
  // Empty loop
}

最后,在loop()函数中,我们只是留空,因为我们不需要循环执行任何操作。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI代理ADI亚德诺AD8603AUJZ-REEL7车规级芯片

编辑-Z AD8603AUJZ-REEL7芯片参数&#xff1a; 型号&#xff1a;AD8603AUJZ-REEL7 偏移电压&#xff1a;12μV 偏移电压漂移&#xff1a;1μV/C 输入偏置电流&#xff1a;0.2 pA 输入失调电流&#xff1a;0.1 pA 输入电压范围&#xff1a;–0.3 to 5.2V 输入电容&#…

Win10+VS2019安装vcpkg

vcpkg是一个C的包管理器。类似Python中的pip。安装后可以直接通过命令下载一些C的包&#xff0c;省的自己编译配路径。安装后的包都被vcpkg统一保存&#xff0c;统一配置路径。VS中哪个项目需要&#xff0c;就将其配置到某个项目中&#xff0c;当然也可以全局配置。 1、下载vc…

Node 04-http模块

HTTP 协议 概念 HTTP&#xff08;hypertext transport protocol&#xff09;协议&#xff1b;中文叫 超文本传输协议 是一种基于TCP/IP的应用层通信协议 这个协议详细规定了 浏览器 和 万维网 服务器 之间互相通信的规则 协议中主要规定了两个方面的内容: 客户端&#xff1…

Coovally再升级!基于CV大模型的智能标注解放你的双手

近日&#xff0c;随着SAM大模型的横空出世&#xff0c;“分割一切”成为可能&#xff0c;基于CV大模型的标注技术受到瞩目。 SAM分割示例 SAM大模型 Meta 在论文中发布了名为 Segment Anything Model (SAM)的新模型&#xff0c;“SAM 已经学会了关于物体的一般概念&#xff0c…

Hbase1.1:HBase官网、HBase定义、HBase结构、HBase依赖框架、HBase整合框架

这里写自定义目录标题 HBase官网HBase特点&#xff1a;大HBase定义HBase结构HBase依赖框架hadoop HBase整合框架PhoenixHive HBase官网 Hbase官网地址 HBase是Hadoop database&#xff0c;一个分布式、可扩展的大数据存储。 当您需要对大数据进行随机、实时读/写访问时&…

Activiti学习03

这里写目录标题 一、开发环境1.1 Java环境1.2 数据库1.3 开发工具 二、Activiti入门体验2.1 新建项目2.2 pom.xml文件2.3 activiti.cfg.xml文件2.4 添加日志配置文件 三、创建数据库3.1 创建数据库3.2 执行代码3.2.1 通过代码实现创建表格3.2.2 简化代码 四、绘制流程4.1 新建b…

香港金银业贸易场十大会员名单排行榜

在种类丰富全面的国际投资市场中&#xff0c;黄金拥有者良好的受众基础&#xff0c;黄金投资产品有着悠久的历史记录和蓬勃旺盛的生命力&#xff0c;数百年以来无数炒金者在黄金投资中实现了投资理财的梦想&#xff0c;但是在黄金投资的过程中&#xff0c;投资中需要面对无数考…

162.网络安全渗透测试—[Cobalt Strike系列]—[Veil免杀]

文章目录 1 Veil的使用2 生成有效载荷payload3 Veil免杀过程4 测试免杀 1 Veil的使用 &#xff08;1&#xff09;Veil主要用于生成&#xff1a;免杀payload &#xff08;2&#xff09;下载地址&#xff1a;https://github.com/Veil-Framework/Veil &#xff08;3&#xff09…

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 目录 Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 一、简单介绍 二、老版本 Unity Text 使用工具控件调整行间距 三、新版本 Unity Text…

mysql性能调优开篇介绍、错误代码总结(处理方法)和参数文件详解(持续更新中ing)

前言 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关系…

园区路线地图指引图怎么画?园区地图三维图怎么画?

目前在园区信息化应用形式中&#xff0c;广泛缺乏专业电子地图的使用&#xff0c;因此&#xff0c;使这种高效的信息化工具的应用受到了很大限制。有些仅以图片代替&#xff0c;但图片没有空间计算、检索、路径设计的能力&#xff0c;在地图应用形式中&#xff0c;使用价值很低…

一文!解决恒定磁场的基本方程(有介质)

目录 引言 磁化过程 磁偶极矩 磁化强度 方程的化简 磁场强度 磁化率 磁导率 相对磁导率 现实生活中的应用 引言 为什么介质在磁场中会被磁化呢? 首先因为电子绕着原子核转动&#xff0c;所以就可以形成一个环形电流&#xff0c;&#xff0c;环形电流就可以产生磁场。…

SAR型ADC结构原理

SAR型 ADC&#xff0c;即逐次渐进逼近型 ADC&#xff0c;采用的是多次比较的方式来获得最终的输出结果&#xff0c;具有简单易用&#xff0c;功耗低的特点。下图这个结构可以帮助我们容易地理解SAR型 ADC的工作过程&#xff1a; 如上图&#xff0c;假设输入信号的伪代码为 45&…

YOLOv5+单目测距(python)

YOLOv5单目测距&#xff08;python&#xff09; 1. 相关配置2. 测距原理3. 相机标定3.1&#xff1a;标定方法13.2&#xff1a;标定方法2 4. 相机测距4.1 测距添加4.2 细节修改&#xff08;可忽略&#xff09;4.3 主代码 5. 实验效果 相关链接 1. YOLOV7 单目测距&#xff08;p…

今晚直播 | 思码逸陆春蕊:面对研发效能度量落地难点,如何让数据说话?

本期分享 本期 DevData Talks 邀请到了思码逸高级咨询专家陆春蕊老师。陆春蕊老师曾就职于 Oracle 美国&#xff0c;在软件质量、项目管理方面有着丰富的经验。在研发效能领域为上百家客户提供了技术、数据分析、实践落地等方面的咨询&#xff0c;协助客户提升研发效能10%-30%…

Revit问题:墙体被楼板剪切及材质库被锁定问题

一、Revit 墙体被楼板剪切怎么办? 建模的时候画的墙总是到楼板就停了&#xff0c;这是为什么&#xff1f;明明顶部约束到标高2了&#xff0c;这种情况如何解决&#xff1f; 首先来分析问题产生的原因是&#xff0c;我们在绘制楼板的时候选择了用楼板剪切重复部分的墙体。 解决…

junit的基本使用

1 依赖引入&#xff1a; 只需要在maven项目中引入&#xff1a; <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> </dependency> 2 常用注解 Test Before after BeforeClass…

BUG——DM -3217: 第1 行附近出现错误: 列[***]未编制全文索引或全文索引数据错误(全文索引、是否包含某些字符串)

文章目录 一、情景二、报错三、解决四、说明1、CONTAINS的使用前景2、全文索引2.1.全文索引定义语句2.2.全文索引修改语句2.3.全文索引删除语句 一、情景 统计某字段中&#xff0c;包含某些字符串的行数 # 使用CONTAINS select sum(case when CONTAINS(my_column,123) then 1…

12种优雅的接口优化方案

12种优雅的接口优化方案 一、背景二、接口优化方案总结1.批处理2.异步处理3.空间换时间4.预处理5.池化思想6.串行改并行7.索引8.避免大事务9.优化程序结构10.深分页问题11.SQL优化12.锁粒度避免过粗欲速则不达,欲达则欲速! —— 佚名 一、背景 针对老项目,做了许多降本增效…

4、Symbol-ES6新基础类型

symbol是 ES6 新增的一种基本数据类型&#xff0c;它和 number、string、boolean、undefined 和 null 是同类型的&#xff0c;object 是引用类型。它用来表示独一无二的值&#xff0c;通过 Symbol 函数生成。 本小节代码都是纯JavaScript代码&#xff0c;建议在非TypeScript环境…