当前位置: 首页 > news >正文

ESP32-Web-Server编程-HTML 基础

ESP32-Web-Server编程-HTML 基础

概述

HTML(HyperText Markup Language) 是用来描述网页的一种语言。其相关内容存储在前端代码的 .html 文件中。

浏览器web 服务器请求网页时,一个 HTML 文件被发送给浏览器,浏览器解释该文件的内容,呈现具体的图表、文字给用户。

HTML 文档包含了HTML 标签(包含标签和元素,其实他们是一样的)文本内容,其中

  • HTML 标签是由尖括号包围的关键词,HTML 标签通常是成对出现的,基本格式是 <标签>内容</标签>,示例:

    <h1>这是一个一级标题</h1>
    <h2>这是一个二级标题</h2>
    <p>这是一个段落。</p>
    <a href="https://www.iot-wang.com">这是一个链接</a>
    
  • 文本内容,标签内的显示字符。

  • 还有一些格式化标签(也称为元素)的定义以及注释风格:

    <br>	换行
    <hr>    在 HTML 页面中创建水平线
    <!-- 这是一个注释 -->
    <b> 与<i> 定义粗体或斜体文本
    

我们暂时可以只了解这些,用到了新的内容是我们将进一步介绍它,学以致用,边学边用一直是我们的目标。

一个 HTML 的基础结构组成

在这里插入图片描述

示例中的 HTML 的基本组成如上所示。

  • 声明为 HTML5 文档
  • 元素是 HTML 页面的根元素
  • 元素包含了文档的元(meta)数据,如 定义网页编码格式为 utf-8
  • 元素描述了文档的标题
  • 元素包含了可见的页面内容
  • 元素定义一个大标题

  • 元素定义一个段落

**注意:**在浏览器的页面上使用键盘上的 F12 按键开启调试模式,就可以看到该网页的组成标签。

查看完整网页声明类型 DOCTYPE 参考手册。

**注意:**对于中文网页需要使用 声明编码,否则会出现乱码。有些浏览器(如 360 浏览器)会设置 GBK 为默认编码,则你需要设置为 。

更多HTML 的学习,你可以在网络上收集资料,或者参考 HTML 教程 | 菜鸟教程 (runoob.com)。

需求及功能解析

本节演示如何在 ESP32 上使用 wifi,并使用 html 文件,编译使用步骤参考:

示例在网页上的显示:

在这里插入图片描述

本系列博客并不是一门专门介绍 HTML 编程的课程,我们只需了解常用的技术就可以了。在 components/htmls 目录中还有一些 HTML 文件,你可以将其拷贝到 components/fs_image 中并重命名为 index.html,然后重新编译该工程,以查看不同 HTML 文件的效果。下面简单介绍各个 HTML 文件涉及的内容。

示例解析

目录结构

├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│   └── main.c                 User application
├── components
│   └── fs_image└── index.html└── ...
|	└── url_handlers└── url_handlers.c└── ...
└── README.md                  This is the file you are currently reading
  • 目录结构主要包含主目录 main,以及组件目录 components.

  • 其中组件目录components中包含了用于存储网页文件的 fs_image 目录(即前述前端文件),以及用于记录 ESP32 上接收来自服务器的请求,并作出响应的 url_handlers 目录(即后端文件)。如前所述,浏览器可以通过 URL 请求服务器端的资源(包括数据和文件),每个 URL 到来时都可以设计一个函数,来决定如何响应该 URL 请求,这便是 url_handlers 要完成的功能。

建立前后端代码

  1. 为了保存 html 文件以及图片文件到 ESP32 上,url_handlers 目录的 CMakeLists.txt 使用内嵌数据的方式将 fs_image目录的 index.html 和 favicon.ico 文件保存在 ESP32 中:(此外前端代码)

    idf_component_register(SRCS "url_handlers.c"INCLUDE_DIRS "include"PRIV_REQUIRES esp_http_serverEMBED_FILES "../fs_image/favicon.ico" "../fs_image/index.html")
    
  2. 为了在打开网页时显示 index.html 中的内容,在 url_handlers.c 中实现了 一个处理函数 index_html_get_handler()。这部分是后端代码。

    /* Handler to redirect incoming GET request for /index.html to /* This can be overridden by uploading file with same name */
    static esp_err_t index_html_get_handler(httpd_req_t *req)
    {extern const char html_start[] asm("_binary_index_html_start");extern const char html_end[]   asm("_binary_index_html_end");const size_t html_size = (html_end - html_start);httpd_resp_set_type(req, "text/html");/* Add file upload form and script which on execution sends a POST request to /upload */httpd_resp_send_chunk(req, (const char*) html_start, html_size);/* Respond with an empty chunk to signal HTTP response completion */return httpd_resp_send_chunk(req, NULL, 0);
    }
    
  3. 在实现了 html 文件以及 对应的 handles 后,可以在 main.c 中注册对应的 handler:

    static httpd_handle_t start_webserver(void)
    {httpd_handle_t server = NULL;httpd_config_t config = HTTPD_DEFAULT_CONFIG();config.lru_purge_enable = true;// Start the httpd serverESP_LOGI(TAG, "Starting server on port: '%d'", config.server_port);if (httpd_start(&server, &config) == ESP_OK) {// Set URI handlersESP_LOGI(TAG, "Registering URI handlers");for (int i = 0; i < sizeof(httpd_uri_array) / sizeof(httpd_uri_t); i++) {if (httpd_register_uri_handler(server, &httpd_uri_array[i]) != ESP_OK) {ESP_LOGE(TAG, "httpd register uri_array[%d] fail", i);}}ESP_LOGI(TAG, "Success starting server!");return server;}ESP_LOGI(TAG, "Error starting server!");return NULL;
    }
    

