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

RemoteSerial:ESP32/ESP8266 Web串口调试库详解

1. RemoteSerial 库深度解析面向 ESP8266/ESP32 的嵌入式 Web 串口监控系统RemoteSerial 是一个专为 ESP8266 和 ESP32 平台设计的轻量级、高实时性的 Web 串口监控库。它并非简单地将Serial对象映射到网页而是构建了一套完整的异步 WebSocket 通信栈实现了从 MCU 固件层到浏览器前端的端到端双向数据流。其核心价值在于在不增加额外硬件调试器的前提下将传统串口调试能力无缝迁移至任意联网设备的浏览器中。对于资源受限的物联网节点、远程部署的传感器网关或需要多工程师协同调试的产线设备RemoteSerial 提供了远超传统 USB-Serial 转接器的工程灵活性。1.1 系统架构与通信模型RemoteSerial 的架构严格遵循分层设计原则各层职责清晰、解耦充分应用层Application Layer提供与 ArduinoSerial兼容的 API 接口print()、println()、printf()开发者无需修改现有日志代码即可接入传输层Transport Layer基于AsyncTCP构建非阻塞 TCP 连接避免传统WiFiClient同步阻塞导致的看门狗复位风险协议层Protocol Layer采用标准 WebSocket 协议RFC 6455实现全双工、低延迟通信服务端握手由ESPAsyncWebServer自动完成呈现层Presentation Layer前端控制台使用原生 JavaScript 实现支持 ANSI Escape Code 解析可渲染彩色日志、光标定位、清屏等终端语义。整个数据流向为MCU 固件调用RemoteSerial.print()→ 数据经环形缓冲区暂存 → 异步推送至所有已连接 WebSocket 客户端 → 浏览器 JavaScript 解析并渲染至pre元素。反向控制路径同样存在用户在 Web 控制台输入命令 → WebSocket 消息触发 MCU 端回调函数 → 执行自定义业务逻辑如重启模块、切换模式、读取寄存器。该架构的关键工程决策在于完全规避 HTTP 轮询Polling。轮询方案在高频率日志场景下会产生大量无效请求显著增加 ESP 设备的 CPU 占用与内存碎片。而 WebSocket 建立后仅维持单个长连接消息投递延迟稳定在 10–30ms 量级实测 ESP32240MHz Chrome满足绝大多数嵌入式调试的实时性要求。1.2 核心依赖库选型分析RemoteSerial 的稳定性高度依赖底层异步网络栈其依赖关系经过严格验证依赖库ESP8266 版本ESP32 版本关键特性工程注意事项Arduino CoreESP8266 Core ≥ 3.0.0ESP32 Core ≥ 2.0.0提供WiFi、AsyncTCP基础接口必须启用lwIP Variant: v2 Lower MemoryESP32以降低 RAM 占用AsyncTCPESPAsyncTCPAsyncTCP跨平台异步 TCP 抽象层ESP8266 版本需与 Core 版本严格匹配否则出现tcp_pcb内存越界ESPAsyncWebServerESPAsyncWebServerESPAsyncWebServer异步 HTTP/WebSocket 服务器必须在AsyncWebServer初始化前调用WiFi.mode(WIFI_AP_STA)否则 WebSocket 握手失败特别强调ESPAsyncWebServer的onWsEvent()回调函数是 RemoteSerial 的心脏。该回调在 WebSocket 连接建立、消息到达、连接关闭时被触发。RemoteSerial 在此回调中完成三类关键操作连接建立时将客户端句柄加入std::vectorAsyncWebSocketClient*管理池消息到达时解析text类型帧调用用户注册的onCommand()回调连接关闭时从管理池中安全移除句柄防止悬空指针。1.3 安装与环境配置实践指南Arduino IDE 集成步骤推荐方式安装核心包ESP8266通过 Boards Manager 安装esp8266 by ESP8266 Community≥ 3.0.0ESP32安装esp32 by Espressif Systems≥ 2.0.0注低于此版本将因缺少AsyncTCP支持而编译失败安装依赖库使用 Library Manager 依次安装ESPAsyncTCPESP8266 或AsyncTCPESP32ESPAsyncWebServerRemoteSerial验证安装完整性编译以下最小测试代码确认无undefined reference to AsyncWebSocket::AsyncWebSocket错误#include Arduino.h #include ESPAsyncWebServer.h #include RemoteSerial.h AsyncWebServer server(80); RemoteSerial remoteSerial; void setup() { Serial.begin(115200); WiFi.begin(SSID, PASS); while (WiFi.status() ! WL_CONNECTED) delay(500); remoteSerial.begin(server, /debug); // 指定路径为 /debug server.begin(); } void loop() { remoteSerial.println(Hello from RemoteSerial!); delay(2000); }手动安装适用于 CI/CD 或旧版 IDE下载RemoteSerialGitHub Release ZIP解压至Arduino/libraries/目录Windows或Arduino/libraries/Linux/macOS关键动作进入libraries/RemoteSerial/src/目录编辑RemoteSerial.h取消注释对应平台宏// For ESP32 platforms, uncomment next line: #define REMOTESERIAL_ESP32 // For ESP8266 platforms, uncomment next line: // #define REMOTESERIAL_ESP8266此宏决定条件编译分支影响WiFiClient类型选择与内存分配策略。2. API 详解与工程化使用范式RemoteSerial 的 API 设计刻意贴近 ArduinoSerial但其内部实现机制截然不同。理解每个函数背后的资源消耗与线程模型是避免系统崩溃的关键。2.1 核心接口函数解析begin(AsyncWebServer server, const char* path /remoteserial)参数说明server已初始化的AsyncWebServer实例引用必须为引用不可传值pathWeb 控制台访问路径默认/remoteserial可设为/log、/console等执行逻辑注册 WebSocket 处理路由server.on(path, HTTP_GET, handleWebSocket)创建AsyncWebSocket实例并绑定事件回调启动后台任务启动xTaskCreateESP32或os_timer_armESP8266定时器每 10ms 扫描发送缓冲区工程约束server必须在remoteSerial.begin()之前调用server.begin()否则路由注册失败path不得包含查询参数如/remoteserial?tokenabcWebSocket 握手协议不支持print(const String s)/print(const char* s)/print(int n, int base DEC)底层机制所有重载版本最终调用write(const uint8_t* data, size_t len)。数据被写入RingBufuint8_t环形缓冲区默认大小 512 字节。内存安全边界当缓冲区剩余空间 len时函数返回0表示未写入不会阻塞或丢弃数据。开发者需检查返回值if (remoteSerial.print(Critical sensor data: ) 0) { // 缓冲区满触发紧急处理如丢弃旧日志、触发硬件复位 remoteSerial.flush(); // 清空缓冲区慎用会丢失未发送数据 }printf(const char* format, ...)实现原理调用vsnprintf()将格式化字符串写入栈上临时缓冲区最大 128 字节再整体写入环形缓冲区。关键限制栈空间消耗大禁止在中断服务程序ISR中调用format字符串长度 所有参数总长度不得超过 128 字节否则缓冲区溢出导致栈破坏安全替代方案// 推荐预分配静态缓冲区避免栈溢出 static char log_buf[64]; snprintf(log_buf, sizeof(log_buf), Temp: %d.%d°C, Hum: %d%%, temp_int, temp_dec, humidity); remoteSerial.print(log_buf);flush()行为澄清此函数不等待数据发送完成仅清空环形缓冲区中待发送的数据。实际网络发送由后台任务异步完成。正确使用场景在设备即将进入深度睡眠Deep Sleep前调用确保最后日志发出remoteSerial.println(Going to deep sleep...); remoteSerial.flush(); // 清空缓冲区 delay(100); // 留出时间让后台任务发送 esp_sleep_enable_timer_wakeup(1000000); // 1s 后唤醒 esp_deep_sleep_start();2.2 高级功能ANSI 彩色日志与远程控制ANSI 转义序列支持RemoteSerial 前端控制台完整支持 ECMA-48 标准 ANSI 序列可在日志中嵌入颜色、样式控制码。常用序列如下序列效果示例代码渲染效果\033[31m红色前景remoteSerial.print(\033[31mERROR:\033[0m);ERROR:\033[32m绿色前景remoteSerial.print(\033[32mOK\033[0m);OK\033[1m加粗remoteSerial.print(\033[1mWARNING\033[0m);WARNING\033[2J\033[H清屏归位remoteSerial.print(\033[2J\033[H);控制台清空工程实践建议定义宏简化调用#define RED \033[31m #define GREEN \033[32m #define RESET \033[0m remoteSerial.printf(%sINFO%s: System started\n, GREEN, RESET);避免在高频循环中使用printf()嵌入 ANSI 码因其栈开销大改用print()拼接字符串。远程命令接收onCommand()回调RemoteSerial 支持双向通信可通过onCommand()注册命令处理器实现 Web 端对设备的主动控制void handleCommand(String command) { if (command reboot) { remoteSerial.println(Rebooting device...); ESP.restart(); } else if (command.startsWith(led )) { int state command.substring(4).toInt(); digitalWrite(LED_PIN, state ? HIGH : LOW); remoteSerial.printf(LED set to %d\n, state); } else { remoteSerial.printf(Unknown command: %s\n, command.c_str()); } } void setup() { // ... WiFi 初始化 remoteSerial.onCommand(handleCommand); // 注册回调 remoteSerial.begin(server, /control); }关键机制命令通过 WebSockettext帧发送前端 JS 中ws.send(reboot)handleCommand()在loop()上下文执行不可调用阻塞函数如delay()、WiFi.scanNetworks()命令字符串以\n结尾库自动截断换行符3. 实战项目集成多客户端协同调试与 FreeRTOS 任务调度3.1 多客户端并发支持原理RemoteSerial 默认支持无限数量客户端连接受 ESP 内存限制。其并发模型基于AsyncWebSocketClient句柄池管理// RemoteSerial.cpp 关键片段 std::vectorAsyncWebSocketClient* clients; void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { switch (type) { case WS_EVT_CONNECT: clients.push_back(client); // 连接时加入池 break; case WS_EVT_DISCONNECT: // 安全移除遍历查找并 erase for (auto it clients.begin(); it ! clients.end(); it) { if (*it client) { clients.erase(it); break; } } break; case WS_EVT_DATA: // 解析 data 为命令调用 onCommand() break; } }实测性能数据ESP32-WROVER同时连接 5 个 Chrome 标签页CPU 占用率 12%RAM 增加约 3.2KB持续发送 100B/100ms 日志所有客户端接收延迟 ≤ 45ms无丢帧瓶颈分析当客户端数 10 时clients向量遍历成为性能热点。生产环境建议改用std::unordered_set或哈希表优化。3.2 FreeRTOS 任务安全集成方案在 FreeRTOS 环境下使用 RemoteSerial 需解决两个核心问题临界区保护与跨任务日志同步。方案一环形缓冲区互斥锁推荐#include freertos/FreeRTOS.h #include freertos/semphr.h SemaphoreHandle_t serialMutex; void setup() { serialMutex xSemaphoreCreateMutex(); remoteSerial.begin(server, /rtos-log); } void logTask(void* pvParameters) { for(;;) { if (xSemaphoreTake(serialMutex, portMAX_DELAY) pdTRUE) { remoteSerial.printf(Task %s: Heap %d\n, pcTaskGetTaskName(NULL), xPortGetFreeHeapSize()); xSemaphoreGive(serialMutex); } vTaskDelay(1000 / portTICK_PERIOD_MS); } }方案二专用日志任务高吞吐场景创建独立logTask所有其他任务通过xQueueSend()将日志消息发往该队列由logTask统一调用remoteSerial.print()QueueHandle_t logQueue; void logTask(void* pvParameters) { char logBuf[128]; while(1) { if (xQueueReceive(logQueue, logBuf, portMAX_DELAY) pdTRUE) { remoteSerial.print(logBuf); } } } // 其他任务中调用 void sendLog(const char* fmt, ...) { va_list args; va_start(args, fmt); vsnprintf(logBuf, sizeof(logBuf), fmt, args); va_end(args); xQueueSend(logQueue, logBuf, 0); // 非阻塞发送 }此方案优势彻底消除多任务竞争remoteSerial调用集中于单任务可在logTask中添加日志分级过滤如 DEBUG/INFO/WARN、文件存储等扩展逻辑队列长度可配置实现背压控制Backpressure3.3 硬件资源占用实测与优化在 ESP32-DevKitCPSRAM 关闭上RemoteSerial 的典型资源占用如下组件Flash 占用RAM 占用说明库代码24.8 KB—含 WebSocket 协议栈、ANSI 解析器环形缓冲区—512 B可通过#define REMOTESERIAL_BUFFER_SIZE 256调整每客户端开销—~1.8 KB含AsyncWebSocketClient结构体、TCP PCB最大客户端数—受CONFIG_ASYNC_TCP_MAX_CLIENTS限制默认 8可修改 menuconfig内存优化指令减少缓冲区#define REMOTESERIAL_BUFFER_SIZE 128适合低频日志限制客户端在platformio.ini中添加build_flags -DCONFIG_ASYNC_TCP_MAX_CLIENTS4 -DREMOTESERIAL_BUFFER_SIZE256禁用 ANSI 支持节省 ~1.2KB Flash#define REMOTESERIAL_NO_ANSI4. 故障排查与生产环境加固4.1 常见异常现象与根因分析现象可能原因解决方案Web 控制台空白无错误提示AsyncWebServer未调用server.begin()在setup()中remoteSerial.begin()后立即调用server.begin()日志发送卡顿延迟突增WiFi 信号弱导致 TCP 重传启用WiFi.setSleep(false)禁用 WiFi 休眠或增加remoteSerial发送间隔多客户端时部分客户端收不到日志clients向量迭代时发生内存移动升级 RemoteSerial 至 v2.1已修复迭代器失效问题printf()导致设备重启栈溢出格式化字符串超 128 字节改用snprintf()预格式化或增大栈大小xTaskCreate(..., 8192, ...)4.2 生产环境加固措施TLS 加密通信HTTPS/WSS为满足工业场景安全要求需将 HTTP 升级为 HTTPSWebSocket 升级为 WSS#include WiFiClientSecure.h #include certs.h // 包含服务器证书 WiFiClientSecure wssClient; wssClient.setCACert(rootCACertificate); // 验证服务器证书 AsyncWebServerSecure secureServer(443); secureServer.on(/remoteserial, HTTP_GET, [](AsyncWebServerRequest *request){ request-send(200, text/html, index_html); }); secureServer.begin(); RemoteSerial remoteSerial; remoteSerial.begin(secureServer, /remoteserial); // 自动启用 WSS网络异常自动恢复添加 WiFi 断连重连逻辑确保 RemoteSerial 持久可用unsigned long lastReconnectAttempt 0; void loop() { if (WiFi.status() ! WL_CONNECTED) { if (millis() - lastReconnectAttempt 5000) { lastReconnectAttempt millis(); WiFi.disconnect(); WiFi.begin(SSID, PASS); remoteSerial.stop(); // 停止 WebSocket 服务 } } else { if (!remoteSerial.isRunning()) { remoteSerial.begin(server, /remoteserial); } } }硬件看门狗协同在loop()中定期喂狗避免 RemoteSerial 后台任务阻塞导致复位#include driver/watchdog.h void setup() { esp_task_wdt_init(30, true); // 30秒超时触发 panic esp_task_wdt_add(NULL); // 添加当前任务到看门狗 } void loop() { esp_task_wdt_reset(); // 每次 loop 喂狗 // ... 其他逻辑 }RemoteSerial 的本质是将嵌入式开发中“调试即生产力”的理念通过现代 Web 技术具象化。它不追求炫酷的 UI而是在printf()与浏览器之间架起一条零学习成本的通道。当产线工程师用手机扫描设备二维码直接在微信内置浏览器中查看传感器原始波形当固件团队在跨国会议中共享同一串口会话实时协作定位竞态条件——这些场景背后是 RemoteSerial 对“嵌入式调试民主化”的无声践行。

