30浏览
查看: 30|回复: 9

[项目] 【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

[复制链接]
【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图2

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图2

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

本帖最后由 驴友花雕 于 2025-1-15 13:06 编辑

所需零件
在本案例中,我们将控制两个 LED。因此,我们需要以下部分:
ESP8266开发板
两个 LED
面包板
跳线

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图2
【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

  【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
   实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
   实验项目之十三:使用 Web 服务器的 ESP8266 LED 控制

实验开源代码


  1. /*
  2.   【花雕学编程】239种传感器执行器系列实验(资料代码+仿真编程+图形编程)
  3.    实验二百四十六:ESP8266串口wifi模块 NodeMCU Lua V3物联网开发板 CH340
  4.    实验项目之十三:使用 Web 服务器的 ESP8266 LED 控制
  5. */
  6. #include <ESP8266WiFi.h> // 包含ESP8266WiFi库,用于WiFi连接
  7. #include <ESP8266WebServer.h> // 包含ESP8266WebServer库,用于创建Web服务器
  8. #define output2  2
  9. #define output0  0
  10. // 定义AP模式的SSID和密码
  11. const char* ssid = "ESP8266_AP"; // 这是ESP8266将广播的SSID
  12. const char* password = "12345678"; // 密码至少应为8个字符
  13. // 创建全局变量
  14. String http;
  15. String output2State = "off";
  16. String output0State = "off";
  17. // 定义服务端和客户端
  18. WiFiServer server(80); // 创建一个WiFiServer对象,监听80端口
  19. WiFiClient client; // 创建一个WiFiClient对象
  20. void setup() {
  21.   Serial.begin(9600); // 初始化串口通信,波特率为9600
  22.   Serial.println(" ");
  23.   Serial.println(" ");
  24.   pinMode(2, OUTPUT); // 设置GPIO 2为输出模式
  25.   pinMode(0, OUTPUT); // 设置GPIO 0为输出模式
  26.   digitalWrite(2, LOW); // 初始化GPIO 2为低电平
  27.   digitalWrite(0, LOW); // 初始化GPIO 0为低电平
  28.   Serial.print("Connecting to ");
  29.   Serial.println(ssid);
  30.   // 创建ESP8266接入点
  31.   WiFi.softAP(ssid, password);
  32.   Serial.println("");
  33.   Serial.println("WiFi AP is now running");
  34.   Serial.println("IP address: ");
  35.   Serial.println(WiFi.softAPIP());
  36.   // 启动ESP8266服务器
  37.   server.begin();
  38. }
  39. void loop() {
  40.   client = server.available(); // 检查是否有新的客户端尝试连接到服务器
  41.   if (client) {
  42.     Serial.println("New Client.");
  43.     String clientData = "";
  44.     while (client.connected()) { // 等待客户端完成HTTP请求的发送
  45.       if (client.available()) { // 如果有数据
  46.         char c = client.read(); // 读取一个字符
  47.         http += c; // 解析它
  48.         Serial.write(c);
  49.         if (c == '\n') { // 如果字符是换行符
  50.           // 表示客户端HTTP请求结束
  51.           if (clientData.length() == 0) { // 清空clientData
  52.             sendResponse(); // 执行必要操作
  53.             updateLED();
  54.             updateWebpage();
  55.             break;
  56.           } else {
  57.             clientData = ""; // 清空clientData
  58.           }
  59.         } else if (c != '\r') { // 如果字符不是回车符
  60.           clientData += c; // 将字符存储到clientData变量中
  61.         }
  62.       }
  63.     }
  64.     http = "";
  65.     client.stop(); // 断开客户端连接
  66.     Serial.println("Client disconnected.");
  67.     Serial.println("");
  68.   }
  69. }
  70. void sendResponse() {
  71.   // 发送HTTP响应头
  72.   client.println("HTTP/1.1 200 OK");
  73.   client.println("Content-type:text/html");
  74.   client.println("Connection: close");
  75.   client.println();
  76. }
  77. void updateWebpage() {
  78.   // 发送整个HTML页面
  79.   client.println("<!DOCTYPE html><html>");
  80.   client.println("<head>");
  81.   client.println("<title>LED Status</title>");
  82.   client.println("</head>");
  83.   client.println("<head>");
  84.   client.println("<meta name="viewport" content="width=device-width, initial-scale=1">");
  85.   client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
  86.   client.println("</style></head>");
  87.   // 网页标题
  88.   client.println("<body><h1>ESP Web Server!</h1>");
  89.   // 显示蓝色LED的按钮
  90.   client.println("<p>1. GPIO 2 is " + output2State + "</p>");
  91.   if (output2State == "off") {
  92.     client.println("<p><a href="/2/on"><button>Turn ON</button></a></p>");
  93.   } else {
  94.     client.println("<p><a href="/2/off"><button>Turn OFF</button></a></p>");
  95.   }
  96.   client.print("<hr>");
  97.   // 显示绿色LED的按钮
  98.   client.println("<p>2. GPIO 0 is " + output0State + "</p>");
  99.   if (output0State == "off") {
  100.     client.println("<p><a href="/0/on"><button>Turn ON</button></a></p>");
  101.   } else {
  102.     client.println("<p><a href="/0/off"><button>Turn OFF</button></a></p>");
  103.   }
  104.   client.println("</body></html>");
  105.   client.println();
  106. }
  107. void updateLED() {
  108.   if (http.indexOf("GET /2/on") >= 0) {
  109.     Serial.println("GPIO 2 LED on");
  110.     output2State = "on";
  111.     digitalWrite(2, HIGH);
  112.   } else if (http.indexOf("GET /2/off") >= 0) {
  113.     Serial.println("GPIO 2 LED off");
  114.     output2State = "off";
  115.     digitalWrite(2, LOW);
  116.   } else if (http.indexOf("GET /0/on") >= 0) {
  117.     Serial.println("GPIO 0 LED on");
  118.     output0State = "on";
  119.     digitalWrite(0, HIGH);
  120.   } else if (http.indexOf("GET /0/off") >= 0) {
  121.     Serial.println("GPIO 0 off");
  122.     output0State = "off";
  123.     digitalWrite(0, LOW);
  124.   }
  125. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

代码解读:

1、包含库:

#include <ESP8266WiFi.h>:包含ESP8266WiFi库,用于WiFi连接。

#include <ESP8266WebServer.h>:包含ESP8266WebServer库,用于创建Web服务器。

2、定义网络凭据:

const char* ssid = "ESP_AP";:定义要广播的SSID。

const char* password = "12345678";:定义WiFi密码,必须至少为8个字符。

3、创建全局变量:

String http;:存储HTTP请求的内容。

String output2State = "off";:存储GPIO 2的状态。

String output0State = "off";:存储GPIO 0的状态。

4、定义服务端和客户端:

WiFiServer server(80);:创建WiFiServer对象,监听80端口。

WiFiClient client;:创建WiFiClient对象。

5、初始化设置(setup函数):

初始化串口通信,设置波特率为9600。

设置GPIO 2和GPIO 0为输出模式,初始状态为低电平。

创建ESP32接入点。

打印接入点的IP地址。

启动ESP32服务器。

6、主循环(loop函数):

检查是否有新的客户端连接。

处理客户端请求并解析HTTP数据。

发送HTTP响应和更新网页。

断开客户端连接。

7、发送HTTP响应(sendResponse函数):

发送HTTP响应头信息。

8、更新网页内容(updateWebpage函数):

发送整个HTML页面,包括按钮和LED状态。

9、更新LED状态(updateLED函数):

根据HTTP请求更新LED状态。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

实验串口返回情况

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

在手机端打开WiFi ,输入密码,连接ESP8266_AP

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

在手机端打开浏览器,输入IP地址:192.168.4.1
使用面板上的两个按钮,即可控制LED的亮灭

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

控制LED后的实验串口返回情况

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制

实验场景图

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图1

【花雕学编程】Arduino动手做(246)---ESP8266 Web LED 控制图2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail