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

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

2. 检查是否连接成功:

cpp 复制代码
 // 等待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. 重新连接

cpp 复制代码
bool reconnect();

reconnect()尝试重新连接

4. 断开连接

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

5. 返回连接状态

cpp 复制代码
bool isConnected();

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

连接WIFI的程序示例:

cpp 复制代码
#include <Arduino.h>
#include <WiFi.h>

void setup()
{
  // 初始化串口通信,波特率为115200
  Serial.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 作为接入点启动

cpp 复制代码
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 配置为静态(固定)以及网关和子网

cpp 复制代码
bool softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet);

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

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

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

3. softAP断开连接

cpp 复制代码
bool softAPdisconnect(bool wifioff = false);

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

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

4. 获取AP客户端数量

cpp 复制代码
uint8_t softAPgetStationNum();

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

5. 获取 AP IPv4 地址的函数

cpp 复制代码
IPAddress softAPIP();

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

创建WIFI接入点程序示例:

cpp 复制代码
#include <Arduino.h>
#include "WiFi.h" // 引入WiFi库
const char* ssid="ESP32AP"; // 定义一个字符串常量,表示WiFi接入点的SSID
const char* password="123456789"; // 定义一个字符串常量,表示WiFi接入点的密码

void setup() {
 Serial.begin(115200); // 初始化串行通信,波特率为115200
 WiFi.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网络

cpp 复制代码
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地址

cpp 复制代码
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)); // 打印SSID
    Serial.print("信号强度: "); // 打印信号强度
    Serial.println(WiFi.RSSI(i)); // 打印信号强度值
    Serial.print("MAC地址: "); // 打印MAC地址
    Serial.println(WiFi.BSSIDstr(i)); // 打印MAC地址字符串形式
    Serial.println("-----------------------"); 
  }
}
相关推荐
非概念3 分钟前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
林开落L7 分钟前
前缀和算法习题篇(上)
c++·算法·leetcode
Prejudices20 分钟前
C++如何调用Python脚本
开发语言·c++·python
单音GG23 分钟前
推荐一个基于协程的C++(lua)游戏服务器
服务器·c++·游戏·lua
qing_04060339 分钟前
C++——多态
开发语言·c++·多态
孙同学_39 分钟前
【C++】—掌握STL vector 类:“Vector简介:动态数组的高效应用”
开发语言·c++
charlie1145141911 小时前
Qt Event事件系统小探2
c++·qt·拖放·事件系统
iiiiiankor1 小时前
C/C++内存管理 | new的机制 | 重载自己的operator new
java·c语言·c++
小辛学西嘎嘎1 小时前
C/C++精品项目之图床共享云存储(3):网络缓冲区类和main
c语言·开发语言·c++
jjjxxxhhh1231 小时前
FPGA,使用场景,相比于单片机的优势
单片机·嵌入式硬件·fpga开发