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

ESP32-WIFI(Arduino)

ESP32-WIFI


Wi-Fi是一种基于IEEE 802.11标准的无线局域网技术,是Wi-Fi联盟制造商的商标作为产品的品牌认证。它可以让电脑、手机、平板电脑等设备通过无线信号连接到互联网 。
在无线网络中,AP(Access Point)和 STA(Station)是两个重要的概念。AP即无线接入点,它是一个无线网络的中心节点,负责向周围的设备提供无线信号,例如路由器或无线基站。另一方面,STA指的是接收无线信号的终端设备,比如笔记本电脑、智能手机、平板电脑等。这些设备可以通过连接AP热点来连接到网络

官方手册

Wi-Fi API

简介


Wi-Fi API 提供对 802.11b/g/n 协议驱动程序的支持。此 API 包括:

  • Station 模式(STA 模式或 Wi-Fi 客户端模式)。ESP32 连接到接入点

  • AP 模式(又名 Soft-AP 模式或接入点模式)。设备连接到 ESP32

  • 安全模式(WPA2、WPA3 等)

  • 扫描接入点

WIFI终端(STA)


STA 模式用于将 ESP32 连接到接入点提供的 Wi-Fi 网络

1. 连接WIFI

WiFi.begin(ssid, password);
  • ssid 是Wi-Fi网络的名称
  • password 是Wi-Fi网络的密码

2. 检查是否连接成功:

 // 等待Wi-Fi连接成功while (WiFi.status() != WL_CONNECTED){// 打印提示信息Serial.println("正在连接");// 延时1秒delay(1000);}

WiFi.status()用于获取当前WiFi连接的状态。返回值类型为 wl_status_t,表示连接状态的整数值。

以下是一些返回值及其含义:

  • WL_NO_SHIELD: 没有连接到任何WiFi模块或扩展板。
  • WL_IDLE_STATUS: WiFi处于空闲状态,未连接到任何网络。
  • WL_CONNECTED: 已连接到WiFi网络。
  • WL_CONNECT_FAILED: 尝试连接到WiFi网络失败。
  • WL_CONNECTION_LOST: 与WiFi网络的连接丢失。

3. 重新连接

bool reconnect();

reconnect()尝试重新连接

4. 断开连接

bool disconnect(bool wifioff = false, bool eraseap = false);
  • wifioff:默认值为false,表示不关闭WiFi
  • eraseap:默认值为false,表示不擦除接入点信息

5. 返回连接状态

bool isConnected();

isConnected()返回连接状态的bool值

连接WIFI的程序示例:

#include <Arduino.h>
#include <WiFi.h>void setup()
{// 初始化串口通信,波特率为115200Serial.begin(115200);// 开始连接Wi-Fi网络,使用SSID为"HUAWEI-NZX_2.4G",密码为"987654321"WiFi.begin("HUAWEI-NZX_2.4G", "987654321");// 等待Wi-Fi连接成功while (WiFi.status() != WL_CONNECTED){// 打印提示信息Serial.println("正在连接");// 延时1秒delay(1000);}// 打印连接成功的IP地址Serial.print("ip:");Serial.println(WiFi.localIP());
}void loop()
{}

WIFI主机(AP)


在AP模式下ESP32 配置为接入点 ,它能够通过提供 Wi-Fi 网络

1. 将 Wi-Fi 作为接入点启动

bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection, bool ftm_responder)

WiFiAPClass::softAP() 是一个用于启动一个开放网络的函数,它接受以下参数:

  • ssid:网络名称,即SSID。
  • passphrase:网络密码。
  • channel:网络使用的频道。
  • ssid_hidden:是否隐藏SSID,0表示不隐藏,1表示隐藏。
  • max_connection:最大连接数。
  • ftm_responder:是否作为FTM(Fast Track Management)响应器,0表示不作为,1表示作为。

返回值:如果成功启动开放网络,则返回 true;否则返回 false

2. 将 IP 配置为静态(固定)以及网关和子网

bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);

用于配置ESP32的SoftAP(软件接入点)的函数。它接受三个参数:

  • local_ip:设置本地 IP 地址
  • gateway:设置网关 IP
  • subnet:设置子网掩码

函数返回一个布尔值,表示配置是否成功

3. softAP断开连接

bool softAPdisconnect(bool wifioff = false);

softAPdisconnect函数的作用是断开当前设备的软接入点AP连接。

  • wifioff :为false时断开软接入点连接后,设备将自动切换回WiFi模式;为true时,断开软接入点连接后,设备将保持关闭状态。

4. 获取AP客户端数量

uint8_t softAPgetStationNum();

