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…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...