首页/新闻资讯/正文详情

ESP32-S3可穿戴挂坠SoulCage:从选型到动画优化的嵌入式开发实战

发布时间:2026/9/24 13:24:08 来源:云帆数科 栏目:资讯中心
ESP32-S3可穿戴挂坠SoulCage:从选型到动画优化的嵌入式开发实战
1. 项目缘起与整体设计思路1.1 这个挂坠到底是个什么东西SoulCage 直译过来叫“灵魂牢笼”听起来挺中二的但它的核心概念其实很朴素把一块带屏幕的小型微控制器做成吊坠屏幕上循环播放一段“被困住的灵魂”动画——一个光点在笼子般的网格里游走、碰撞、闪烁偶尔停下来“盯着你看”。整个东西挂在脖子上看起来像一件赛博朋克风格的饰品实际上是一块跑着自定义动画逻辑的 ESP32-S3 开发板。我第一次看到这个概念是在一个创客社区的帖子里有人用圆屏做了个类似“电子宠物”的东西但那个项目用的是成品模块堆叠体积大、续航差。SoulCage 的思路不一样它要求把主控、屏幕、电池、交互按钮全部塞进一个可以日常佩戴的尺寸里同时动画效果要足够“有灵魂”不能是简单的 GIF 轮播。这个项目适合谁如果你已经玩过 Arduino 基础项目想做一个有完整外壳、有交互、有视觉表现力的可穿戴设备那这个项目非常合适。它涉及的知识点覆盖了微控制器选型、屏幕驱动、电源管理、3D 打印外壳设计、以及最关键的——如何在资源受限的嵌入式环境里做出流畅的动画效果。新手也能跟着做但需要有一定的焊接经验和耐心。1.2 为什么选 ESP32-S3 而不是其他主控选主控这件事我纠结了很久。最初考虑过 ATtiny85体积小、功耗低但它的 RAM 只有 512 字节连一帧 128x128 的 RGB565 图像都存不下更别说做动画了。后来想过 STM32F103性能够用但开发环境相对复杂而且没有内置 WiFi/蓝牙后续想加功能会很受限。最终锁定 ESP32-S3 的原因有这么几个算力充足双核 240MHz 的 Xtensa LX7跑 SPI 屏幕刷新和动画逻辑绰绰有余。我实测过在 128x128 分辨率下用 TFT_eSPI 库做局部刷新帧率能稳定在 30fps 以上。内存够大512KB SRAM 加上 8MB PSRAM我用的模组是 ESP32-S3-WROOM-1-N8R8可以缓存多帧动画数据甚至能做双缓冲。引脚丰富可用的 GPIO 足够接屏幕、按钮、电池检测、以及一个用于调试的串口。生态成熟Arduino IDE 对 ESP32-S3 的支持已经很完善了TFT_eSPI 库也有专门的 ESP32-S3 优化分支省去了大量底层驱动调试时间。体积可控WROOM 模组本身只有 18x25.5mm去掉排针后可以直接焊在定制 PCB 上整体厚度能压到 10mm 以内。注意ESP32-S3 有好几个版本一定要选带 PSRAM 的型号。我一开始图便宜用了 N4 版本4MB Flash 无 PSRAM结果动画帧缓存不够只能降到 64x64 分辨率效果大打折扣。1.3 屏幕选型为什么是 1.28 寸圆屏挂坠的形态决定了屏幕必须是圆形的方形屏做出来像个小手机没有“牢笼”的感觉。市面上常见的圆形 TFT 屏主要是 1.28 寸和 1.44 寸两种分辨率分别是 240x240 和 128x128。我最终选了 1.28 寸 240x240 的 GC9A01 驱动屏。原因很简单128x128 的分辨率在 1.44 寸屏幕上颗粒感太明显光点移动时能看到明显的锯齿。240x240 虽然对 ESP32-S3 的 SPI 带宽要求更高但配合 TFT_eSPI 的 DMA 传输刷新率完全够用。这块屏的接口是 4 线 SPI引脚定义如下屏幕引脚ESP32-S3 引脚说明VCC3.3V供电GNDGND共地SCLGPIO 12SPI 时钟SDAGPIO 11SPI 数据RESGPIO 9复位DCGPIO 8数据/命令选择CSGPIO 10片选BLKGPIO 7背光控制提示背光引脚一定要接 PWM 可控的 GPIO这样后续可以做呼吸灯效果也能在待机时降低亮度省电。1.4 交互设计一个按钮够不够SoulCage 的交互逻辑很简单单击按钮切换动画模式双击进入“休眠”屏幕变暗灵魂静止长按 3 秒重置。听起来一个按钮就够了但实际做的时候我发现一个问题——按钮的机械结构在吊坠这种小体积设备里很难做防水防尘处理。后来我改用了一个 SPDT 滑动开关加一个电容触摸焊盘。滑动开关负责电源通断触摸焊盘负责交互。触摸焊盘用的是 ESP32-S3 内置的电容触摸功能只需要在 PCB 上画一块 8mm 直径的铜箔引一根线到 GPIO 14 就行。这样外壳上不需要开孔整体密封性好了很多。触摸检测的代码很简单但要注意阈值校准#include Arduino.h #define TOUCH_PIN 14 #define THRESHOLD 40 void setup() { Serial.begin(115200); // 校准读取多次基线值 long sum 0; for (int i 0; i 100; i) { sum touchRead(TOUCH_PIN); delay(10); } Serial.print(Baseline: ); Serial.println(sum / 100); } void loop() { int val touchRead(TOUCH_PIN); if (val THRESHOLD) { // 触发交互 Serial.println(Touched!); delay(300); // 简单消抖 } delay(50); }实测下来触摸焊盘上覆盖 2mm 厚的亚克力外壳时阈值设在 40 左右比较稳定。如果外壳更厚需要重新校准。1.5 电源方案小体积下的续航博弈吊坠的体积限制决定了电池不能太大。我最终选了一块 3.7V 150mAh 的锂聚合物电池尺寸是 25x20x4mm刚好能塞进外壳的底部。续航实测屏幕亮度 50%、动画持续运行的情况下大约能撑 2.5 小时。如果开启休眠模式屏幕亮度 10%、动画帧率降到 5fps可以延长到 6 小时左右。充电方案用的是 TP4056 模块但原模块太大我直接买了 TP4056 芯片自己画在 PCB 上。这里有个坑TP4056 的充电电流默认是 1A对 150mAh 的电池来说太大了必须把 PROG 引脚上的电阻换成 2K把充电电流降到 500mA 左右。电阻值充电电流1.2K1000mA2K500mA5K200mA10K100mA注意锂聚合物电池绝对不能过充过放。TP4056 自带过充保护但过放保护需要额外的 DW01 芯片加 8205A 双 MOS 管。我建议直接买带保护板的电池省事。2. 核心细节解析与实操要点2.1 TFT_eSPI 库的配置陷阱TFT_eSPI 是 Arduino 生态里驱动 SPI 屏幕最常用的库但它的配置方式对新手不太友好——所有引脚定义都写在一个叫User_Setup.h的头文件里而不是在代码里用#define指定。我第一次用的时候找了半天没找到在哪里改引脚。正确的做法是在 Arduino 的库目录下找到TFT_eSPI文件夹打开User_Setup.h把里面默认的驱动型号和引脚定义全部注释掉然后加上自己的配置#define GC9A01_DRIVER #define TFT_WIDTH 240 #define TFT_HEIGHT 240 #define TFT_MOSI 11 #define TFT_SCLK 12 #define TFT_CS 10 #define TFT_DC 8 #define TFT_RST 9 #define TFT_BL 7 #define LOAD_GLCD #define LOAD_FONT2 #define LOAD_FONT4 #define LOAD_GFXFF #define SMOOTH_FONT #define SPI_FREQUENCY 80000000这里有几个关键点SPI_FREQUENCY设到 80MHz 是 GC9A01 的极限再高会花屏。我试过 100MHz屏幕直接白屏。LOAD_FONT2和LOAD_FONT4根据需要加载不用的字体不要开会占用 Flash 空间。如果编译时报错说找不到GC9A01_DRIVER说明你的 TFT_eSPI 版本太老去 GitHub 拉最新版。2.2 动画数据的存储与读取SoulCage 的动画不是实时计算的而是预先用 Processing 生成好的帧序列。每一帧是 240x240 的 RGB565 数据大小是 240x240x2 115200 字节。如果存 30 帧就是 3.4MBESP32-S3 的 8MB Flash 完全放得下。但问题来了Arduino IDE 默认不支持直接往 Flash 里写文件。你需要用 ESP32 的 LittleFS 或者 SPIFFS 文件系统。我的做法是用 Processing 生成帧数据导出为二进制文件。用mklittlefs工具把二进制文件打包成镜像。通过 Arduino IDE 的“ESP32 Sketch Data Upload”插件上传到 Flash。读取的时候用 LittleFS#include LittleFS.h File frameFile; void setup() { LittleFS.begin(); frameFile LittleFS.open(/anim.bin, r); } void drawFrame(int frameIndex) { frameFile.seek(frameIndex * 115200); uint8_t buffer[115200]; frameFile.read(buffer, 115200); tft.pushImage(0, 0, 240, 240, (uint16_t*)buffer); }注意pushImage需要缓冲区是 16 位对齐的uint8_t数组直接强转uint16_t*在某些平台上会出问题。保险起见用uint16_t buffer[57600]来声明。2.3 用 Tinkercad 做前期电路验证在真正焊接之前我强烈建议先用 Tinkercad Circuits 把电路逻辑跑一遍。Tinkercad 是一个免费的在线电路仿真平台虽然它没有 ESP32-S3 的模型但你可以用 Arduino Uno 加 SPI 屏幕来验证接线逻辑和按钮交互。具体做法在 Tinkercad 里新建一个 Circuit。拖一个 Arduino Uno 和一个 SPI 屏幕模块。按照你计划的引脚连接方式接线。写一段简单的测试代码验证屏幕能点亮、按钮能触发。Tinkercad 的好处是零成本试错。我一开始把屏幕的 DC 和 CS 引脚接反了在 Tinkercad 里跑了一下发现屏幕没反应检查接线后才发现问题。如果直接焊在 PCB 上这个错误可能要拆焊好几次才能发现。不过 Tinkercad 也有局限它不支持 ESP32-S3 的触摸功能也不支持 DMA 传输。所以它只能验证数字逻辑不能验证模拟性能和功耗。2.4 PCB 设计中的几个关键决策SoulCage 的 PCB 是圆形的直径 32mm和屏幕的尺寸匹配。设计的时候有几个点需要特别注意天线净空区ESP32-S3 的模组天线下方绝对不能铺铜也不能走线。我在 PCB 上把天线区域挖空并且把电池放在远离天线的位置。电源走线宽度电池到 TP4056 再到 ESP32-S3 的走线至少要 0.5mm 宽否则充电时压降太大。触摸焊盘触摸焊盘周围要有一圈接地保护环减少误触发。焊盘本身不能盖阻焊层否则触摸灵敏度会下降。屏幕排线GC9A01 的排线是 0.5mm 间距的 FPC焊接的时候很容易连锡。我建议用热风枪加焊膏不要用烙铁一根一根焊。设计项参数原因PCB 直径32mm匹配 1.28 寸屏幕PCB 厚度1.0mm减薄整体厚度天线净空15x8mm保证 WiFi/蓝牙信号电源走线0.5mm降低压降触摸焊盘8mm 直径手指接触面积足够2.5 外壳的 3D 打印与后处理外壳我用的是 SLA 光固化打印材料是透明树脂。选透明树脂的原因是我想让屏幕的光从侧面透出来形成一种“灵魂光芒外溢”的效果。FDM 打印也能做但层纹太明显后处理工作量大。外壳分三部分前盖带屏幕窗口、中框容纳 PCB 和电池、后盖带挂绳孔。前盖的屏幕窗口需要留 1mm 的台阶用来卡住屏幕。中框的内壁要留 0.5mm 的间隙给 PCB太紧塞不进去太松会晃动。打印完之后前盖需要打磨抛光。我用的是 800 目、1500 目、3000 目砂纸依次打磨最后用抛光膏擦一遍。透明树脂抛光后透明度能恢复到 80% 左右足够透出屏幕的光了。提示SLA 打印的透明件在打磨后容易发黄建议喷一层透明 UV 光油既能防黄变又能增加光泽度。3. 实操过程与核心环节实现3.1 从零开始物料清单与工具准备在动手之前先把所有东西备齐。我列了一份完整的物料清单价格是参考某宝的散件价格批量买会更便宜。物料数量参考单价备注ESP32-S3-WROOM-1-N8R8125元必须带 PSRAMGC9A01 1.28寸圆屏135元240x240 SPITP4056 芯片11元充电管理DW018205A11元电池保护3.7V 150mAh 电池115元带保护板更好SPDT 滑动开关12元电源开关0402 电阻电容若干5元按原理图定制 PCB5片30元嘉立创打样透明树脂外壳1套20元SLA 打印挂绳15元尼龙材质工具方面你需要恒温烙铁、热风枪、万用表、USB 转串口模块CH340 就行、以及一台 3D 打印机或者找代打。3.2 焊接顺序与温度控制焊接这块 PCB 的时候顺序很重要。我的建议是先焊最小的元件再焊大的最后焊模组和屏幕。先焊 0402 电阻电容用镊子夹住烙铁温度设 300°C先在一个焊盘上上锡把元件放上去再焊另一个焊盘。焊 TP4056 和 DW01这两个是 SOP-8 封装引脚间距 1.27mm用拖焊法。烙铁温度 320°C加足焊膏。焊 ESP32-S3 模组模组的焊盘在底部需要用热风枪。风枪温度 280°C风速最低档从模组上方均匀加热看到焊锡融化后轻轻按压模组。焊屏幕排线这是最难的一步。FPC 排线间距 0.5mm我建议用热风枪加焊膏风枪温度 250°C风速最低从排线上方加热焊锡融化后用镊子轻轻压住排线。注意ESP32-S3 模组对静电很敏感焊接前一定要戴防静电手环烙铁和风枪都要接地。3.3 固件烧录与调试PCB 焊完之后先不要装外壳直接上电测试。烧录固件需要一根 USB 转串口线接在 PCB 上的 UART 排针上。Arduino IDE 的配置如下开发板ESP32S3 Dev ModuleFlash Size8MBPSRAMOPI PSRAMPartition Scheme16M Flash (3MB APP/9.9MB FATFS)Upload Speed921600烧录的时候有个坑ESP32-S3 需要手动进入下载模式。方法是按住 BOOT 按钮按一下 RESET 按钮然后松开 BOOT。如果用的是自动下载电路这一步可以省略。烧录成功后打开串口监视器波特率 115200。你应该能看到启动日志和触摸校准信息。如果屏幕没亮先检查背光引脚有没有输出高电平。如果屏幕亮了但白屏检查 SPI 频率是不是设太高了。3.4 动画帧的生成与优化动画帧是用 Processing 生成的。我写了一个简单的粒子系统让一个光点在圆形边界内随机游走碰到边界就反弹同时留下拖尾效果。每一帧导出为 RGB565 格式的二进制数据。Processing 代码的核心逻辑// Processing 代码片段 int numFrames 60; int frameSize 240 * 240 * 2; byte[] frameData new byte[frameSize]; void draw() { background(0); // 更新粒子位置 px vx; py vy; // 边界碰撞检测 float dist dist(px, py, 120, 120); if (dist 110) { // 反弹逻辑 vx -vx; vy -vy; } // 绘制光点 ellipse(px, py, 8, 8); // 保存帧数据 loadPixels(); for (int i 0; i 240 * 240; i) { color c pixels[i]; int r (c 16) 0xFF; int g (c 8) 0xFF; int b c 0xFF; int rgb565 ((r 3) 11) | ((g 2) 5) | (b 3); frameData[i * 2] (byte)(rgb565 8); frameData[i * 2 1] (byte)(rgb565 0xFF); } saveBytes(frame_ nf(frameCount, 3) .bin, frameData); if (frameCount numFrames) exit(); }生成 60 帧大约需要 2 分钟。然后把所有帧合并成一个文件cat frame_*.bin anim.bin最后用mklittlefs打包上传mklittlefs -c data.img -p 256 -b 4096 -s 0x100000 data/提示如果动画帧数太多导致 Flash 放不下可以降低分辨率到 128x128或者减少帧数到 30 帧。我实测 30 帧循环播放视觉上已经足够流畅了。3.5 组装与最终调试所有部件测试通过后开始组装。顺序是先把屏幕用双面胶固定在前盖上然后把 PCB 用 M1.6 螺丝固定在中框上接着把电池用双面胶粘在后盖上最后把三部分合拢。合拢之前一定要先确认电源开关能正常通断触摸焊盘能正常触发。我吃过一次亏外壳合拢之后发现触摸不灵敏拆开一看是触摸焊盘的接地环被电池挡住了。组装完成后的最终测试清单电源开关能正常开机和关机屏幕显示正常无花屏、无闪烁触摸交互灵敏无误触发充电指示灯正常亮起挂绳孔能穿过挂绳整体重量不超过 50g4. 常见问题与排查技巧实录4.1 屏幕显示异常速查表屏幕问题是这个项目里最容易遇到的我把常见的现象和解决方法整理成了一张表现象可能原因解决方法白屏SPI 频率过高降到 40MHz 试试花屏排线接触不良重新焊接 FPC 排线黑屏但背光亮驱动型号选错检查 User_Setup.h颜色反转RGB/BGR 顺序错误修改 TFT_RGB_ORDER局部闪烁电源供电不足加 100uF 电容刷新慢没用 DMA启用 DMA 传输4.2 触摸误触发的排查思路触摸误触发是我调试过程中最头疼的问题。现象是明明没碰但动画一直在切换模式。排查下来发现三个原因电源纹波太大ESP32-S3 的 WiFi 工作时会产生电源噪声干扰触摸检测。解决方法是在触摸引脚和 GND 之间加一个 10nF 电容。阈值设得太低环境湿度变化会影响触摸基线。解决方法是定期重新校准或者在代码里做动态基线跟踪。接地不良如果 PCB 的 GND 和外壳没有良好接触人体接触外壳时会产生干扰。解决方法是在外壳内侧贴一层铜箔接到 GND。动态基线跟踪的代码实现int baseline 0; int threshold 40; void updateBaseline() { static unsigned long lastUpdate 0; if (millis() - lastUpdate 1000) { int val touchRead(TOUCH_PIN); baseline (baseline * 9 val) / 10; // 滑动平均 lastUpdate millis(); } } bool isTouched() { int val touchRead(TOUCH_PIN); return (baseline - val) threshold; }4.3 电池续航不达标的优化手段如果你发现续航比预期短很多可以从这几个方面优化降低屏幕亮度背光电流是最大的功耗来源。把亮度从 100% 降到 30%功耗能减少一半以上。降低刷新率动画不需要 60fps30fps 甚至 15fps 视觉上也能接受。刷新率减半功耗大约降低 30%。关闭 WiFi/蓝牙ESP32-S3 的射频模块待机功耗不低。如果不需要无线功能在代码里彻底关闭。使用深度睡眠长时间不交互时让 ESP32-S3 进入深度睡眠只保留触摸唤醒。深度睡眠电流只有 10uA 左右。我实测的功耗数据状态电流150mAh 电池续航全速运行80mA1.9小时亮度50%45mA3.3小时亮度10%15fps20mA7.5小时深度睡眠0.01mA625天4.4 焊接过程中的避坑经验焊接这块 PCB 的时候我踩过几个坑分享出来让大家少走弯路FPC 排线焊接千万不要用烙铁一根一根焊0.5mm 间距的排线用烙铁必连锡。正确做法是用热风枪加焊膏风枪温度 250°C风速最低档从排线上方均匀加热 10 秒左右焊锡融化后用镊子轻轻压住排线。ESP32-S3 模组焊接模组底部的焊盘看不见只能靠热风枪。我的经验是先在焊盘上涂一层薄薄的焊膏放上模组用风枪 280°C 从模组上方加热看到焊膏冒烟后等 5 秒用镊子轻轻推一下模组如果能自动回弹说明焊好了。0402 元件太小了手抖一下就不见了。建议多买一些备用并且在桌面上铺一张白纸掉上去容易找。注意焊接完成后一定要用万用表检查电源和地之间有没有短路。我有一次焊完 TP4056 后没检查上电直接冒烟芯片烧了。4.5 外壳装配的细节调整外壳装配看起来简单但有几个细节需要注意屏幕窗口的台阶前盖的屏幕窗口要留 1mm 的台阶用来卡住屏幕。如果台阶太浅屏幕会掉出来太深屏幕会陷进去。中框的 PCB 卡槽中框内壁要留 0.5mm 的间隙给 PCB。如果太紧PCB 塞不进去太松PCB 会晃动导致排线断裂。后盖的电池仓电池仓的深度要比电池厚度多 0.5mm留一点缓冲空间。如果电池仓太浅后盖合不上。挂绳孔挂绳孔的直径要 2mm 以上否则粗一点的挂绳穿不过去。孔的位置要在重心上方这样挂坠不会翻转。我第一版外壳的挂绳孔开在了正中间结果挂上去之后屏幕朝后了。第二版把孔往上移了 5mm屏幕就自然朝前了。4.6 固件升级与功能扩展SoulCage 做完之后还可以继续扩展功能。我目前想到的几个方向加速度计加一个 LIS3DH 加速度计让灵魂光点能响应挂坠的晃动。晃动越剧烈光点移动越快。无线同步通过蓝牙让多个 SoulCage 之间同步动画两个挂坠靠近时灵魂会“互相吸引”。声音交互加一个 MEMS 麦克风检测环境声音强度声音越大灵魂越活跃。无线充电把 TP4056 换成无线充电接收芯片彻底去掉充电接口提升防水性能。这些扩展都需要额外的硬件和代码但核心框架已经搭好了加功能只是时间问题。4.7 一个容易被忽略的细节屏幕保护挂坠是日常佩戴的东西屏幕难免会被刮花。我在前盖的屏幕窗口上贴了一层 0.5mm 厚的透明亚克力片用 UV 胶粘合。这样即使外壳被刮花换一块亚克力片就行不用重新打印整个前盖。亚克力片的切割可以用激光切割机也可以手工用勾刀划。手工划的时候要注意亚克力片的两面都有保护膜划之前不要撕划完之后再撕否则容易刮花。提示UV 胶固化需要紫外线灯太阳光也能固化但速度慢。我用的是一款 36W 的 UV 灯照射 2 分钟就完全固化了。4.8 关于 Tinkercad 仿真的补充说明前面提到了用 Tinkercad 做前期验证这里再补充几点实操经验。Tinkercad Circuits 的元件库里有 Arduino Uno、面包板、LED、按钮、以及一些基础的传感器但没有 ESP32-S3 和 GC9A01 屏幕。所以它的作用主要是验证数字逻辑比如按钮消抖、状态机切换、PWM 调光这些。我通常的做法是在 Tinkercad 里用 Arduino Uno 加一个 16x2 的 LCD 来模拟屏幕用按钮来模拟触摸输入。把状态机的逻辑跑通之后再把代码移植到 ESP32-S3 上把 LCD 的绘图函数替换成 TFT_eSPI 的绘图函数。这样做的好处是逻辑层面的 bug 在 Tinkercad 里就能发现不用反复烧录 ESP32-S3。Tinkercad 的仿真速度比真实硬件快调试效率高很多。不过要注意Tinkercad 的仿真结果不能完全代表真实硬件。比如触摸灵敏度、SPI 时序、电源噪声这些Tinkercad 都模拟不了。所以 Tinkercad 只是第一道防线最终还是要上真实硬件测试。4.9 关于 SPDT 开关的选型建议SPDT 开关单刀双掷在这个项目里负责电源通断。选型的时候要注意三点尺寸要选超小型的比如 3x6mm 的贴片式 SPDT否则塞不进外壳。电流额定值至少 500mA因为 ESP32-S3 峰值电流能到 300mA 以上。操作力要选操作力适中的太轻容易误触太重按不动。我试过几款操作力在 200gf 左右的比较合适。焊接 SPDT 开关的时候建议先焊中间的那个公共端再焊两边的触点。因为开关的引脚比较短如果先焊两边中间可能对不准。4.10 最后分享一个调试小技巧调试这种小体积设备的时候串口打印是最有效的调试手段。但 ESP32-S3 的串口引脚在 PCB 上只留了排针装进外壳之后就接不出来了。我的做法是在 PCB 上留两个测试点一个是 TX一个是 GND。用一根细的漆包线焊在测试点上从外壳的缝隙里引出来接一个 USB 转串口模块。这样即使装进外壳也能随时看串口输出。调试完成后把漆包线剪掉用热熔胶封住测试点防止短路。这个方法我用了很多次非常实用。

