1. LED控制基础

LED控制基础 学习卡片

任务目标

在ESP32开发板上连接一个LED,通过浏览器访问ESP32提供的Web页面,点击页面上的按钮即可控制LED的亮灭。这是Web控制硬件的最基础闭环。

所需硬件与依赖

  • ESP32开发板(如ESP32-DevKitC)
  • 一个LED(如红色5mm)与一个220Ω限流电阻
  • Arduino IDE(需安装ESP32开发板支持包,版本2.x)
  • LED阳极接GPIO2,阴极串联电阻后接GND(GPIO2为开发板板载LED常用引脚,也可外接)

完整代码

#include <WiFi.h>
#include <WebServer.h>

// WiFi配置——请替换为你自己的热点信息
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

// LED引脚定义
const int ledPin = 2;

// 创建WebServer对象,监听80端口
WebServer server(80);

// 根路径处理函数:返回控制页面
void handleRoot() {
  String html = "<!DOCTYPE html><html><body>";
  html += "<h2>ESP32 LED 控制</h2>";
  html += "<p>LED状态: ";
  html += (digitalRead(ledPin) == HIGH) ? "<b>开启</b>" : "<b>关闭</b>";
  html += "</p>";
  html += "<a href=\"/on\"><button>打开LED</button></a> ";
  html += "<a href=\"/off\"<button>关闭LED</button></a>";
  html += "</body></html>";
  server.send(200, "text/html", html);
}

// 打开LED
void handleOn() {
  digitalWrite(ledPin, HIGH);
  server.sendHeader("Location", "/");
  server.send(302, "text/plain", "");
}

// 关闭LED
void handleOff() {
  digitalWrite(ledPin, LOW);
  server.sendHeader("Location", "/");
  server.send(302, "text/plain", "");
}

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);

  // 连接WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi连接成功");
  Serial.print("IP地址: ");
  Serial.println(WiFi.localIP());

  // 注册路由
  server.on("/", handleRoot);
  server.on("/on", handleOn);
  server.on("/off", handleOff);

  server.begin();
  Serial.println("HTTP服务器已启动");
}

void loop() {
  server.handleClient();
}

运行与验证

  1. 将代码中的your_SSID和your_PASSWORD替换为实际WiFi热点信息。
  2. 在Arduino IDE中选择正确的开发板型号(ESP32 Dev Module)和对应串口,编译上传。
  3. 打开串口监视器(波特率115200),等待ESP32连接WiFi成功后,记录打印的IP地址。
  4. 在手机或电脑浏览器中输入该IP地址,即可看到LED控制页面。
  5. 通过条件:点击“打开LED”按钮后页面跳转回首页且显示“LED状态: 开启”,同时开发板上LED亮起;点击“关闭LED”后LED熄灭且状态显示“关闭”。

常见问题

  • 无法连接WiFi:确认热点名称和密码无误,ESP32仅支持2.4GHz频段。
  • LED不亮:检查GPIO2引脚连接是否正确,部分开发板GPIO2已连接板载LED,若外接LED请确认引脚未损坏。
  • 页面无法访问:确认手机/电脑与ESP32处于同一局域网,并检查串口监视器打印的IP地址是否输入正确。