1. 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();
}
运行与验证
- 将代码中的
your_SSID和your_PASSWORD替换为实际WiFi热点信息。 - 在Arduino IDE中选择正确的开发板型号(ESP32 Dev Module)和对应串口,编译上传。
- 打开串口监视器(波特率115200),等待ESP32连接WiFi成功后,记录打印的IP地址。
- 在手机或电脑浏览器中输入该IP地址,即可看到LED控制页面。
- 通过条件:点击“打开LED”按钮后页面跳转回首页且显示“LED状态: 开启”,同时开发板上LED亮起;点击“关闭LED”后LED熄灭且状态显示“关闭”。
常见问题
- 无法连接WiFi:确认热点名称和密码无误,ESP32仅支持2.4GHz频段。
- LED不亮:检查GPIO2引脚连接是否正确,部分开发板GPIO2已连接板载LED,若外接LED请确认引脚未损坏。
- 页面无法访问:确认手机/电脑与ESP32处于同一局域网,并检查串口监视器打印的IP地址是否输入正确。