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…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...

云原生时代的系统设计:架构转型的战略支点
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、云原生的崛起:技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深,传统的 I…...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...