16、ESP32 Web

        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.xdnf.cn/news/1410772.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

triton之normalization教程

一 前向 在上式中,x是代表一个tensor import torchimport triton import triton.language as tltry:# This is https://github.com/NVIDIA/apex, NOT the apex on PyPi, so it# should not be added to extras_require in setup.py.import apexHAS_APEX = True except Module…

怎样通过Java语言实现远程控制8路控制器/断路器

怎样通过Java语言实现远程控制8路控制器/断路器呢&#xff1f; 本文描述了使用Java语言调用HTTP接口&#xff0c;实现控制8路控制器/断路器&#xff0c;支持8路输出&#xff0c;均可独立控制&#xff0c;可接入各种电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0…

zabbix监控Tongweb7企业版(by lqw+sy)

此贴参考zabbix通过jmx监控Tongweb7企业版&#xff08;by lqw&#xff09;&#xff0c;是在此帖子的基础和同事整理的文档基础上重新部署验证的优化版&#xff0c;使用的是centos7。 优点&#xff1a; 1.不需要通过jmx配置进行监控。&#xff08;jmx配置需要修改tongweb的配置…

前端基础学习html(1)

1.标题标签.h1,h2...h6 2.段落标签p 换行标签br 3.加粗strong(b) /倾斜em(i) /删除 del(s) /下划线ins(u) 4.盒子&#xff1a;div //一行一个 span//一行多个 5.img :src alt title width height border 图片src引用&#xff1a;相对路径 上级/同级/中级 绝对路径&#xff…

【CTF-Crypto】修复RSA证书入门汇总

证书修复 文章目录 证书修复基础知识Truncated 1Truncated 2Jumbled 基础知识 为什么要引入证书&#xff1f; 在正常题目中&#xff0c;大部分直接给出了数字&#xff0c;但是数字在现实世界中传输不稳定&#xff0c;容易在某处出现错误&#xff0c;所以我们将所有的数字信息…

移动机器人系统与技术:自动驾驶、移动机器人、旋翼无人机

这本书全面介绍了机器人车辆的技术。它介绍了道路上自动驾驶汽车所需的概念。此外&#xff0c;读者可以在六足机器人的构造、编程和控制方面获得宝贵的知识。 这本书还介绍了几种不同类型旋翼无人机的控制器和空气动力学。它包括各种旋翼推进飞行器在不同空气动力学环境下的模…

【c++leetcode】35. Search Insert Position

问题入口 二分搜索 时间复杂度O(logn) class Solution { public:int searchInsert(vector<int>& nums, int target) {int start 0;int end nums.size() - 1;while (start < end){int mid (start end) / 2;if (nums[mid] target){return mid;}else if(nums…

【C++】1.贪心算法:零钱兑换的奇妙之旅

欢迎来CILMY23的博客 本篇主题为 贪心算法&#xff1a;零钱兑换的奇妙之旅 个人主页&#xff1a;CILMY23-CSDN博客 个人专栏&#xff1a; Python | C | C语言 | 数据结构与算法 上一篇C博客&#xff1a;掌握C函数重载和引用开启代码优化的新篇章 感谢观看&#xff0c;支…

电机控制器电路板布局布线参考指导(七)电流检测模块布局布线

电机控制器电路板布局布线参考指导&#xff08;七&#xff09;电流检测模块布局布线 1.高侧电流检测2.低侧电流监测3.两相和三相电流检测4.关键元器件选型要求5.布局6.布线7.工具设置8.输入和输出滤波9.注意事项 很多电机驱动器产品系列包括内置了电流感测功能的器件&#xff0…

用keras识别狗狗

一、需求场景 从照片从识别出狗狗 from keras.applications.resnet50 import ResNet50 from keras.preprocessing import image from keras.applications.resnet50 import preprocess_input, decode_predictions import numpy as np# 加载预训练的ResNet50模型 model ResNet5…

Postgresql的安装教程dbever的连接pgAdmin4的连接

最近在学习Postgresql. 首先&#xff0c;我去官网上下载了Community DL Page12.18这个版本&#xff0c;低版本比较稳定而且文档比较多 https://www.cnblogs.com/xy-ouyang/p/12009503.html 接下来&#xff0c;我去上面的链接参考了连接。打开了postgresql的服务器之后&#x…

计算机毕业设计python在线交友系统django+vue

Flask 是一个轻量级的 Web 框架&#xff0c;使用 Python 语言编写&#xff0c;较其他同类型框架更为灵活、轻便且容易上手&#xff0c;小型团队在短时间内就可以完成功能丰富的中小型网站或 Web 服务的实现。 本在线交友系统管理员功能有个人中心&#xff0c;用户管理&#xff…

初识C++ · 类和对象(下)

目录 1 再谈构造函数 2 类中的隐式类型转换 3 Static成员 4 友元和内部类 5 匿名对象 6 编译器的一些优化 1 再谈构造函数 先看一段代码&#xff1a; class Date { public :Date(int year, int month, int day){_year year;_month month;_day day;} private:int _ye…

日志行为分析

1、恶意IP请求带有多个身份操作 可以看到上述日志中&#xff0c;某IP对登录了邮件并进行了相关操作&#xff0c;可以看到其登录了不同的账户&#xff0c;那么这个时候怎么判断其是正常的请求还是恶意请求呢&#xff1f; (1)、威胁情报&#xff0c;查找请求IP相关的威胁情报信息…

MySQL 8.4 版本(LTS) 发布,一睹为快

前言 Oracle 前几天发布了 MySQL 8.4 版本(LTS)&#xff0c; 该版本是创新版的第一个长期支持版本。详细规划&#xff0c;请移步 技术译文 | 一文了解 MySQL 全新版本模型 关于 MySQL 的版本发布规划 Oracle MySQL 官方开发团队推出的新版本将过渡到新的 MySQL 版本模型。MyS…

组合数问题

1.直接用递推&#xff1a; 下面是AC代码“&#xff1a; #include<bits/stdc.h> using namespace std; const int N2010,mod1e97; int a[N][N]; void init() {for(int i0;i<N;i){for(int j0;j<i;j){if(j0) a[i][j]1;else a[i][j](a[i-1][j]a[i-1][j-1])%mod;}} } i…

FreeRTOS--任务通知方式

一.任务通知(Task Notifications)介绍 FreeRTOS 每个已经创建的任务都有一个任务控制块&#xff08; task control block&#xff09;&#xff0c;任务控制块就是一个结构体变量&#xff0c; 用于记录任务的相关信息。 结构体变量中有一个 32 位的变量成员 ulNotifiedValue 是专…

分割链表----一道题目的3种不同的解法

1.题目概述 以这个题目的事例作为例子&#xff0c;我们看一下这个题目到底是什么意思&#xff08;Leedcode好多小伙伴说看不懂题目是什么意思&#xff09;&#xff0c;就是比如一个x3&#xff0c;经过我们的程序执行之后&#xff1b;大于3的在这个链表的后面&#xff0c;小于3的…

Qt5 框架学习及应用 — 对象树

Qt 对象树 对象树概念Qt为什么使用对象树 &#xff1f;将对象挂到对象树上 对象树概念 对象树&#xff1a;对于树的概念&#xff0c;相信许多学过数据结构的同学应该都不会陌生。在学习数据结构的时候我们所接触的什么二叉树、多叉树、哈夫曼树、AVL树、再到红黑树、B/B树………

java之web笔记

1.Servlet技术 1.1 JavaWeb概述 在Sun的Java Servlet规范中&#xff0c;对Java Web应用作了这样定义:“JavaWeb应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。 Java Web应用中可以包含如下内容…