ESP32基础入门

第五课:Wi-Fi通信 - Station模式与SoftAP模式

Wi-Fi通信概述

ESP32是一款功能强大的Wi-Fi和蓝牙双模芯片,内置Wi-Fi功能使其成为物联网应用的理想选择。ESP32支持两种主要的Wi-Fi工作模式:Station模式和SoftAP模式。

注意: ESP32还可以同时工作在Station+SoftAP模式,即既连接到路由器又创建自己的热点。

1. Station模式连接路由器

在Station模式下,ESP32作为客户端连接到现有的Wi-Fi网络(如家庭路由器)。

连接步骤

  1. 包含必要的头文件:#include "WiFi.h"
  2. 定义Wi-Fi网络的SSID和密码
  3. 初始化Wi-Fi并设置为Station模式
  4. 连接到指定的Wi-Fi网络
  5. 检查连接状态

示例代码

#include <WiFi.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

void setup() {
  Serial.begin(115200);
  
  // 设置为Station模式
  WiFi.mode(WIFI_STA);
  
  // 连接到Wi-Fi网络
  WiFi.begin(ssid, password);
  
  Serial.print("正在连接到Wi-Fi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println("");
  Serial.println("Wi-Fi连接成功");
  Serial.print("IP地址: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // 主循环代码
}

关键API

常见问题: 如果连接失败,请检查SSID和密码是否正确,确保路由器工作正常,并确认ESP32在路由器信号覆盖范围内。

2. SoftAP模式创建热点

在SoftAP模式下,ESP32自身作为Wi-Fi热点,允许其他设备连接到它。

创建热点步骤

  1. 包含必要的头文件:#include "WiFi.h"
  2. 定义热点的SSID和密码(密码可选)
  3. 初始化Wi-Fi并设置为AP模式
  4. 配置热点的IP地址等参数(可选)
  5. 启动热点

示例代码

#include <WiFi.h>

const char* ssid = "ESP32_AP";
const char* password = "12345678";  // 最少8个字符

void setup() {
  Serial.begin(115200);
  
  // 设置为AP模式
  WiFi.mode(WIFI_AP);
  
  // 启动热点
  WiFi.softAP(ssid, password);
  
  Serial.println("热点已启动");
  Serial.print("AP IP地址: ");
  Serial.println(WiFi.softAPIP());
}

void loop() {
  // 主循环代码
}

关键API

提示: 在SoftAP模式下,ESP32默认的IP地址是192.168.4.1,它会为连接的设备分配192.168.4.x的IP地址。

Station+SoftAP混合模式

ESP32可以同时工作在Station和SoftAP模式,既连接到路由器又创建自己的热点。

示例代码

#include <WiFi.h>

const char* sta_ssid = "your_SSID";
const char* sta_password = "your_PASSWORD";
const char* ap_ssid = "ESP32_AP";
const char* ap_password = "12345678";

void setup() {
  Serial.begin(115200);
  
  // 设置为Station+AP模式
  WiFi.mode(WIFI_AP_STA);
  
  // 连接到路由器
  WiFi.begin(sta_ssid, sta_password);
  
  // 启动热点
  WiFi.softAP(ap_ssid, ap_password);
  
  Serial.println("混合模式已启动");
  Serial.print("Station IP: ");
  Serial.println(WiFi.localIP());
  Serial.print("AP IP: ");
  Serial.println(WiFi.softAPIP());
}

void loop() {
  // 主循环代码
}
客服小姐姐(优先添加)

客服小姐姐(优先添加)

客服微信

讲师微信(备用)