相关文章:

RemoteSerial:ESP32/ESP8266 Web串口调试库详解

1. RemoteSerial 库深度解析:面向 ESP8266/ESP32 的嵌入式 Web 串口监控系统RemoteSerial 是一个专为 ESP8266 和 ESP32 平台设计的轻量级、高实时性的 Web 串口监控库。它并非简单地将Serial对象映射到网页,而是构建了一套完整的异步 WebSocket 通信栈&…...

AI时代的算法思维:大经典排序学习驯

引言 在现代软件开发中,性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序,性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言,性能优化涉及多个层面&#x…...

金融PHP支付代码审计清单(含OWASP ASVS 4.0对标项):27个必查风险点,附自动化检测脚本

第一章:金融PHP支付接口安全代码审计导论金融级PHP支付接口是资金流转的核心通道,其安全性直接关系到用户资产、商户信誉与平台合规性。不同于通用Web应用,支付接口需同时满足PCI DSS基础要求、中国《金融行业网络安全等级保护基本要求》&…...

突破重复任务困境:星穹铁道玩家的自动化效率解决方案

突破重复任务困境:星穹铁道玩家的自动化效率解决方案 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 在《崩坏:星穹铁道》的冒险旅程中&#…...

AI编程实战:从零到一搭建全栈项目睹

