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

ESP32开发入门(五):WiFi 开发实践

ESP32-S3是乐鑫推出的WiFi+蓝牙双模芯片,内置32位双核处理器,具有丰富的IO接口和外设。下面我将基于ESP32-S3介绍ESP32系列的WiFi功能开发实践。

一、WiFi简介

WiFi(Wireless Fidelity,无线保真)是一种基于 IEEE 802.11 标准的无线局域网(WLAN)技术,允许电子设备通过无线方式连接到互联网或局域网。WiFi 使用无线电波在设备之间传输数据,通常工作在 2.4GHz 和 5GHz 频段。

WiFi 的工作模式

WiFi 设备可以工作在不同的模式下,以适应不同的网络需求和环境。以下是常见的 WiFi 工作模式:

  1. STA(Station)模式(客户端模式)

    • 设备作为客户端连接到现有的 WiFi 网络(如无线路由器或热点)。

    • 例如:手机、笔记本电脑连接到家庭 WiFi 路由器。

  2. AP(Access Point,接入点)模式

    • 设备充当 WiFi 热点,允许其他设备(STA)连接到它。

    • 例如:无线路由器提供 WiFi 接入服务。

  3. AP+STA 模式(混合模式)

    • 设备同时作为 AP(提供 WiFi 热点)和 STA(连接到另一个 WiFi 网络)。

    • 例如:无线中继器或某些物联网设备。

  4. Ad-Hoc 模式(点对点模式)

    • 设备之间直接通信,无需通过 AP 中转。

    • 适用于临时组网,如设备间的直接文件传输。

  5. Mesh 模式(网状网络模式)

    • 多个设备组成一个自组织、自修复的网络,扩展覆盖范围。

    • 通常用于大范围 WiFi 覆盖(如智能家居或企业网络)。

  6. WDS(Wireless Distribution System,无线分布式系统)

    • 通过无线链路扩展网络覆盖范围(如多个 AP 之间的无线桥接)。

    • 常用于无法布线的环境。

  7. Monitor 模式(监听模式)

    • 设备仅监听 WiFi 信号,不主动参与通信。

    • 用于网络分析或安全测试(如抓包工具)。

  8. P2P(Wi-Fi Direct,点对点直连)

    • 设备之间直接建立高速连接,无需传统 AP。

    • 例如:手机与打印机直接通过 WiFi 传输文件。

其中STA、AP、AP+STA三种模式是日常生活中最常见的WiFi模式。这里就基于这3中模式的开发展开讲解。

二、ESP32WiFi开发实践

1、连接WiFi网络(STA模式)
#include <WiFi.h>
​
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
​
void connectToWiFi() {Serial.println("正在连接到WiFi...");WiFi.disconnect();WiFi.begin(ssid, password);unsigned long startAttemptTime = millis();while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 20000) { // 20秒超时delay(500);Serial.print(".");}if (WiFi.status() != WL_CONNECTED) {Serial.println("连接失败!");// 可以在这里添加失败处理逻辑} else {Serial.println("");Serial.println("WiFi连接成功");Serial.print("IP地址: ");Serial.println(WiFi.localIP());}
}
​
void setup() {Serial.begin(115200);connectToWiFi();
}
​
void loop() {if (WiFi.status() != WL_CONNECTED) {connectToWiFi();}delay(1000);
}

关键点说明:

  • WiFi.begin() 启动连接过程

  • WiFi.status() 检查连接状态

  • WiFi.localIP() 获取分配的IP地址

  • Serial.begin(115200),使用uart0,波特率115200,使用串口助手连接之后非常方便调试。

2、WiFi扫描

扫描周围可用的WiFi网络:

#include <WiFi.h>
​
void setup() {Serial.begin(115200);// 设置WiFi为STA模式WiFi.mode(WIFI_STA);WiFi.disconnect();delay(100);Serial.println("开始扫描WiFi网络...");// 扫描网络int n = WiFi.scanNetworks();Serial.println("扫描完成");if (n == 0) {Serial.println("没有发现任何网络");} else {Serial.print(n);Serial.println(" 个网络发现");for (int i = 0; i < n; ++i) {// 打印SSID和信号强度Serial.print(i + 1);Serial.print(": ");Serial.print(WiFi.SSID(i));Serial.print(" (");Serial.print(WiFi.RSSI(i));Serial.print(")");Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");delay(10);}}Serial.println("");
}
​
void loop() {// 这里不需要做任何事情
}