相关推荐

STM32评价系统三件套:代码、原理图与仿真全解析
STM32评价系统三件套:代码、原理图与仿真全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:24:08

C#实现SECS/GEM设备通信:secs4net库实操与避坑指南
C#实现SECS/GEM设备通信:secs4net库实操与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:24:08

B站抖音视频下载工具组合:BBDown与TikTokDownload实战指南
B站抖音视频下载工具组合:BBDown与TikTokDownload实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 13:24:08

Prometheus Operator Helm Chart 迁移指南:从仓库内置 Chart 到 kube-prometheus-stack
Prometheus Operator Helm Chart 迁移指南:从仓库内置 Chart 到 kube-prometheus-stack

云原生可观测性 【免费下载链接】prometheus-operator Prometheus Operator creates/configures/manages Prometheus clusters atop Kubernetes 项目地址: https://gitcode.com/gh_mirrors/pr/prometheus-operator 点击查看 免费下载 本文聚焦 Prometheus Operator… · 2026/9/24 14:01:04

caddy配置文件Caddyfile示例
caddy配置文件Caddyfile示例

{# 这块是全局配置# http不要自动转跳httpsauto_https disable_redirects# 内部私有证书,不要自动安装到certs系统目录里skip_install_trust# 在线核对证书状态间隔时间,ocsp_interval 12h# 全局监听配置#servers {# http请求头最大字节大小# max_header_size 5MB# # tcp keepa… · 2026/9/24 14:01:04

【Dv2Admin】用自己服务器部署d2curd样例站点
【Dv2Admin】用自己服务器部署d2curd样例站点

由于 d2-crud-plus 作者已停止维护,其官方样例站点也无法访问。但对于仍在使用该组件库的项目来说,保留样例站点作为参考模板是非常有必要的。 本文介绍一种基于 宝塔面板 快速部署 d2-crud-plus-example 的方式,用于搭建本地演示站点,供团队内部预览和参考使用。 文章目录… · 2026/9/24 14:01:04

【Dify】多语言自动翻译摘要应用
【Dify】多语言自动翻译摘要应用

多语言内容获取与智能摘要已成为高频需求。如何自动采集网页核心信息、实现高效翻译与摘要,正是实际编程学习与实践的技术挑战。 本文介绍基于Dify工作流的“链文智译Smart”方案,围绕网页采集、多语种翻译和要点提取等流程进行详解,涵盖核心模型设计、节点配置、主要应用场… · 2026/9/24 14:01:04

【Dv3Admin】插件 dvadmin_cloud_storage 数据云存储
【Dv3Admin】插件 dvadmin_cloud_storage 数据云存储

dvadmin_cloud_storage 是基于 Dv3Admin 的云存储插件,支持腾讯云 COS 和阿里云 OSS,实现文件的上传、读取和删除等操作。插件集成于系统设置中,可通过后台界面灵活管理。插件已在 Dv3Admin 框架下完成适配,如需在 Dv2Admin 中使用,可根据实际情况做相应修改。 ⚠️ 注意:… · 2026/9/24 14:01:04

susper-backbone:基于去中心化技术的搜索平台
susper-backbone:基于去中心化技术的搜索平台

susper-backbone:基于去中心化技术的搜索平台 【免费下载链接】susper-backbone Susper Backbone.js - Decentralised Search Engine 项目地址: https://gitcode.com/gh_mirrors/su/susper-backbone 项目介绍 susper.com 是一个基于去中心化技术的搜索引擎&… · 2026/9/24 14:00:58

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码