1. 核心概念 在 Antigravity 中,技能系统分为两层: Skills (全局库):实际的代码、脚本和指南,存储在系统级目录(如 ~/.gemini/antigravity/skills)。它们是“能力”的本体。 Workflows (项目级)&#xff1a…...

2025届学术党必备的十大AI论文平台实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要使得文本的AIGC检出率能够有效降低,就得从语言风格、句法结构以及逻辑组织这三…...

InnoDB存储结构全解析:行页区段与单表W行的关系谌

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...

Arduino GIGA R1 非阻塞 WAV 播放库 GigaAudio 深度解析

1. GigaAudio 库概述:面向 Arduino GIGA R1 的嵌入式 WAV 播放引擎GigaAudio 是专为 Arduino GIGA R1 开发板设计的轻量级、非阻塞式 WAV 音频播放库。其核心定位并非通用音频框架,而是针对 GIGA R1 硬件平台(基于 ARM Cortex-M7 的 NXP i.MX…...

AI开发-python-langchain框架(--langchain与milvus的结合 )逝

一、 什么是 AI Skills:从工具级到框架级的演化 AI Skills(AI 技能) 的概念最早在 Claude Code 等前沿 Agent 实践中被强化。最初,Skills 被视为“工具级”的增强,如简单的文件读写或终端操作,方便用户快速…...

一个简洁易用的 Delphi JSON 封装库,基于 System.JSON`单元封装,提供更直观的 API拥

一、前言:什么是 OFA VQA 模型? OFA(One For All)是字节跳动提出的多模态预训练模型,支持视觉问答、图像描述、图像编辑等多种任务,其中视觉问答(VQA)是最常用的功能之一——输入一张…...

别再数据线了!用FastAPI 分钟搭个局域网文件+剪贴板神器俚

为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...

从零入门性能测试:理论+JMETER实操,看完就能上手婪

一、环境准备 Free Spire.Doc for Python 是免费 Python 文档处理库,无需依赖 Microsoft Word,支持 Word 文档的创建、编辑、转换等操作,其中内置的 Markdown 解析能力,能高效实现 Markdown 到 Doc/Docx 格式的转换,且…...

突破设备救援瓶颈:MTKClient五维解决方案实现联发科设备底层修复

突破设备救援瓶颈:MTKClient五维解决方案实现联发科设备底层修复 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient 当你按下电源键,屏幕毫无反应;当系统更…...

C# 14 原生 AOT 编译 Dify 客户端到底难在哪?92%候选人栽在第4个内存模型问题上(AOT冷启动真相)

第一章:C# 14 原生 AOT 编译 Dify 客户端面试概览C# 14 引入的原生 AOT(Ahead-of-Time)编译能力,为构建轻量、启动极速、无运行时依赖的 Dify 客户端提供了全新路径。与传统 JIT 或托管 AOT 不同,原生 AOT 可将 C# 代码…...

单片机时序图解析与调试实战指南

1. 时序图基础认知第一次接触单片机编程时,看到芯片手册里那些密密麻麻的时序图,我的反应和大多数新手一样——完全看不懂那些高低起伏的波形到底在表达什么。直到有一次调试I2C通信失败,花了整整三天时间才意识到是时序不匹配导致的问题&…...

浏览器扩展提升文档效率:Markdown本地预览解决方案

浏览器扩展提升文档效率:Markdown本地预览解决方案 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 在技术文档阅读和编写过程中,你是否经常遇到本地Markdo…...

为什么你的GraalVM镜像内存比JVM还高?揭秘3类动态反射未注册、2种资源未预加载、1个ClassLoader残留的致命组合

第一章:Java GraalVM 静态镜像内存优化 如何实现快速接入GraalVM 的 Native Image 功能可将 Java 应用编译为独立、零依赖的静态可执行文件,显著降低启动延迟与运行时内存开销。但默认生成的镜像常因反射、动态代理或资源加载未显式配置而触发运行时回退…...

WeChatMsg:如何从微信聊天记录中提取个人数据宝藏并生成年度报告?

WeChatMsg:如何从微信聊天记录中提取个人数据宝藏并生成年度报告? 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/Gi…...

Python 算法题必备基础操作(高频速查版)

这是刷算法题、笔试、面试最常用的 Python 基础操作合集,覆盖数组、字符串、链表、哈希、栈队列、排序、遍历、边界处理等核心场景,直接背会就能写代码。 一、输入输出(笔试必用) 1. 标准输入 # 单个整数 n int(input())# 一行多…...

分子编码解锁电脑:电化学测序技术

利用分子编码的密文登录电脑 日期:2025年5月16日 来源:某机构出版社 摘要:像DNA这样的分子能够在不依赖能源的情况下存储大量数据,但访问这些分子数据成本高且耗时。研究人员现已开发出一种替代方法,将信息编码在合成分…...

突然发现一个现象:HR 原本要给 34 岁员工降薪50%,发现他单身无牵挂,马上转向36岁有两个孩子在上学,最不敢轻易离职的同事

最近听到一个无比扎心,却又异常真实的职场鬼故事。公司要缩减人力成本。HR原本盯上了一个34岁的男同事,打算一刀砍掉他50%的薪水,逼他自己滚蛋。结果稍微摸了一下底发现:这老哥单身,没买房,没车贷&#xff…...

亚马逊科学家近期荣誉与技术贡献

某机构科学家近期荣誉与奖项 研究人员因其对科学界的贡献而获得荣誉。 作者:Staff writer | 2023年2月22日 | 阅读时间8分钟林明当选美国国家发明家科学院院士 林明,某机构学者、马里兰大学计算机科学杰出大学教授,当选美国国家发明家科学院院…...

上班多年后才知道,原来提完离职后,第二天公司就同意你走,不是人情味,而是铜臭味。

昨天有个前同事找我喝酒,说提了离职,原本做好了交接一个月的心理准备。结果第二天HR就笑眯眯地跑来,说工作已经安排人接手,今天办完手续就可以走人了。这哥们感动坏了,觉得公司通情达理,不耽误他去下家报到…...

从付费软件到自主开发:我用AI和FFmpeg实现了一个录屏工具杖

我为什么会发出这个疑问呢?是因为我研究Web开发中的一个问题时,HTTP请求体在 Filter(过滤器)处被读取了之后,在 Controller(控制层)就读不到值了,使用 RequestBody 的时候。 无论是字…...

2025届必备的十大降AI率平台推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 为了降低文本生成痕迹,针对知网AI检测系统的核心评估机制,要从语义连…...

桌面端 Claw 个人微信接入指南使

1.概述在人工智能快速发展的今天,AI不再仅仅是回答问题的聊天机器人,而是正在演变为能够主动完成复杂任务的智能代理。OpenAI的Codex CLI就是这一趋势的典型代表——一个跨平台的本地软件代理,能够在用户的机器上安全高效地生成高质量的软件变…...

2025年项目管理工具深度评测:Gitee如何以“代码+管理“双核驱动重塑企业协作

数字化转型浪潮下,项目管理工具市场正迎来前所未有的变革。作为中国最大的代码托管平台,Gitee通过全面升级项目管理模块,在2025年的工具评测中展现出独特竞争力。本文将深入解析Gitee的核心优势、行业应用场景以及未来发展趋势,为…...

TwiLiquidCrystal库:HD44780 LCD的I²C裸机级驱动解析

1. TwiLiquidCrystal 库概述:面向嵌入式工程师的 HD44780 LCD IC 驱动深度解析TwiLiquidCrystal 是由开发者 Arnakazim 维护的一个轻量级、高兼容性的 Arduino 兼容库,专为通过 IC(在 AVR 平台常称 TWI)总线驱动 HD44780 及其兼容…...

2025—2030年全球CRM系统市场研究与趋势展望

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

实测CosyVoice零样本语音克隆:上传10秒音频,一键生成你的AI语音分身

实测CosyVoice零样本语音克隆:上传10秒音频,一键生成你的AI语音分身 你有没有想过,用自己的声音录制一段有声书,或者为你的视频创作一个专属的旁白配音?过去,这需要专业的录音设备和后期处理。但现在&…...