ESP32-S3 控制 WIFI

ESP32-S3 WiFi 实验 —— 手机网页控制 LED

在本实验中,我们将学习如何让 ESP32-S3 通过 WiFi 搭建一个简单的网页服务器,从而实现手机端网页控制开发板上的 LED 灯开关。


一、实验名称

WiFi实验


二、接线说明

设备 ESP32-S3
LED模块 D1 3号引脚

注意事项

  1. 手机和 ESP32-S3 必须在同一网络(同一局域网内),IP 地址在同一网段(例如 192.168.1.xxx)。
  2. 通过串口监视器获取 ESP32-S3 的 IP 地址,然后在手机浏览器输入该 IP 地址即可访问网页。

三、实验现象

程序下载成功后:

  1. ESP32-S3 连接 WiFi。
  2. 串口监控输出板子的 IP 地址。
  3. 在手机浏览器输入该 IP 地址访问网页。
  4. 网页上提供两个链接,点击即可控制 LED 灯开/关。

四、完整代码示例

#include "public.h"
#include <WiFi.h>

const char* ssid     = "puzhong88";    // WiFi 名称
const char* password = "PUZHONG88";    // WiFi 密码

WiFiServer server(80);                  // 创建 Web 服务器,端口 80

// LED 控制引脚
#define led_pin   3

// WiFi 连接函数
void wifi_connect(void)
{
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void setup(){
  Serial.begin(115200);
  pinMode(led_pin, OUTPUT);      // 设置 LED 引脚为输出模式
  delay(10);
  wifi_connect();                // 连接 WiFi
  server.begin();                // 启动服务器
}

void loop(){
  WiFiClient client = server.available();   // 监听客户端请求

  if (client) {                             // 如果有客户端连接
    Serial.println("New Client.");
    String currentLine = "";                // 保存客户端请求数据
    while (client.connected()) {            // 客户端连接期间循环
      if (client.available()) {             // 如果有数据可读
        char c = client.read();             // 读取字节
        Serial.write(c);

        if (c == '\n') {                    // 新行表示 HTTP 请求结束
          if (currentLine.length() == 0) {  // 两个换行符,HTTP 请求结束
            // 发送 HTTP 响应头
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            // 网页内容
            client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 3 on.<br>");
            client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 3 off.<br>");
            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {  // 忽略回车
          currentLine += c;
        }

        // 根据请求控制 LED
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(led_pin, HIGH);   // 打开 LED
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(led_pin, LOW);    // 关闭 LED
        }
      }
    }
    // 关闭客户端连接
    client.stop();
    Serial.println("Client Disconnected.");
  }
}

五、代码讲解

  1. WiFi 连接
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { ... }
  • ESP32-S3 连接指定 WiFi,并通过串口输出连接状态和 IP 地址。
  1. 网页服务器
WiFiServer server(80);
server.begin();
  • 创建并启动一个 HTTP 服务器,监听端口 80。
  1. 处理客户端请求
WiFiClient client = server.available();
  • 当有客户端连接时,读取 HTTP 请求,并判断请求路径 /H/L 来控制 LED。
  1. 网页响应
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.print("Click <a href=\"/H\">here</a> ...");
  • 发送 HTTP 响应头和网页内容,生成简单的控制界面。

六、实验效果

  1. ESP32-S3 连接到 WiFi,串口显示 IP 地址,例如:192.168.1.123
  2. 手机浏览器输入该 IP 地址即可访问网页。
  3. 网页上点击链接即可控制 LED 灯开/关。

七、进阶应用

  1. 多路控制
    可扩展多个 LED 或继电器,通过网页控制多路设备。

  2. 数据反馈
    在网页上显示 LED 状态或传感器数据,实现双向控制。

  3. 智能家居
    结合温湿度传感器、继电器、摄像头等,实现物联网智能控制。


八、总结

本实验通过 ESP32-S3 WiFi 模块 实现网页控制 LED,掌握了:

  • WiFi 连接与状态检查
  • HTTP 服务器搭建
  • 客户端请求解析与设备控制

这是学习 ESP32 IoT 项目、智能家居与远程控制的重要基础。

posted @ 2025-08-16 15:02  jeikerxiao  阅读(224)  评论(0)    收藏  举报