softAPgetStationNum(); 可以获取当前软接入点(Soft Access Point)连接的客户端设备数量。一个无符号8位整数,用于表示设备数量。

5. 获取 AP IPv4 地址的函数

IPAddress softAPIP();

softAPIP()获取当前设备的软接入点的IP地址,以IPAddress 格式返回地址

创建WIFI接入点程序示例:

#include <Arduino.h>
#include "WiFi.h" // 引入WiFi库
const char* ssid="ESP32AP"; // 定义一个字符串常量,表示WiFi接入点的SSID
const char* password="123456789"; // 定义一个字符串常量,表示WiFi接入点的密码void setup() {Serial.begin(115200); // 初始化串行通信,波特率为115200WiFi.softAP(ssid,password); // 创建一个名为ESP32AP的WiFi接入点,并设置密码为"123456789"Serial.print("\n WiFi接入点ip:"); // 在串行监视器上打印提示信息Serial.println(WiFi.softAPIP()); // 在串行监视器上打印WiFi接入点的IP地址
}void loop() {} 

WiFi扫描


对网络执行 Wi-Fi 扫描,获取周围网络环境中的可用WIFI

1. 扫描可用的WiFi网络

int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300, uint8_t channel = 0);

scanNetworks该函数会返回一个包含所有可用网络SSID(服务集标识符)的个数。

扫描周边WiFi网络,并串口打印 网络名称,信号强度,MAC地址

void scanNetworks(){int numberOfNetworks= WiFi.scanNetworks(); // 扫描周边WiFi网络,并获取网络数量Serial.print("周围可用WILI数量:"); // 打印网络数量Serial.println(numberOfNetworks);for(int i=0;i<numberOfNetworks;i++){ // 遍历所有找到的网络Serial.print("WIFI名称: "); // 打印网络名称Serial.println(WiFi.SSID(i)); // 打印SSIDSerial.print("信号强度: "); // 打印信号强度Serial.println(WiFi.RSSI(i)); // 打印信号强度值Serial.print("MAC地址: "); // 打印MAC地址Serial.println(WiFi.BSSIDstr(i)); // 打印MAC地址字符串形式Serial.println("-----------------------"); }
}

相关文章:

ESP32-WIFI(Arduino)

ESP32-WIFI Wi-Fi是一种基于IEEE 802.11标准的无线局域网技术&#xff0c;是Wi-Fi联盟制造商的商标作为产品的品牌认证。它可以让电脑、手机、平板电脑等设备通过无线信号连接到互联网 。 在无线网络中&#xff0c;AP&#xff08;Access Point&#xff09;和 STA&#xff08;St…...

【网络虚拟化】网络设备常见冗余方式——堆叠、M-Lag、DRNI

网络设备常见冗余设计——堆叠、M-Lag、DRNI 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 网络设备常见冗余设计——堆叠、M-Lag、DRNI 网络设备常见冗余设计——堆叠、M-Lag、DRNI前言一、网络设备虚拟化二、堆叠技术1.技术原理2.…...

arm的侏罗纪二 cache学习

个人觉得inner shareable和outer shareable&#xff1b;POU和POC 是难点&#xff0c;慢慢学习吧。 inner shareable是cluster内 outer shareable是cluster之间 参考文献&#xff1a; 深入学习Cache系列 1: 带着几个疑问&#xff0c;从Cache的应用场景学起 https://www.eet-c…...

Protecting Intellectual Property of Deep NeuralNetworks with Watermarking

保护深度神经网络的知识产权与数字水印技术 ABSTRACT 深度学习是当今人工智能服务的关键组成部分&#xff0c;在视觉分析、语音识别、自然语言处理等多个任务方面表现出色&#xff0c;为人类提供了接近人类水平的能力。构建一个生产级别的深度学习模型是一项非常复杂的任务&a…...

c++学习笔记-STL案例-机房预约系统1-准备工作

前言 准备工作包括&#xff1a;需求分析、项目创建、主菜单实现、退出功能实现 目录 1 机房预约系统需求 1.1 简单介绍 1.2 身份介绍 1.3 机房介绍 1.4 申请介绍 1.5 系统具体要求 1.6 预约系统-主界面思维导图 2 创建项目 2.1 创建项目 2.2 添加文件 ​编辑 3 创建…...

AnnData:单细胞和空间组学分析的数据基石

AnnData&#xff1a;单细胞和空间组学分析的数据基石 今天我们来系统学习一下单细胞分析的标准数据类型——AnnData&#xff01; AnnData就是有注释的数据&#xff0c;全称是Annotated Data。 AnnData是为了矩阵类型数据设计的&#xff0c;也就是长得和表格一样的数据。比如…...

C语言中的 `string.h` 头文件包含的函数

