【Ardiuno】实验使用ESP32单片机实现高级web服务器暂时动态图表功能(图文)

news2024/9/20 5:49:36

接下来,我们继续实验示例代码中的Wifi“高级web服务器”,配置相关的无线密码后,开始实验

#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>

const char *ssid = "XIAOFEIYU";
const char *password = "XIAOFEIU666";

WebServer server(80);

const int led = 13;

void handleRoot() {
  digitalWrite(led, 1);
  char temp[400];
  int sec = millis() / 1000;
  int min = sec / 60;
  int hr = min / 60;

  snprintf(temp, 400,

           "<html>\
  <head>\
    <meta http-equiv='refresh' content='5'/>\
    <title>ESP32 Demo</title>\
    <style>\
      body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
    </style>\
  </head>\
  <body>\
    <h1>Hello from ESP32!</h1>\
    <p>Uptime: %02d:%02d:%02d</p>\
    <img src=\"/test.svg\" />\
  </body>\
</html>",

           hr, min % 60, sec % 60
          );
  server.send(200, "text/html", temp);
  digitalWrite(led, 0);
}

void handleNotFound() {
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }

  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void) {
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(9600);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp32")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);
  server.on("/test.svg", drawGraph);
  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  server.handleClient();
  delay(2); 
}

void drawGraph() {
  String out = "";
  char temp[100];
  out += "<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"400\" height=\"150\">\n";
  out += "<rect width=\"400\" height=\"150\" fill=\"rgb(250, 230, 210)\" stroke-width=\"1\" stroke=\"rgb(0, 0, 0)\" />\n";
  out += "<g stroke=\"black\">\n";
  int y = rand() % 130;
  for (int x = 10; x < 390; x += 10) {
    int y2 = rand() % 130;
    sprintf(temp, "<line x1=\"%d\" y1=\"%d\" x2=\"%d\" y2=\"%d\" stroke-width=\"1\" />\n", x, 140 - y, x + 10, 140 - y2);
    out += temp;
    y = y2;
  }
  out += "</g>\n</svg>\n";

  server.send(200, "image/svg+xml", out);
}

从串口监视器查看获取的ip地址,使用浏览器打开这个服务器,可以看到下面的图形会定时更新切换。 

这个例子给了我们一个可以生成实时图表的思路,使用硬件获取数据后可以直接以web图形的形式进行输出,直接作为服务器使用,这样的系统更为稳定,不用单独再配置计算机来进行数据的展示。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1814940.html

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

相关文章

docker-compose启动oracle11、并使用navicat进行连接

一、docker-compose.yml version: 3.9 services:oracle:image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11grestart: alwaysprivileged: truecontainer_name: oracle11gvolumes:- ./data:/u01/app/oracleports:- 1521:1521network_mode: "host"logging:d…

[数据集][目标检测]胸部解剖检测数据集VOC+YOLO格式100张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;100 标注数量(xml文件个数)&#xff1a;100 标注数量(txt文件个数)&#xff1a;100 标注类别…

代理IP的稳定性与安全性应如何保障?

在数字化时代&#xff0c;代理IP作为访问网络的重要工具&#xff0c;其稳定性和安全性对于保障网络使用体验和隐私保护具有至关重要的意义。今天IPIDEA就为大家分享保障代理IP的稳定性与安全性的几个关键点。 一、选择可靠的代理服务提供商 确保代理IP稳定性的关键是选择一家可…

【工具】拉取或者review github上别人提的未合入开源项目的PR代码

一、pr id 链接后加.patch 举个例子说下吧。 比如我们有下面的PR链接&#xff1a; https://github.com/apache/hadoop/pull/6871/files 其界面如下所示&#xff1a; 我们只需要把URL改成&#xff1a; https://github.com/apache/hadoop/pull/6871.patch 它就会自动跳转后变…

解决el-table表格拖拽后,只改变了数据,表头没变的问题

先看看是不是你想要解决的问题 拖拽后表头不变的bug修复 这个问题一般是使用v-for对column的数据进行循环的时候&#xff0c;key值绑定的是个index导致的&#xff0c;请看我上篇文章&#xff1a;eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽)&#xff1a;-…

html和css创建一个简单的网页

html代码及解析 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>CSS Example</title><lin…

基于模型的理念:认知提升与研发模式转型

系统工程是从航空、航天等系统的开发过程中总结出来、用于指导复杂工程项目开展的方法论&#xff0c;是协调庞大团队完成复杂任务的技术和管理要素的综合&#xff0c;最新的国际标准将系统工程定义为“管控整个技术和管理活动的跨学科的方法&#xff0c;这些活动将一组客户的需…

Boost升压电路原理