如此,当打开网页时,浏览器会自动请求名为 index.html 的文件,并显示其中的内容。

编译并烧录固件到设备中

1)在工程目录,打开配置菜单

idf.py menuconfig

主要是配置 wifi 连接的名称和密码:

在这里插入图片描述

2)编译烧录固件到设备中

idf.py -p PORT build flash monitor

(Replace PORT with the name of the serial port to use.)

(To exit the serial monitor, type Ctrl-].)

如果你是新手,请参考 Getting Started Guide 搭建编译环境。

3)网页显示

设备烧录固件后,启动该设备,从 log 中查看设备的 IP地址:

I (3288) app_wifi: got ip:192.168.47.100
I (3288) esp_netif_handlers: sta ip: 192.168.47.100, mask: 255.255.255.0, gw: 192.168.47.1
I (3288) example_main: Starting server on port: '80'
I (3298) example_main: Registering URI handlers
I (3298) example_main: Success starting server!

这里假设设备 IP 地址是 192.168.47.100.

让手机或者电脑与 ESP32 连接同一个路由器,然后打开手机或者电脑上电浏览器,输入上述IP地址,即可打开网页:

在这里插入图片描述

上述示例网页即是本例程 fs_images 目录的 index.html 文件在该浏览器中所程序的样子。

讨论

1)输入网址后,浏览器会自动请求 favicon.ico(即上述网页中第一行显示的图标)。

默认情况下,当请求一个网站的 “/” 目录内容时,会默认打开该目录的 index.html 文件。

同样的,默认情况下,浏览器会自动请求 "/"目录下的 favicon.ico 文件,用作网址栏的一个标识图像。

2)如何设计 index.html 文件中的内容,使之在网页上呈现合适的内容?

这正是本系列博客主要介绍的内容。以试验促进理解,在测试实践中学习,敬请参考后续章节。

总结

1)本节主要是介绍 HTML 的基础知识。HTML 描述了一个网页中的基本内容;
2)HTML 文档包含了HTML 标签(包含标签和元素,其实他们是一样的)文本内容。其中 HTML 标签是由尖括号包围的关键词,HTML 标签通常是成对出现的。
3)在 ESP32 Web 编程中,通过在后端代码中建立一个发送 HTML 内容的 handler 函数,以及在前端代码中实现 HTML 文件来定义网页上的内容。

资源链接

1)ESP32-Web-Server ESP-IDF系列博客介绍
2)对应示例的 code 链接 (点击直达代码仓库)

3)下一篇:ESP32-Web-Server编程-CSS 基础1

(码字不易感谢点赞或收藏)

相关文章:

ESP32-Web-Server编程-HTML 基础

ESP32-Web-Server编程-HTML 基础 概述 HTML(HyperText Markup Language) 是用来描述网页的一种语言。其相关内容存储在前端代码的 .html 文件中。 当浏览器向 web 服务器请求网页时&#xff0c;一个 HTML 文件被发送给浏览器&#xff0c;浏览器解释该文件的内容&#xff0c;…...

【docker】docker安装与优化

目录 一、安装Docker 1、关闭防火墙 2、安装依赖包 3、设置阿里云镜像源 4、安装Docker-CE社区版并设置为开机自启动 5、查看Docker信息 二、设置镜像加速 1、申请加速地址 2、实现加速操作 三、网络优化 1、如何网络优化 2、具体操作 四、docker-server端配置文件…...

https到底把什么加密了?

首先直接说结论&#xff0c; https安全通信模式&#xff0c;是使用TLS加密传输所有的http协议。再重复一遍&#xff0c;是所有&#xff01; 通常将TLS加密传输http这个通信过程称为https&#xff0c;如果使用协议封装的逻辑结构来表达就是&#xff1a; IP TCP TLS 【 HTTP 】…...

python爬虫防乱码方案

python爬虫防乱码方案 一、chardet库 ​ 自动检测编码&#xff1a;使用 Python 库 chardet 可以自动检测文本的编码&#xff0c;然后使用检测到的编码来解码文本。你可以尝试使用 chardet 库来检测编码&#xff0c;然后解码网页内容。 案例 import requests import chardet…...

Java 语言的入门级教程有哪些?

1、Java SE 1.1、Java基础 基础概念/语法&#xff1a;面向对象&#xff08;继承、封装、多态&#xff09;基础、包、类、接口、方法、对象、属性、第一个 Java 程序。 数据类型&#xff1a; 1&#xff09;基本数据类型8种&#xff1a;byte、short、int、long、float、doubl…...

