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,表示不关闭WiFieraseap
:默认值为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
:设置网关 IPsubnet
:设置子网掩码
函数返回一个布尔值,表示配置是否成功
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标准的无线局域网技术,是Wi-Fi联盟制造商的商标作为产品的品牌认证。它可以让电脑、手机、平板电脑等设备通过无线信号连接到互联网 。 在无线网络中,AP(Access Point)和 STA(St…...
【网络虚拟化】网络设备常见冗余方式——堆叠、M-Lag、DRNI
网络设备常见冗余设计——堆叠、M-Lag、DRNI 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 网络设备常见冗余设计——堆叠、M-Lag、DRNI 网络设备常见冗余设计——堆叠、M-Lag、DRNI前言一、网络设备虚拟化二、堆叠技术1.技术原理2.…...
arm的侏罗纪二 cache学习
个人觉得inner shareable和outer shareable;POU和POC 是难点,慢慢学习吧。 inner shareable是cluster内 outer shareable是cluster之间 参考文献: 深入学习Cache系列 1: 带着几个疑问,从Cache的应用场景学起 https://www.eet-c…...

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

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

AnnData:单细胞和空间组学分析的数据基石
AnnData:单细胞和空间组学分析的数据基石 今天我们来系统学习一下单细胞分析的标准数据类型——AnnData! AnnData就是有注释的数据,全称是Annotated Data。 AnnData是为了矩阵类型数据设计的,也就是长得和表格一样的数据。比如…...
C语言中的 `string.h` 头文件包含的函数
C语言中的 string.h 头文件包含了许多与字符串或数字相关的函数。这些函数可以用于字符串的复制、连接、搜索、比较等操作。 常用字符串函数 函数名功能strlen()返回字符串的长度strcpy()将一个字符串复制到另一个字符串中strncpy()将最多 n 个字符从一个字符串复制到另一个字…...
kotlin的抽象类和抽象方法
在 Kotlin 中,抽象类和抽象方法是面向对象编程中的概念,用于实现抽象和多态性。抽象类无法实例化,这意味着我们无法创建抽象类的对象。与其他类不同,抽象类总是打开的,因此我们不需要使用open关键字。 抽象类ÿ…...
2022年面经记录(base杭州)
duandian科技(笔试未通过) 笔试题:leetCode热题第20题有效的括号 面后感:没怎么刷算法题,js 基础不扎实 laiweilai(三面未通过) 一面:笔试题 写一个函数,获取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好好享受吧!…...

Linux学习记录——사십 高级IO(1)
文章目录 1、IO2、同、异步IO(5种IO类型)3、其它高级IO4、非阻塞IO 其它IO类型的实现在这篇之后的三篇 1、IO input,output。调用read或recv接口时,如果对方长时间不向我方接收缓冲区拷贝数据,我们的进程就只能阻塞&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: TCP性能和发送接收窗口、Buffer的关系 | plantegg...

RibbonGroup 添加QRadioButton
RibbonGroup添加QRadioButton: QRadioButton * pRadio new QRadioButton(tr("Radio")); pRadio->setToolTip(tr("Radio")); groupClipboard->addWidget(pRadio); connect(pRadio, SIGNAL(clicked(…...
一篇文章掌握WebService服务、工作原理、核心组件、主流框架
目录 1、WebService定义 解决问题: 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是一款开源的,由python编写专门为macOS系统设计的C2工具,该工具可以利用自身释放的木马来实现一系列集成功能,如键盘记录、文件捕获、浏览器历史记录爬取、截屏等。EvilOSX主要使用HTTP协议进行通信,通信内容为特…...

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

【数字人】9、DiffTalk | 使用扩散模型基于 audio-driven+对应人物视频 合成说话头(CVPR2023)
论文:DiffTalk: Crafting Diffusion Models for Generalized Audio-Driven Portraits Animation 代码:https://sstzal.github.io/DiffTalk/ 出处:CVPR2023 特点:需要音频对应人物的视频来合成新的说话头视频,嘴部抖…...

完成源示例
本主题演示如何创作和使用自己的完成源类,类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如,支持取消和错误传播不在此示例的范围内。 #include <w…...
业务和流程的关系
背景 概念不清,沟通就容易出现问题,最可怕会出现跑偏情况如何解决,数字化落地过程,程序是死的,最怕灵活,所以在沟通和编码,设计中,很重要的一点就是解决概念,澄清问题&a…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

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

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

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

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