ESP32开发入门(九):HTTP服务器开发实践
一、HTTP服务器基础
1.1 什么是HTTP服务器?
HTTP服务器是能够处理HTTP请求并返回响应的网络服务程序。在物联网应用中,ESP32可以作为轻量级HTTP服务器,直接接收来自客户端(如浏览器、手机APP)的请求。
1.2 ESP32作为HTTP服务器的特点
-
轻量级:适合资源有限的嵌入式设备
-
低功耗:可作为电池供电设备的控制接口
-
本地网络服务:无需云端即可提供Web服务
-
实时交互:直接控制硬件设备
-
配置简单:无需复杂网络配置
1.3 典型应用场景
-
设备控制面板:通过网页控制LED、继电器等
-
传感器数据展示:实时显示温湿度等数据
-
设备配置界面:WiFi配置、参数设置
-
OTA升级服务:本地固件更新
-
局域网IoT中心:聚合多个设备数据
二、ESP32-S3 HTTP服务器实现 (FreeRTOS + Arduino框架)
#include <WiFi.h>
#include <WebServer.h>
#include <ArduinoJson.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
// WiFi配置
const char* ssid = "Your_WiFi_SSID";
const char* password = "Your_WiFi_Password";
// 创建WebServer实例,监听80端口
WebServer server(80);
// FreeRTOS任务句柄
TaskHandle_t webServerTaskHandle = NULL;
// 传感器数据示例
float temperature = 25.0;
float humidity = 60.0;
// 处理根路径请求
void handleRoot() {String html = "<!DOCTYPE html><html><head>";html += "<title>ESP32 Web Server</title>";html += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";html += "<style>body{font-family:Arial;text-align:center;margin-top:50px;}";html += ".card{display:inline-block;width:150px;border-radius:10px;";html += "box-shadow:0 4px 8px 0 rgba(0,0,0,0.2);padding:20px;margin:10px;}";html += ".button{padding:10px 20px;background-color:#4CAF50;color:white;";html += "border:none;border-radius:5px;text-decoration:none;}</style></head>";html += "<body><h1>ESP32 Web Server</h1>";// 显示传感器数据html += "<div class=\"card\"><h3>Temperature</h3><p>" + String(temperature) + " °C</p></div>";html += "<div class=\"card\"><h3>Humidity</h3><p>" + String(humidity) + " %</p></div>";// 控制按钮html += "<div style=\"margin-top:30px;\">";html += "<a href=\"/led_on\" class=\"button\">LED ON</a> ";html += "<a href=\"/led_off\" class=\"button\">LED OFF</a>";html += "</div></body></html>";server.send(200, "text/html", html);
}
// 处理LED控制请求
void handleLEDOn() {digitalWrite(LED_BUILTIN, HIGH);server.send(200, "text/plain", "LED is ON");
}
void handleLEDOff() {digitalWrite(LED_BUILTIN, LOW);server.send(200, "text/plain", "LED is OFF");
}
// 处理API数据请求
void handleAPI() {StaticJsonDocument<200> jsonDoc;jsonDoc["device"] = "ESP32-S3";jsonDoc["temperature"] = temperature;jsonDoc["humidity"] = humidity;jsonDoc["uptime"] = millis() / 1000;String response;serializeJson(jsonDoc, response);server.send(200, "application/json", response);
}
// 处理未找到的路径
void handleNotFound() {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);
}
// Web服务器任务
void webServerTask(void *pvParameters) {while (1) {server.handleClient();vTaskDelay(10 / portTICK_PERIOD_MS);}
}
void setup() {Serial.begin(115200);pinMode(LED_BUILTIN, OUTPUT);// 连接WiFiWiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");Serial.print("IP address: ");Serial.println(WiFi.localIP());// 配置路由server.on("/", handleRoot);server.on("/led_on", handleLEDOn);server.on("/led_off", handleLEDOff);server.on("/api", handleAPI);server.onNotFound(handleNotFound);// 启动Web服务器server.begin();Serial.println("HTTP server started");// 创建Web服务器任务xTaskCreatePinnedToCore(webServerTask, // 任务函数"WebServer Task", // 任务名称8192, // 堆栈大小NULL, // 参数1, // 优先级&webServerTaskHandle, // 任务句柄1 // 运行在核心1上);
}
void loop() {// 模拟更新传感器数据temperature = 25.0 + (millis() % 200) * 0.1;humidity = 60.0 + (millis() % 150) * 0.1;vTaskDelay(10000 / portTICK_PERIOD_MS); // 每10秒更新一次
}
2.1 代码说明
-
WebServer初始化:
-
使用
WebServer
类创建服务器实例 -
默认监听80端口(HTTP标准端口)
-
-
路由处理:
-
server.on()
注册路径处理函数 -
支持静态页面和API接口
-
处理GET/POST请求
-
-
HTML生成:
-
动态生成响应页面
-
包含CSS内联样式
-
响应式设计适配移动设备
-
-
JSON API:
-
使用ArduinoJson库生成JSON数据
-
返回设备状态和传感器数据
-
-
多任务处理:
-
使用FreeRTOS单独处理Web请求
-
避免阻塞主循环
-
2.2 使用说明
-
修改WiFi配置(
ssid
和password
) -
根据需求添加更多路由处理
-
集成实际传感器读取代码
-
如需HTTPS支持需额外配置
2.3 所需库
-
WiFi.h (Arduino ESP32核心自带)
-
WebServer.h (Arduino ESP32核心自带)
-
ArduinoJson.h (需单独安装)
三、功能验证与测试
3.1 基础功能测试
-
上传代码后,查看串口输出的IP地址
-
在浏览器中输入
http://[ESP32-IP]
-
应显示包含传感器数据和控制按钮的页面
-
点击LED控制按钮测试功能
-
访问
http://[ESP32-IP]/api
测试JSON API
3.2 高级测试场景
3.2.1 使用cURL测试API
# 获取设备信息
curl http://[ESP32-IP]/api
# 控制LED
curl http://[ESP32-IP]/led_on
curl http://[ESP32-IP]/led_off
3.2.2 POST请求测试
添加表单处理路由:
void handleForm() {if (server.method() != HTTP_POST) {server.send(405, "text/plain", "Method Not Allowed");return;}String message = "Received:\n";for (uint8_t i = 0; i < server.args(); i++) {message += server.argName(i) + ": " + server.arg(i) + "\n";}server.send(200, "text/plain", message);
}
// 在setup()中添加
server.on("/submit", HTTP_POST, handleForm);
测试命令:
curl -X POST -d "name=ESP32&value=100" http://[ESP32-IP]/submit
四、实际项目应用
4.1 智能家居控制面板
// 控制多个设备的HTML页面
void handleControlPanel() {String html = "<html><body><h1>Home Control</h1>";html += "<form action='/control' method='post'>";html += "Light: <input type='radio' name='light' value='1'>ON ";html += "<input type='radio' name='light' value='0' checked>OFF<br>";html += "Fan Speed: <input type='range' name='fan' min='0' max='3'><br>";html += "<input type='submit' value='Apply'>";html += "</form></body></html>";server.send(200, "text/html", html);
}
// 处理控制请求
void handleControl() {if (server.hasArg("light")) {int lightState = server.arg("light").toInt();digitalWrite(LIGHT_PIN, lightState);}if (server.hasArg("fan")) {int fanSpeed = server.arg("fan").toInt();analogWrite(FAN_PIN, fanSpeed * 85);}server.send(200, "text/plain", "Settings applied");
}
4.2 OTA升级服务
#include <Update.h>
void handleOTAUpdate() {server.sendHeader("Connection", "close");server.send(200, "text/html", "<form method='POST' action='/do_update' enctype='multipart/form-data'>""<input type='file' name='update'>""<input type='submit' value='Update'>""</form>");
}
void handleDoUpdate() {HTTPUpload& upload = server.upload();if (upload.status == UPLOAD_FILE_START) {Serial.printf("Update: %s\n", upload.filename.c_str());if (!Update.begin(UPDATE_SIZE_UNKNOWN)) {Update.printError(Serial);}} else if (upload.status == UPLOAD_FILE_WRITE) {if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {Update.printError(Serial);}} else if (upload.status == UPLOAD_FILE_END) {if (Update.end(true)) {Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);server.sendHeader("Location", "/");server.send(303);} else {Update.printError(Serial);}}
}
// 在setup()中添加
server.on("/update", handleOTAUpdate);
server.on("/do_update", HTTP_POST, []() {server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");ESP.restart();
}, handleDoUpdate);
五、性能优化与安全
5.1 性能优化技巧
-
使用SPIFFS存储静态文件
#include <SPIFFS.h> void setup() {if(!SPIFFS.begin(true)){Serial.println("SPIFFS Mount Failed");return;}server.serveStatic("/", SPIFFS, "/index.html"); }
-
启用Gzip压缩
server.enableCORS(true); server.enableGzip();
-
连接复用
server.setReusePort(true);
5.2 安全增强措施
-
基本认证
server.requireAuthentication("admin", "password");
-
HTTPS支持
#include <HTTPSServer.hpp> using namespace httpsserver; // 需要加载证书和私钥 HTTPSServer secureServer = HTTPSServer(443);
-
请求限制
void handleRequest() {static unsigned long lastRequest = 0;if (millis() - lastRequest < 1000) {server.send(429, "text/plain", "Too Many Requests");return;}lastRequest = millis();// 正常处理 }
六、扩展功能
6.1 WebSocket实时通信
#include <WebSocketsServer.h>
WebSocketsServer webSocket = WebSocketsServer(81);
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {switch(type) {case WStype_DISCONNECTED:Serial.printf("[%u] Disconnected!\n", num);break;case WStype_CONNECTED:Serial.printf("[%u] Connected!\n", num);break;case WStype_TEXT:Serial.printf("[%u] Received: %s\n", num, payload);webSocket.broadcastTXT(payload, length);break;}
}
void setup() {webSocket.begin();webSocket.onEvent(webSocketEvent);
}
6.2 mDNS服务发现
#include <ESPmDNS.h>
void setup() {if (MDNS.begin("esp32")) {Serial.println("mDNS responder started");MDNS.addService("http", "tcp", 80);}
}
七、总结与扩展学习
7.1 学习路径
-
进阶Web开发
-
学习使用SPIFFS文件系统
-
实现更复杂的前端界面
-
添加WebSocket实时通信
-
-
安全增强
-
实现HTTPS安全连接
-
添加用户认证系统
-
防止CSRF攻击
-
-
性能优化
-
学习异步Web服务器
-
实现缓存策略
-
优化内存使用
-
7.2 相关资源推荐
-
ESP32开发入门(七):HTTP客户端开发实践
-
ESP32官方WebServer示例
-
ArduinoJson文档
-
ESP32 HTTPS服务器指南
相关文章:
ESP32开发入门(九):HTTP服务器开发实践
一、HTTP服务器基础 1.1 什么是HTTP服务器? HTTP服务器是能够处理HTTP请求并返回响应的网络服务程序。在物联网应用中,ESP32可以作为轻量级HTTP服务器,直接接收来自客户端(如浏览器、手机APP)的请求。 1.2 ESP32作为HTTP服务器的特点 轻量…...
谱聚类,大模型
使用谱聚类将相似度矩阵分为2类的步骤如下: 1. **构建相似度矩阵**:提供的1717矩阵已满足对称性且对角线为1。 2. **计算度矩阵**:对每一行求和得到各节点的度,形成对角矩阵。 3. **计算归一化拉普拉斯矩阵**:采用对…...
K8S Ingress、IngressController 快速开始
假设有如下三个节点的 K8S 集群: k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、理论介绍 1)什么是 Ingress 定义:Ingress 是 Kubernetes 中的一种资源对象,它定义了外部访问集群内…...
AI边缘网关_5G/4G边缘计算网关厂家_计讯物联
AI边缘网关是边缘计算与人工智能技术深度融合的产物,作为连接终端设备与云端的桥梁,在网络边缘实现数据采集、实时分析、智能决策和协议转换,显著降低了数据传输延迟,节省了云端资源,并提升了隐私保护能力,…...
【Vue】Composables 和 Utils 区别
1. 核心功能与状态管理 • Composables 用于封装有状态的逻辑,通常结合 Vue 的响应式 API(如 ref、reactive)和生命周期钩子(如 onMounted),可管理组件内部的状态和副作用。例如,封装鼠标位置…...
右值和移动
值类别(value categories) lvalue 通常可以放在等号左边的表达式, 左值 例子 变量,函数或数据成员的名字返回左值引用的表达式,如x, x 1, cout << ’ . x 1 和 x返回的都是对x的int&. x则返回的是int字符串字面量如 “hello world” rva…...
如何在 Bash 中使用 =~ 操作符 ?
在 Bash 脚本世界中,有各种操作符可供我们使用,使我们能够操作、比较和测试数据。其中一个操作符是 ~ 操作符。这个操作符经常被忽视,但功能非常强大,它为我们提供了一种使用正则表达式匹配字符串模式的方法。 ~ 操作符语法 语法…...
消息队列RocketMQ-docker部署保姆级教程(从0到1)(2)
目录 引言 1. 准备工作 1.1 准备虚拟机 1.2 将虚拟机的ip设置为静态ip地址 1.3 什么是nat网络 1.4 测试网络 2. 准备docker环境 2.1 卸载旧docker(如果有) 2.2 安装依赖包 2.3 添加 Docker 官方仓库(国内推荐使用阿里云镜像…...
《算法导论(第4版)》阅读笔记:p32-p38
《算法导论(第4版)》学习第 12 天,p32-p38 总结,总计 7 页。 一、技术总结 1.analyzing algorithms (1)running time(运行时间) worst-case running time, average-case running time,best-case running-time。 2.order of growth/rate …...
《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match
《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match 引言 Python 3.10 引入了全新的 match 语句,它不仅是一个“类 switch”的语法结构,更是一种**结构化模式匹配(structural pattern matching)…...
【氮化镓】横向GaN 器件注入隔离区的电场相关载流子传输特性
文章的关键结论和发现如下: 在GaN横向功率器件中,注入隔离区的载流子传输具有明显的电场依赖性,且其泄漏电流和击穿特性主要由注入的GaN区域决定,与缓冲层和UID GaN层的性质关系不大。 载流子传输机制随电场强度变化呈现三个不同区域:低电场下为欧姆传导,符合变程跃迁(V…...
电子电器架构 --- 借力第五代架构,驱动汽车产业创新引擎
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界…...
【ROS2】通信部署概述(以话题(Topic)通信为例)
写在前面 很多内容参考了赵虚左老师的ROS2教程 概念说明 工作空间:相当于一个项目,比如一台机械臂,或者一个机器人 功能包:相当于一个项目中的一台设备,如电机、雷达、相机等 大概构建流程 以话题通信机制为例 创…...
1.8 梯度
(知识体系演进逻辑树) 一元导数(1.5) │ ├─→ 多元偏导数(1.6核心突破) │ │ │ └─解决:多变量耦合时的单变量影响分析 │ │ │ ├─几何:坐标轴切片切线斜率…...
Pycharm中No Conda enviroment selected
最近在学习Anaconda,换了台新电脑重新安装PyCharm和Anaconda后,打算创建环境,创建后发现找不到刚刚在Anaconda中创建的环境,经过不断摸索后找到解决方案 将选择的路径从Anaconda目录下的python.exe换成Anaconda\Library\bin下的c…...
continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手
一、软件介绍 文末提供程序和源码下载 Continue 使开发人员能够通过我们的开源 VS Code 和 JetBrains 扩展以及模型、规则、提示、文档和其他构建块的中心创建、共享和使用自定义 AI 代码助手。 二、功能 Chat 聊天 Chat makes it easy to ask for help from an LLM without…...
关于读写锁的一些理解
同一线程的两种情况: 读读: public static void main(String[] args) throws InterruptedException {ReentrantReadWriteLock lock new ReentrantReadWriteLock();Lock readLock lock.readLock();Lock writeLock lock.writeLock();readLock.lock();S…...
Ubuntu网络部署LNMP环境
目录 1. 安装nginx 2. 安装mysql 3. 安装PHP 4. 配置nginx,修改默认配置文件 5. 配置PHP 1. 安装nginx apt install -y nginx#开启 systemctl start nginx#浏览器访问页面 192.168.180.200:80#nginx网页html存放路径 ls /usr/share/nginx/#查看nginx版本号 ng…...
榜单按行显示
手机芯片_SoC天梯榜_安兔兔跑分排行_安兔兔 我只关注 骁龙7Gen1,天玑7300,骁龙6Gen1,天玑900 除了 50,64,75,86 行都隐藏。 var uls document.getElementsByClassName(newrank-c); var s 50,64,75,86; var sa s.split(,); for (var i0…...
DVWA在线靶场-xss部分
目录 1. xxs(dom) 1.1 low 1.2 medium 1.3 high 1.4 impossible 2. xss(reflected) 反射型 2.1 low 2.2 medium 2.3 high 2.4 impossible 3. xss(stored)存储型 --留言板 3.1 low 3.2 medium 3.3 high 3.…...
将本地文件上传到云服务器上
使用 SCP 命令(最常用) # 基本语法 scp [本地文件路径] [用户名][服务器IP]:[目标路径]# 示例:上传单个文件 scp /path/to/local/file.txt root192.168.1.100:/path/to/remote/# 上传整个目录 scp -r /path/to/local/directory root192.168.…...
关系实验课--笛卡尔积
import sympy as sym a, b sym.symbols(a b) # 定义符号 a 和 b A sym.FiniteSet(a,b) # 创建包含 a 和 b 的有限集合 B sym.FiniteSet(1,2,3,4) AxB sym.cartes(A,B) # 返回迭代器。迭代器不会直接显示内容,而是需要手动遍历或转换为其他数据类型(如…...
从0开始学习大模型--Day07--大模型的核心知识点
AI常见名词 知识库 分为传统知识库与AI知识库,前者是单纯的存储各个领域的知识,后者则是与LLM结合,使AI系统能够更好地利用本地知识来响应查询和执行任务。比如,假如公司新来了个维修人员,他可以直接调用AI知识库去学…...
无线定位之 二 SX1302 网关源码 thread_down 线程详解
前言 笔者计划通过无线定位系列文章、系统的描述 TDOA 无线定位和混合定位相关技术知识点, 并以实践来验证此定位系统精度。 笔者从实践出发、本篇直接走读无线定位系统关键节点、网关 SX1302 源码框架,并在源码走读过程 中、着重分析与无线定位相关的PPS时间的来龙去脉、并在…...
MINIX 1.0 文件系统的实现(C/C++实现)
MINIX 1.0 文件系统简介: Linux 0.11操作系统启动时需要加载一个根目录,此根目录使用的是MINIX 1.0文件系统,其保存在硬盘的第一个分区中。Linux 0.11操作系统将硬盘上的两个连续的物理扇区(大小为512字节)做为一个物理…...
Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解
Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解 前言一、引入依赖二、配置 Elasticsearch三、创建模型类(Entity)四、使用 ElasticsearchOperations 进行 CRUD 操作1. 保存数据(Create)2. 获取数据&am…...
keil 解决 Error: CreateProcess failed, Command: ‘XXX\ARM\ARMCC\bin\fromelf.exe
参考文章链接: https://blog.csdn.net/qq_39172792/article/details/145499880 自己的: D:\Program Files\keil529\Keil_v5\ARM\ARMCLANG\bin\fromelf.exe --bin -o …/…/firmware_bin/L.bin ./Object/L.axf...
针对面试-mysql篇
1.如何定位慢查询? 1.1.介绍一下当时产生问题的场景(我们当时的接口测试的时候非常的慢,压测的结果大概5秒钟)),可以监测出哪个接口,最终因为是sql的问题 1.2.我们系统中当时采用了运维工具(Skywalkin就是2秒,一旦sql执行超过2秒…...
HNUST软件测试B考前最终复习
最近根据各个专业整理的考试重点,这两天总结出了以下内容,并附上了我自己复习的一些记忆小技巧,供大家参考,大家就图一乐。希望对你们的复习有所帮助,预祝大家考试顺利,加油! 本次考试和去年的题…...
网络编程epoll和udp
# epoll模型核心要点## 1. epoll核心概念### 1.1 高效IO多路复用- 监视列表与激活列表分离- 内核使用红黑树存储描述符- 边缘触发模式(EPOLLET)支持### 1.2 事件触发机制- **水平触发(LT)**:- 默认模式,类似select/poll- 数据未读完持续触发事件- **边缘…...
【速写】use_cache参数与decode再探讨
序言 纳什最近指出一个小细节,比如在Qwen系列模型中,两个special token: eos_token(<|im_end|>): 151645(im_end 中的 im 指的是 instruct message)pad_token(<|endoftext|>): 151643。 这是很有趣的事…...
智能网联汽车“内外协同、虚实共生”的通信生态
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界…...
《Python星球日记》 第64天:NLP 概述与文本预处理
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、NLP 简介1. 什么是自然语言处理?NLP 的应用场景: 2.…...
Java中堆栈
文章目录 Java中堆栈1. 栈(Stack)特点示例 2. 堆(Heap)特点示例 3. 核心区别4. 常见问题5. 内存可视化示例内存布局示意图: 总结 Java中堆栈 在 Java 中,“堆栈” 通常指的是堆(Heap࿰…...
模块化PCB设计中联排半孔的应用
随着电子产品的快速发展,高密度、多功能和小型化已成为未来的趋势。电路板上的元件几何指数在增加,而PCB尺寸却越来越小,因此需要与支撑板做配合。如果用助焊剂将圆孔焊接到母板上,由于圆孔体积较大,会产生冷焊&#x…...
xss-lab靶场4-7关基础详解
前言: 仅作为练习,复盘 推荐html在线运行平台,弹窗标签可以在平台运行,看语句是否能正常弹窗 HTML/CSS/Javascript在线代码运行工具 | 菜鸟教程 内容: 第四关 打开一看,输入<script>alert(1)&l…...
【Linux】进程状态、优先级、切换和调度
目录 一、传统操作系统进程状态 (一)什么是状态 (二)运行状态 (三)阻塞状态 (四)挂起状态 二、Linux进程状态 (一)进程状态 (二ÿ…...
软件测试基础知识详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、黑盒测试、白盒测试、灰盒测试 1.1 黑盒测试 黑盒测试 又叫 功能测试、数据驱动测试 或 基于需求规格说明书的功能测试。该类测试注重于测试软件的功能性需…...
【WordPress博客AI内容辅助生成/优化工具箱插件下载无标题】
主要功能 AI内容生成/优化 使用AI模型生成或优化段落内容 支持撤销和模型切换 AI自动评论 智能分析文章内容生成相关评论 可配置的评论数量和随机调度 生成评论回复的概率(评论数>10时) 可能以特定概率包含表情符号 AI标签提取 从文章内容自动提取相关标签 新标签可自动生…...
js 画立方体软件开发日记2
我不懂但我大为震惊 重开几次又回去了 这说明之前的操作无效 搞了个调试当前文件 导出模块有问题,跑显示没事 启动太慢,重构吧 ----------------------------------------------- 把那些鬼相机投影代码删了就有4s了 按钮全删了,还是卡&…...
element plus el-table多选框跨页多选保留
一、基础多选配置 通过 type“selection” 开启多选列,并绑定 selection-change 事件获取选中数据 <template><el-table :data"tableData" selection-change"handleSelectionChange"><el-table-column type"selection&qu…...
智能家居“心脏“升级战:GD25Q127CSIG国产芯片如何重构家庭物联生态
在智能家居设备出货量突破10亿台的2023年,家庭网关正经历着前所未有的技术革新。作为连接云端与终端设备的中枢神经,智能网关的存储芯片选择直接决定着整个智能生态系统的运行效率。在这场技术升级浪潮中,兆易创新GD25Q127CSIG串行闪存芯片主…...
智能枪弹柜管理系统|智能枪弹柜管理系统LK-QDG-Q20型
是一种用于存放枪支弹药的智能化设备,主要应用于涉枪单位,以下将从其功能特点、系统组成、优势等维度展开介绍: 功能特点 身份识别功能:采用多种生物识别技术,如指纹识别、指静脉识别、虹膜识别、人脸识别、声纹识别等…...
bootstrap table 添加跳转到指定页的功能(仅自己可见)
Table回调方法中,添加input和button至Table下方(Table页渲染结束后执行) (input用来输入页码,button执行跳转) function ajaxRequestExtends(data){$(".page-list").append("<input idp…...
rufus+Ubuntu 18.04 镜像
参考:https://blog.csdn.net/Li060703/article/details/106075597 Rufus 官网: https://rufus.ie/zh/ 步骤 安装U盘做好后插在主板io的USB口上,启动阶段用F2或DEL打断进bios,bios里面指定从安装U盘来启动,里面的B…...
基于事件驱动和策略模式的差异化处理方案
一、支付成功后事件驱动 1、支付成功事件 /*** 支付成功事件** author ronshi* date 2025/5/12 14:40*/ Getter Setter public class PaymentSuccessEvent extends ApplicationEvent {private static final long serialVersionUID 1L;private ProductOrderDO productOrderDO;…...
【运维】MacOS蓝牙故障排查与修复指南
在日常使用macOS系统过程中,蓝牙连接问题时有发生。无论是无法连接设备、连接不稳定还是蓝牙功能完全失效,这些问题都会严重影响我们的工作效率。本文将分享一些实用的排查方法和修复技巧,帮助你解决macOS系统上的蓝牙故障。 问题症状 常见…...
linux小主机搭建自己的nas(三)docker安装nextcloud
小主机用的TF卡,不可能把nas的数据放在卡上,所以我买了个2T的移动硬盘 1.挂载移动硬盘 查找硬盘 lsblk # 或 fdisk -l 创建挂载点 sudo mkdir -p alon_ssd 查看硬盘文件系统,文件系统类型一会儿设置挂载用 sudo blkid /dev/sda1 开机自动挂载&…...
Go语言:json 作用和语法
在 Go 语言中,JSON 字段(也称为 JSON Tag)是附加在结构体字段上的元数据,用于控制该字段在 JSON 编码(序列化)和解码(反序列化) 时的行为。它的语法是: type StructName…...
mageia系统详解
Mageia 是一个由社区驱动的 Linux 发行版,源自 Mandriva Linux(原 Mandrake Linux),以用户友好性和强大的系统工具著称。它继承了 Mandriva 的易用性传统,同时专注于稳定性和社区协作。以下从历史背景、技术架构、系统…...