STM32算法

1.通过编码器对返回的错误速度进行滤波 #define MOTOR_BUFF_CIRCLE_SIZE 4 #define STATIC_ENCODER_VALUE 6int32_t LMotor_Encoder_buff[MOTOR_BUFF_CIRCLE_SIZE] {0}; uint8_t LEindex 0; int32_t LMotor_Encoder_last 0; int32_t L_Encoder_change 0;int32_t RMotor_…...

论文阅读 (106):Decoupling maxlogit for out-of-distribution detection (2023 CVPR)

文章目录 1 概述1.1 要点1.2 代码1.3 引用 2 预备知识3 方法3.1 MaxLogit3.2 改进MaxCosine和MaxNorm3.3 DML 1 概述 1.1 要点 题目&#xff1a;解耦最大logit分布外检测 (Decoupling maxlogit for out-of-distribution detection) 方法&#xff1a; 提出了一种心机基于log…...

毅速丨3D打印随形水路为何受到模具制造追捧

在模具制造行业中&#xff0c;随形水路镶件正逐渐成为一种革命性的技术&#xff0c;其提高冷却效率、优化产品设计、降低成本等优点&#xff0c;为模具制造带来了巨大的创新价值。 随形水路是一种根据产品形状定制的冷却水路&#xff0c;其镶件可以均匀地分布在模具的表面或内部…...

【LeetCode:1670. 设计前中后队列 | 数据结构设计】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

OpenCV将两张图片拼接成一张图片

OpenCV将两张图片拼接成一张图片 示例代码1示例代码2代码示例3示例代码4 可以用opencv或者numpy的拼接函数&#xff0c;直接将两张图拼接到一起&#xff0c;很简单方便&#xff0c;参考代码2&#xff0c;推荐此方式。新建图片&#xff0c;将两张图片的像素值填充到新图片对应位…...

4G5G智能执法记录仪在保险公司车辆保险远程定损中的应用

4G智能执法记录仪&#xff1a;汽车保险定损的**利器 随着科技的不断进步&#xff0c;越来越多的智能设备应用到日常生活中。而在车辆保险定损领域&#xff0c;4G智能执法记录仪的出现无疑是一大**。它不仅可以实现远程定损&#xff0c;还能实现可视化操作、打印保单以及数据融…...

二十七、RestClient查询文档

目录 一、MatchALL查询 二、Match查询 三、bool查询 四、排序和分页 五、高亮 一、MatchALL查询 Testvoid testMatchAll() throws IOException { // 准备Request对象SearchRequest request new SearchRequest("hotel"); // 准备DSLrequest.source().q…...

百度云Ubuntu22.04

1. download 百度云 2. sudo dpkg -i ***.deb...

解除word文档限制,快速轻松,seo优化。

文章解密、找回和去除word文档密码的安全、简单、高效方法 具体步骤如下&#xff1a;1. 百度搜索【密码帝官网】&#xff0c;2. 点击“立即开始”在用户中心上传需要解密的文件&#xff0c;稍等片刻即可找回密码。这是最简单的办法&#xff0c;无需下载软件&#xff0c;适用于手…...

【音频】Glitch相关

背景 因为要判断低码率下&#xff0c;MOS分值为啥下降&#xff0c;从几个方面调查。其中提及到Glitch、缓冲buffer等&#xff0c;慢慢积累名次概念以及经验。 “Glitch” 在音频领域通常指的是非预期的、短暂的干扰或失真。这些问题可能由于信号传输错误、设备问题、软件错误等…...

【开源】基于Vue+SpringBoot的大学生相亲网站

项目编号&#xff1a; S 048 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S048&#xff0c;文末获取源码。} 项目编号&#xff1a;S048&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询会员4…...

5种主流API网关技术选型,yyds!

API网关是微服务项目的重要组成部分&#xff0c;今天来聊聊API网关的技术选型&#xff0c;有理论&#xff0c;有实战。 不 BB&#xff0c;上文章目录&#xff1a; 1 API网关基础 1.1 什么是API网关 API网关是一个服务器&#xff0c;是系统的唯一入口。 从面向对象设计的角度…...

请求pdf文件流并进行预览

最近做了一个需求就是预览pdf等文件&#xff0c;不过后端返回的是一个文件流&#xff0c;需要前端做一定地处理才行。 我们来看一下具体的实现方式。预览pdf的插件使用的是pdf.js&#xff0c;具体请看这篇文章&#xff1a;pdf.js插件怎么控制工具栏的显示与隐藏 1、请求pdf文件…...

【Unity程序技巧】加入缓存池存储地图资源,节省资源,避免多次CG

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

虹科Pico汽车示波器 | 汽车免拆检修 | 2016款东风悦达起亚K5车发动机怠速抖动严重、加速无力

一、故障现象 一辆2016款东风悦达起亚K5车&#xff0c;搭载G4FJ发动机&#xff0c;累计行驶里程约为8.2万km。该车发动机怠速抖动严重、加速无力&#xff0c;同时发动机故障灯异常点亮&#xff0c;为此在其他维修厂更换了所有点火线圈和火花塞&#xff0c;故障依旧&#xff0c;…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...