欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 第五章 5.2ESP32物联网应用:HTTP与Web服务器详细教学

第五章 5.2ESP32物联网应用:HTTP与Web服务器详细教学

2025/4/19 12:07:45 来源:https://blog.csdn.net/Hi__gril/article/details/147277698  浏览:    关键词:第五章 5.2ESP32物联网应用:HTTP与Web服务器详细教学

本文将详细讲解如何在ESP32上搭建Web服务器,通过HTTP协议实现远程控制LED灯。每行代码均有详细注释,适合零基础学习。


一、HTTP协议基础

HTTP是客户端(浏览器)和服务器之间的通信协议,常用请求方法:

  • GET:从服务器获取数据(如加载网页)

  • POST:向服务器提交数据(如表单提交)


二、硬件准备

  • ESP32开发板

  • LED灯(接GPIO2,串联220Ω电阻)


三、代码实现:网页控制LED

完整代码
#include <WiFi.h>// WiFi配置
const char* ssid = "Your_SSID";      // 替换为你的WiFi名称
const char* password = "Your_PASS";  // 替换为你的WiFi密码// 创建Web服务器对象,监听80端口
WiFiServer server(80);// LED配置
const int ledPin = 2;  // 使用GPIO2控制LED
String ledState = "OFF"; // 存储LED状态void setup() {Serial.begin(115200);pinMode(ledPin, OUTPUT);digitalWrite(ledPin, LOW);  // 初始关闭LED// 连接WiFiSerial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {  // 等待连接delay(500);Serial.print(".");}// 打印IP地址Serial.println("");Serial.println("WiFi connected.");Serial.print("IP address: ");Serial.println(WiFi.localIP());server.begin();  // 启动Web服务器
}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响应头client.println("HTTP/1.1 200 OK");client.println("Content-type:text/html");client.println("Connection: close");client.println();// 生成HTML页面client.println("<!DOCTYPE html><html>");client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");client.println("<style>button { padding: 20px; font-size: 24px; }</style></head>");client.println("<body><h1>ESP32 Web Server</h1>");client.println("<p>LED状态: " + ledState + "</p>");client.println("<p><a href=\"/on\"><button>ON</button></a></p>");client.println("<p><a href=\"/off\"><button>OFF</button></a></p>");client.println("</body></html>");// 解析客户端请求if (currentLine.startsWith("GET /on")) {digitalWrite(ledPin, HIGH);ledState = "ON";} else if (currentLine.startsWith("GET /off")) {digitalWrite(ledPin, LOW);ledState = "OFF";}break;  // 结束响应} else if (c != '\r') {currentLine += c;  // 存储请求内容}}}client.stop();  // 关闭连接Serial.println("Client disconnected.");}
}

四、代码逐行解析

  1. WiFi连接

    WiFi.begin(ssid, password);  // 启动WiFi连接
    while (WiFi.status() != WL_CONNECTED)  // 等待连接成功
    • 持续检测直到WiFi连接成功

  2. Web服务器初始化

    WiFiServer server(80);  // 创建监听80端口的服务器
    server.begin();         // 启动服务器

  3. 处理客户端请求

    WiFiClient client = server.available();  // 检查是否有客户端连接
    • 当浏览器访问ESP32的IP时触发

  4. HTML页面生成

    client.println("<a href=\"/on\"><button>ON</button></a>"); // 创建ON按钮
    • 点击按钮会发送GET /on请求

  5. LED控制逻辑

    if (currentLine.startsWith("GET /on")) {digitalWrite(ledPin, HIGH);  // 收到/on请求时点亮LED
    }

五、使用演示

  1. 上传代码到ESP32

  2. 打开串口监视器查看分配的IP地址

  3. 浏览器访问http://[ESP32_IP]

  4. 点击ON/OFF按钮控制LED


六、扩展应用

  1. 添加POST请求处理:通过表单提交数据

  2. 多设备控制:增加更多按钮和GPIO控制

  3. 传感器集成:在网页显示温湿度数据


七、常见问题

  1. 无法连接WiFi:检查SSID/密码是否正确

  2. 按钮无反应:确认GPIO引脚配置正确

  3. 页面加载慢:确保ESP32信号强度足够


通过本教程,您已掌握ESP32 Web服务器的核心实现方法。后续可结合AJAX实现无刷新更新,或添加SSL加密提升安全性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词