16、ESP32 Web

server/2024/12/22 17:05:12/

        Web 服务器具有移动响应能力,可以使用本地网络上的任何设备作为浏览器进行访问。

        示例功能:

  • 构建 Web 服务器控制连接到 ESP32 的 LED
  • 在本地网络的浏览器上输入 ESP32 IP 地址访问 Web 服务器
  • 通过单击 Web 服务器上的按钮,更改 LED 状态
// 使用 ESP32 构建 Web 服务器,控制 LED#include <Arduino.h>
#include <WiFi.h>const char* ssid = "么么";    // Wifi
const char* password = "yaoqiao321";    // 密码WiFiServer server(80);      // 设置 web 服务器端口号 80// Variable to store the HTTP request
String header;  // HTTP 请求变量const int LED = 2;
String led_state = "off";   // 当前 LED 状态unsigned long currentTime;      // 当前时间
unsigned long previousTime;     // 上次时间
const long timeoutTime = 2000;  // 超时时间 2Svoid setup()
{Serial.begin(115200);pinMode(LED, OUTPUT);digitalWrite(LED, LOW);// 连接 WIFI,打印 IPSerial.print("Connecting to ");Serial.println(ssid);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println();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 = "";    // 存储客户端传入数据currentTime = millis();previousTime = currentTime;// 客户端连接时循环,2S刷新while (client.connected() && currentTime - previousTime <= timeoutTime){currentTime = millis();if (client.available())     // 接收到客户端字节{char c = client.read();Serial.write(c);header += c;// 其他字符存储if ((c != '\r') && (c != '\n')) {currentLine += c;}// 结束请求,返回响应else if (c == '\n'){if (currentLine.length() == 0){client.println("HTTP/1.1 200 OK");          // 发送响应头 HTTP/1.1 200 OKclient.println("Content-type:text/html");   // 发送内容类型 text/htmlclient.println("Connection: close");        // 发送内容client.println();                           // 发送换行if (header.indexOf("GET /LED/on") >= 0)  // 返回指定字符串在原字符串中第一次出现的位置。没有指定的字符串返回-1{Serial.println("LED ON");led_state = "on";digitalWrite(LED, HIGH);}else if (header.indexOf("GET /LED/off") >= 0){Serial.println("LED OFF");led_state = "off";digitalWrite(LED, LOW);}// 创建网页// 发送 HTML 网页client.println("<!DOCTYPE html><html>");        // 正在发送 HTMLclient.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");   // 在 Web 浏览器中有响应client.println("<link rel=\"icon\" href=\"data:,\">");      // 防止对网站图标的请求// CSS 按钮样式client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");      // Helvetica字体,中心对齐client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");     // 按钮 #4CAF50 色、无边框、白色文本和填充,大小 16px 40pxclient.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");   // 文本修饰 none,字体大小 30px、边距 2px、指向指针的光标client.println(".button2 {background-color: #555555;}</style></head>");     // 第二个按钮改变颜色(OFF)// Web 标题client.println("<body><h1>ESP32 Web Server</h1>");// 显示 LED 当前状态client.println("<p>LED - State " + led_state + "</p>");// 当前是 OFF 显式 ON,当前是 ON 显式 OFFif (led_state == "off"){client.println("<p><a href=\"/LED/on\"><button class=\"button\">ON</button></a></p>");} else{client.println("<p><a href=\"/LED/off\"><button class=\"button button2\">OFF</button></a></p>");} // HTTP 响应以空行结束client.println();break;}elsecurrentLine = "";   // 有换行符,清除 currentLine}}}header = "";client.stop();      // 关闭连接Serial.println("Client disconnected.");}
}

代码烧录到 ESP32,返回 IP 地址。

用同网络环境下的设备访问这个 IP。

  点击按钮,可以控制 ESP32 IO 电平


http://www.ppmy.cn/server/35590.html

相关文章

小程序地理位置接口权限直接抄作业

小程序地理位置接口有什么功能&#xff1f; 随着小程序生态的发展&#xff0c;越来越多的小程序开发者会通过官方提供的自带接口来给用户提供便捷的服务。但是当涉及到地理位置接口时&#xff0c;却经常遇到申请驳回的问题&#xff0c;反复修改也无法通过&#xff0c;给的理由也…

5-在Linux上部署各类软件

1. MySQL 数据库安装部署 1.1 MySQL 5.7 版本在 CentOS 系统安装 注意&#xff1a;安装操作需要 root 权限 MySQL 的安装我们可以通过前面学习的 yum 命令进行。 1.1.1 安装 配置 yum 仓库 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql…

口袋实验室--使用AD2学习频谱参数测试

目录 1. 简介 2. 频谱相关参数 2.1 频谱相关基本概念 2.1.1 采样时间间隔 2.1.2 采样频率 2.1.3 采样点数 2.1.4 采样时间长度 2.1.5 谱线数 2.1.6 奈奎斯特频率 2.1.7 频谱分辨率 2.1.8 最高分析频率 2.1.9 频谱泄露 2.2 窗函数 2.2.1 AD2的窗函数 2.2.2 测试矩…

Docker 容器日志占用空间过大解决办法

1、vi /etc/docker/daemon.json {"log-driver":"json-file","log-opts": {"max-size":"200m", "max-file":"1"} } 2、重新加载守护进程配置文件 systemctl daemon-reload 3、重启docker systemctl…

商城数据库88张表结构完整示意图61~70(十四)

六十一&#xff1a; 六十二&#xff1a; 六十三&#xff1a; 六十四&#xff1a; 六十五&#xff1a; 六十六&#xff1a; 六十七&#xff1a; 六十八&#xff1a; 六十九&#xff1a; 七十&#xff1a;

GZIPOutputStream JSON压缩

一、背景 小王瞥了一眼历史记录表&#xff0c;不禁惊呼&#xff1a;“这表怎么这么大&#xff1f;”同事们闻声纷纷围拢过来查看。仔细一瞧&#xff0c;发现这个表的大小竟然超过了3G。主管随即指示小王打开相应的表数据检查&#xff0c;发现其中存储了用户的权限信息&#xf…

Linux 部署YUM仓库及NFS共享服务

目录 一.YUM仓库服务 YUM (Yellow dog Updater Modified) Linux系统各家厂商用的安装源 准备安装源 软件仓库的提供方式 RPM软件包的来源 构建Centos7软件仓库 在软件仓库中加入非官方RPM包组 为客户机指定YUM仓库位置 制作ftp源 服务端 (1)关闭防火墙 (2)下载vsftp…

leetcode 413.等差数列划分

思路&#xff1a;dp 因为正在练dp&#xff0c;所以这里就用dp的方法做了。 通过我们做过的一个题&#xff0c;就是leetcode 53.最大子段和那个&#xff0c;还有最长递增序列那一类题&#xff0c;我们可以知道&#xff0c;设置dp含义一般都是以什么什么数结尾&#xff0c;然后…