关键点说明:

  • WiFi.mode(WIFI_STA)设置WiFi为STA模式

  • WiFi.scanNetworks()扫描网络

若有兴趣,可以把上述两个程序结合在一起,扫描完成之后选择其中一个网络进行连接。

3、创建WiFi热点(AP模式)

ESP32-S3还可以作为WiFi热点(AP)使用:

#include <WiFi.h>
​
const char* ssid = "ESP32-S3-AP";
const char* password = "12345678";
​
void setup() {Serial.begin(115200);// 配置为AP模式WiFi.softAP(ssid, password);Serial.println("WiFi热点已创建");Serial.print("SSID: ");Serial.println(ssid);Serial.print("IP地址: ");Serial.println(WiFi.softAPIP());
}
​
void loop() {// 显示连接到热点的客户端数量Serial.print("连接设备数: ");Serial.println(WiFi.softAPgetStationNum());delay(3000);
}

关键点说明:

  • WiFi.softAP(ssid, password):设置WiFi为AP模式

  • WiFi.softAPIP():获取Wifi地址

  • WiFi.softAPgetStationNum():获取设备连接数量

4、STA+AP模式

ESP32-S3可以同时作为STA(连接到路由器)和AP(创建热点):

#include <WiFi.h>
​
const char* sta_ssid = "你的WiFi名称";
const char* sta_password = "你的WiFi密码";
​
const char* ap_ssid = "ESP32-S3-AP";
const char* ap_password = "12345678";
​
void setup() {Serial.begin(115200);// 设置为STA+AP模式WiFi.mode(WIFI_AP_STA);// 连接到路由器WiFi.begin(sta_ssid, sta_password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi连接成功");Serial.print("STA IP地址: ");Serial.println(WiFi.localIP());// 创建热点WiFi.softAP(ap_ssid, ap_password);Serial.println("WiFi热点已创建");Serial.print("AP IP地址: ");Serial.println(WiFi.softAPIP());
}
​
void loop() {Serial.print("STA状态: ");Serial.println(WiFi.status() == WL_CONNECTED ? "已连接" : "已断开");Serial.print("AP连接设备数: ");Serial.println(WiFi.softAPgetStationNum());delay(3000);
}

注意事项

  1. 在长时间运行中,建议添加WiFi断开重连机制

  2. 对于电池供电设备,考虑使用WiFi低功耗模式

  3. 生产环境中,建议将WiFi凭证存储在非易失性存储器中

  4. ESP32-S3的WiFi性能优于传统ESP32,支持更高的吞吐量

希望这个教程对你有所帮助!如果需要更高级的功能如Web服务器、MQTT客户端等,可以基于这些基础WiFi功能进一步开发。

相关文章:

  • 0509滴滴前端项目常见内容
  • ElementUI 表格el-table自适应高度设置
  • 007 Linux 开发工具(上)—— vim、解放sudo、gc+
  • Golang 接口 vs Rust Trait:一场关于抽象的哲学对话
  • LeetCode383_赎金信
  • Jenkins 服务器上安装 Git
  • Apache Calcite 详细介绍
  • 【EasyPan】loadDataList方法及checkRootFilePid方法解析
  • comfyui 实现中文提示词翻译英文进行图像生成
  • VScode一直处于循环“正在重新激活终端“问题的解决方法
  • 【上位机——MFC】序列化机制
  • 机器学习在信用卡欺诈检测中的应用思考
  • 基于英特尔 RealSense D455 结构光相机实现裂缝尺寸以及深度测量
  • svn服务器迁移
  • 使用VSCode在Windows 11上编译运行项目
  • Mybatis标签使用 -association 绑定对象,collection 绑定集合
  • 【背包dp----01背包】例题三------(标准的01背包+变种01背包1【恰好装满背包体积 产生的 最大价值】)
  • 【ROS2】Nav2源码之行为树定义、创建、加载
  • 【论文阅读】Attentive Collaborative Filtering:
  • 缓存替换算法与存储器管理的分页、分段、段页式管理联系
  • 著名文物鉴赏家吴荣光逝世,享年78岁
  • 墨西哥宣布就“墨西哥湾”更名一事起诉谷歌
  • 欧盟决意与俄罗斯能源彻底决裂之际,美国谋划新生意:进口俄气对欧转售
  • 普雷沃斯特当选新一任天主教罗马教皇
  • 以总理内塔尼亚胡称决心彻底击败哈马斯
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外