电路拓扑图 Boost升压原理 阶段1&#xff1a;MOS管开启&#xff0c;电感位置a的电位为Vin&#xff0c;电感位置b的电位为0&#xff08;忽略MOS管压降&#xff09; 此时&#xff0c;电感电流线性上升&#xff0c;此阶段&#xff0c;输入源对电感充电 阶段2&#xff1a;MOS管断…

618数码产品哪些值得买?人气产品推荐!

随着618购物节的到来&#xff0c;你是否在琳琅满目的商品世界中感到无所适从&#xff0c;难以挑选出最符合心意的宝贝&#xff1f;团团为大家精心整理了一份甄选好物清单。让我们一起摆脱选择的困扰&#xff0c;锁定心仪的商品&#xff0c;在618的购物盛宴中尽情享受购物的乐趣…

STC8增强型单片机进阶开发--OLED显示器(SPI)

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

程序固化——FPGA学习笔记6

一、固化文件介绍 BIN:一般是由Vivado软件编译产生的&#xff0c;存储在特定目录下的二进制文件 MCS:一般通过VivadoGUl界面操作或者TCL命令生成&#xff0c;MCS文件里包含了BIN文件的内容&#xff0c;除此之外&#xff0c;每行的开始有地址信息&#xff0c;最后一个Byte是CRC校…

数字政府与大模型

1. 什么是数字政府&#xff1f; 数字政府是指运用信息技术&#xff0c;如互联网、大数据、云计算等&#xff0c;来改革政府的服务提供方式、决策过程和内部管理&#xff0c;以提升效率、透明度和公众参与度的新型政府形态。 2. 大模型在数字政府中的作用是什么&#xff1f; …

吃透Redis系列:数据一致性问题

欢迎关注微信公众号&#xff1a;互联网全栈架构 分布式缓存可能是Redis最常见的应用场景了。缓存里的热点数据一般来自于关系型数据库&#xff0c;这样的话&#xff0c;就会存在缓存与数据库的数据一致性问题。 当然&#xff0c;这种数据不一致性主要是针对写操作来说的&#x…

7-1RT-Thread邮箱

7-1RT-Thread邮箱 同步实现了多线程在访问共享资源时执行顺序的控制。如线程1实现串口的监控&#xff0c;当串口接收到数据后通知线程2读取数据&#xff0c;相当于只给了通知&#xff0c;而没有给通知的具体内容&#xff0c;而通信则是将通知的具体内容也告知对方。如线程1负责…

vulnhub靶机coffeeaddicts

下载地址&#xff1a;https://www.vulnhub.com/entry/coffee-addicts-1,699/ 主机发现 目标132 端口扫描 服务扫描 漏洞扫描 只能看web 改hosts 再次访问web 经典被黑 &#xff1f;这算彩蛋吗 还是扫描一下web dirb的结果 不需要看完就知道这个是wp搭建的 gobuster的结果 扫…

网站线上模板建设的优缺点

优点&#xff1a; 1.搭建的时间短&#xff0c;在线建站&#xff0c;只需要登录注册然后选择网站模板创建网站即可管理自己的网站后台&#xff0c;就几步操作就可以实现。 2.网站出错率少&#xff0c;因为有很多用户在使用&#xff0c;前期所报出来的问题就已经一一…

10倍加速!揭秘IDM下载器的惊人秘密!

在数字化时代的浪潮下&#xff0c;互联网下载工具的多样性使得用户在选择时往往感到迷茫。其中&#xff0c;Internet Download Manager&#xff08;IDM&#xff09;作为一款高效的下载管理工具&#xff0c;因其加速下载、支持多线程下载和恢复中断下载等功能而受到广泛关注。然…

gcc编译时报错 fatal error: stdio.h: 没有那个文件或目录

在kylinV10中使用GCC编译代码时遇到如下问题&#xff1a; 首先确认了&#xff0c;自己单词没有拼写错。然后再检查GCC的版本&#xff0c;确实没问题。 没有标准的头文件需要安装build-essential来解决。 需要安装build-essential。 执行以下命令&#xff1a; sudo apt-get in…

MT2093 活动安排

贪心策略&#xff1a; 每次选择结束时间最早的活动 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int n; struct pp {int a, b; } p[N]; bool cmp(pp x, pp y) {return x.b < y.b; } int ans 0;int main() {cin >>…

Edge浏览器 解决Google:but your computer or network may be sending automated queries.

最近使用Edge在Google学术网上下论文很多&#xff0c;可能触发了Google的保护机制&#xff0c;便出现如下报错&#xff1a; 网上找了很多资料&#xff0c;都说要关闭Chrome浏览器QUIC协议 &#xff0c;如解决Google提示&#xff1a;but your computer or network may be sendin…