C语言中的 string.h 头文件包含了许多与字符串或数字相关的函数。这些函数可以用于字符串的复制、连接、搜索、比较等操作。 常用字符串函数 函数名功能strlen()返回字符串的长度strcpy()将一个字符串复制到另一个字符串中strncpy()将最多 n 个字符从一个字符串复制到另一个字…...

kotlin的抽象类和抽象方法

在 Kotlin 中&#xff0c;抽象类和抽象方法是面向对象编程中的概念&#xff0c;用于实现抽象和多态性。抽象类无法实例化&#xff0c;这意味着我们无法创建抽象类的对象。与其他类不同&#xff0c;抽象类总是打开的&#xff0c;因此我们不需要使用open关键字。 抽象类&#xff…...

2022年面经记录(base杭州)

duandian科技&#xff08;笔试未通过&#xff09; 笔试题&#xff1a;leetCode热题第20题有效的括号 面后感&#xff1a;没怎么刷算法题&#xff0c;js 基础不扎实 laiweilai&#xff08;三面未通过&#xff09; 一面&#xff1a;笔试题 写一个函数&#xff0c;获取url中的指定…...

安装Docker图形管理界面portainer

安装Docker图形管理界面portainer 映射data文件夹根据自己环境更换 docker run -d --name portainer -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /yourpath/docker/portainer:/data --restartalways portainer/portainer-ce:latest好好享受吧&#xff01…...

Linux学习记录——사십 高级IO(1)

文章目录 1、IO2、同、异步IO&#xff08;5种IO类型&#xff09;3、其它高级IO4、非阻塞IO 其它IO类型的实现在这篇之后的三篇 1、IO input&#xff0c;output。调用read或recv接口时&#xff0c;如果对方长时间不向我方接收缓冲区拷贝数据&#xff0c;我们的进程就只能阻塞&a…...

【代码随想录】2

数组篇 二分查找 int search(int* nums, int numsSize, int target) { int left0; int rightnumsSize-1; while(left<right) {int mlddle(leftright)/2;if(nums[mlddle]>target){rightmlddle-1;}else if(nums[mlddle]<target){leftmlddle1;}else{return mlddle;}} r…...

TCP性能分析

ref&#xff1a; TCP性能和发送接收窗口、Buffer的关系 | plantegg...

RibbonGroup 添加QRadioButton

RibbonGroup添加QRadioButton&#xff1a; QRadioButton * pRadio new QRadioButton(tr("Radio")); pRadio->setToolTip(tr("Radio")); groupClipboard->addWidget(pRadio); connect(pRadio, SIGNAL(clicked(…...

一篇文章掌握WebService服务、工作原理、核心组件、主流框架

目录 1、WebService定义 解决问题&#xff1a; 2、WebService的工作原理 2.1 实现一个完整的Web服务包括以下步骤 2.2 调用方式 3、Web Service的核心组件 3.1 XML 3.2 SOAP 3.3 WSDL 3.4 UDDI 4、主流框架 4.1 AXIS(已淘汰) 4.2 XFire 4.3 CXF 5、Soap协议详解…...

观成科技-加密C2框架EvilOSX流量分析

工具简介 EvilOSX是一款开源的&#xff0c;由python编写专门为macOS系统设计的C2工具&#xff0c;该工具可以利用自身释放的木马来实现一系列集成功能&#xff0c;如键盘记录、文件捕获、浏览器历史记录爬取、截屏等。EvilOSX主要使用HTTP协议进行通信&#xff0c;通信内容为特…...

PCL 计算异面直线的距离

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,PCL 计算异面直线的距离,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 设置直线 A B AB A...

【数字人】9、DiffTalk | 使用扩散模型基于 audio-driven+对应人物视频 合成说话头(CVPR2023)

论文&#xff1a;DiffTalk: Crafting Diffusion Models for Generalized Audio-Driven Portraits Animation 代码&#xff1a;https://sstzal.github.io/DiffTalk/ 出处&#xff1a;CVPR2023 特点&#xff1a;需要音频对应人物的视频来合成新的说话头视频&#xff0c;嘴部抖…...

完成源示例

本主题演示如何创作和使用自己的完成源类&#xff0c;类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如&#xff0c;支持取消和错误传播不在此示例的范围内。 #include <w…...

业务和流程的关系

背景 概念不清&#xff0c;沟通就容易出现问题&#xff0c;最可怕会出现跑偏情况如何解决&#xff0c;数字化落地过程&#xff0c;程序是死的&#xff0c;最怕灵活&#xff0c;所以在沟通和编码&#xff0c;设计中&#xff0c;很重要的一点就是解决概念&#xff0c;澄清问题&a…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...