找回密码
 立即注册
首页 业界区 业界 ESP32教程:通过WIFI控制LED灯的开关

ESP32教程:通过WIFI控制LED灯的开关

荏牌 前天 22:20
LED闪烁

在通过WIFI控制LED灯的开关之前,我们先实现一下LED闪烁。
接线图:
1.png

来源:https://esp32io.com/tutorials/esp32-led-blink
我的接线图:
2.jpeg

LED长的为阳极,短的为阴极,阳极通过一个电阻与ESP32引脚连接,这里以18引脚为例,阴极连接ESP32的GND引脚。
代码:
  1. // 定义 LED 连接的引脚
  2. const int ledPin = 18;  // GPIO 2
  3. void setup() {
  4.   // 初始化 LED 引脚为输出
  5.   pinMode(ledPin, OUTPUT);
  6. }
  7. void loop() {
  8.   // 打开 LED
  9.   digitalWrite(ledPin, HIGH);
  10.   delay(1000);  // 等待 1 秒
  11.   // 关闭 LED
  12.   digitalWrite(ledPin, LOW);
  13.   delay(1000);  // 等待 1 秒
  14. }
复制代码
烧录运行,如果接线没错的话,效果在:https://mp.weixin.qq.com/s/tI6YlXAeGp7CvGZeuGdV5g
3.png

通过WIFI控制LED灯的开关

在实现第一个例子之后,为了挖掘一下ESP32的特性,我们就来玩一下通过WIFI控制LED灯的开关。
整个过程的时序图:
4.png

代码:
  1. #include <WiFi.h>
  2. #include <WebServer.h>
  3. // 定义 LED 连接的引脚
  4. const int ledPin = 18;  // GPIO 2
  5. // WiFi 连接参数
  6. const char* ssid = "WIFI名称";
  7. const char* password = "WIFI密码";
  8. // Web 服务器端口
  9. const int serverPort = 80;
  10. // 创建 WiFi 客户端和 Web 服务器对象
  11. WebServer server(serverPort);
  12. void setup() {
  13.   // put your setup code here, to run once:
  14.   Serial.begin(115200);
  15.   
  16.   // 初始化 LED 引脚为输出
  17.   pinMode(ledPin, OUTPUT);
  18.   // 连接 WiFi
  19.   WiFi.begin(ssid, password);
  20.   while (WiFi.status() != WL_CONNECTED) {
  21.     delay(1000);
  22.     Serial.println("Connecting to WiFi...");
  23.   }
  24.   Serial.println("Connected to WiFi");
  25.   Serial.print("IP Address: ");
  26.   Serial.println(WiFi.localIP());
  27.   // 设置 Web 服务器路由
  28.   server.on("/", handleRoot);
  29.   server.on("/on", handleOn);
  30.   server.on("/off", handleOff);
  31.   // 开始 Web 服务器
  32.   server.begin();
  33.   Serial.println("Web server started");
  34. }
  35. void loop() {
  36.   // 处理 Web 服务器请求
  37.   server.handleClient();
  38. }
  39. // 处理根路由
  40. void handleRoot() {
  41.   String html = "<html><head><title>ESP32 LED Control</title></head><body>";
  42.   html += "<h1>ESP32 LED Control</h1>";
  43.   html += "<button>Turn On</button>";
  44.   html += "<button>Turn Off</button>";
  45.   html += "</body></html>";
  46.   server.send(200, "text/html", html);
  47. }
  48. // 处理 LED 开启请求
  49. void handleOn() {
  50.   digitalWrite(ledPin, HIGH);
  51.   server.send(200, "text/plain", "LED is ON");
  52. }
  53. // 处理 LED 关闭请求
  54. void handleOff() {
  55.   digitalWrite(ledPin, LOW);
  56.   server.send(200, "text/plain", "LED is OFF");
  57. }
复制代码
方便理解,可以看一下这个图:
5.png

烧录运行,查看串口监视器,没有看到输出的话,就按一下ESP32上的RST重启一下:
6.png

现在我们可以使用连接同一个WIFI的电脑或者手机,登录http://192.168.0.100:80/由于80是默认端口号,直接输入ip地址即可。
为了方便录制效果,我使用的是平板登录。
效果在:https://mp.weixin.qq.com/s/xMPMKkogfbtllKeyBYShXw
7.png

总结

总结一下,通过这个示例,我们可以了解到:

  • 基础 Arduino 结构: setup() 用于初始化,loop() 用于重复执行。
  • GPIO 控制: 如何使用 pinMode() 设置引脚模式,以及如何使用 digitalWrite() 控制数字输出(开关 LED)。
  • 串口通信: 如何使用 Serial 对象向电脑发送调试信息。
  • ESP32 WiFi 连接: 如何包含库、设置 SSID/密码、启动连接、检查状态并获取 IP 地址。
  • ESP32 Web 服务器: 如何包含库、创建服务器对象、设置路由(将 URL 路径映射到处理函数)、启动服务器以及在 loop() 中处理客户端请求。
  • HTTP 基础: 了解请求 (访问 URL) 和响应 (服务器发送回的内容),以及简单的 HTTP 状态码 (200 OK) 和内容类型 (text/html, text/plain)。
  • HTML 基础: 如何构建一个包含标题、链接和按钮的简单网页。
  • 回调函数 (Handlers): 函数可以作为参数传递给其他函数(如 server.on),并在特定事件发生时被调用。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册