新闻详情

新闻详情

首页 / 资讯中心 / 详情

Hindsight:用可视化编辑器轻松实现滚动叙事动画

发布时间:2026/10/1 3:25:06来源:尧图网络
Hindsight:用可视化编辑器轻松实现滚动叙事动画
最近“hindsight”这个词在技术圈的热搜里出现的频率突然高了起来。我一开始以为是心理学里的“事后聪明偏差”——就是那种“我早知道会这样”的后知后觉——点进去才发现大家讨论的其实是 Google 开源的同名前端动画工具 Hindsight。用过一遍之后我觉得这名字起得挺妙当页面随着滚动像电影一样徐徐展开用户回头看这段“滚动之旅”时确实能感觉到每一个细节都是被提前设计好的伏笔。这篇文章不打算翻译官方文档而是把从“第一次听说 Hindsight”到“在真实的长页叙事项目里跑完一整套流程”的完整经历整理出来。内容包括它的核心设计理念编辑器 运行时为什么要拆开、Scene / Timeline / Property 这几个概念到底在说什么、怎么从零把编辑器跑起来、怎么导出一段可用的滚动动画并接入页面、真实项目里常见的集成和性能坑以及最后我和团队复盘出来的选型结论。适合想用“可视化方式”做滚动叙事的前端工程师、创意开发者以及正在为动效协作扯皮的小团队参考。1. 先搞清楚Hindsight 到底解决了哪一类问题1.1 滚动动画为什么让前端头大做过落地页或品牌故事站的人应该都有体会需求方说“这里要一个随着滚动逐渐放大的背景图标题往右飘进来图片浮起来”听起来简单但真正实现时你首先得在 scroll 事件里手工计算滚动进度window.addEventListener(scroll, () { const rect hero.getBoundingClientRect() const viewport window.innerHeight const progress clamp((viewport - rect.top) / (viewport rect.height), 0, 1) bg.style.transform scale(${1 progress * 2}) title.style.transform translateY(${(1 - progress) * 80}px) title.style.opacity progress })这还只是一个场景两个元素。一旦页面里有七八个场景每个场景又有背景、前景、文字、装饰层滚动速度和动画时长还不一样计算每个元素的进度、边界值、前后顺序代码量会迅速膨胀而且极其难维护。更别说 scroll 事件在移动端高频触发性能稍不注意就掉帧。我记得早些年有阵子我写这类东西改一个元素的动画时长要连带改好几个 JS 文件里的计算逻辑改完还不一定对得上。最痛苦的不是第一次写而是需求方说“这个动画速度再慢一点”的时候——你得把整个公式重新推一遍。1.2 一个类比滚动条就是播放头Hindsight 的处理方式完全不同。它把滚动动画抽象成“一部电影”动画在时间轴上被安排好滚动条就是播放头你滚到哪一帧页面就停在那一帧。用过 After Effects 或者剪过视频的人秒懂——视频里的“时间”在这里被替换成了“滚动位置”。这个抽象的价值在于你不必再关心“当前滚动位置应该触发哪个元素的哪段动画”只需要在时间轴上摆好关键帧滚动区间和动画时间的映射关系由工具替你算好。我第一次在 Hindsight 编辑器里拖动时间轴预览时想通这一点当时的感觉是早该有人这么做。1.3 编辑器和运行时为什么要拆成两个东西Hindsight 由两个独立部分构成Hindsight Editor一个用 Python 写的桌面编辑器。界面像简化版 After Effects可以创建场景、拖图层、打关键帧、调缓动所有操作都可视化。Hindsight Runtime一个体积很小的 JavaScript 运行时。浏览器端读取编辑器导出的 JSON把动画在真实 DOM 上播放出来。拆成两部分的直接好处是“动画创作完全不需要写代码”。我们团队之前最痛苦的环节就是动效联调设计师在 Figma 里画好了动效意图前端照着感觉写写完设计师说“差一点”反复拉扯好几个来回。Hindsight 把动画设计从开发流程里剥离出去后动效师直接产出动画文件前端只负责给 runtime 提供正确的 DOM 容器合作方式清爽很多。对比维度传统手写滚动动画用 Hindsight动画创作方式前端写 JS可视化拖时间轴调整动画效果改代码重启调试编辑器里改完重新导出 JSON交接成本动效细节靠嘴和文档描述JSON 即契约新成员上手门槛需要熟悉 JS 动画逻辑会拖关键帧就行2. 核心概念拆解Scene、Timeline、Property 是怎么协作的如果你只用编辑器可能不太需要懂底层概念但要把 Hindsight 接到真实项目里这几个概念必须吃透。我按自己的理解拆开讲。2.1 Scene每一个“章节”绑定一段滚动区间Scene场景是 Hindsight 的组织单位对应页面里的一个内容区块。比如一个品牌故事页第一屏是“起源”第二屏是“发展”第三个大图是“愿景”每个都是一段 Scene。每个 Scene 在导出文件里带有一段滚动参数起止滚动位置runtime 监测到滚动进入这段区间后才开始播放该 Scene 的时间轴。理解 Scene 的关键是场景的滚动区间和动画时间不是一回事。举个例子你希望某段动画在用户滚过 800px 的过程中播完那么这段 Scene 的“外部滚动区间”就是 800px而内部动画可能被设计成 2 秒的时间轴。runtime 会把这 800px 均匀映射到 2 秒时间轴上——滚得快动画播得快滚得慢动画就播得慢永远跟手。这也是滚动叙事网站“丝滑”的核心原因。2.2 Timeline 嵌套与父子层级每个 Scene 内部是一棵 Timeline 树。根 Timeline 是场景的主时间轴下面可以挂子 Timeline每个子 Timeline 对应一个图层Layer的一组动画。嵌套是很重要的能力你可以先给“整个标题组”做一个整体的位移和透明度变化再让组里的“小字”单独做延迟浮现。父子层级的位移会叠加这恰好是实现视差效果的基础——父图层以 0.5 倍速滚动子图层再叠加一层自己的运动最终效果就像空间里有前后景深。我的建议是在编辑器里设计图层时先想清楚层级关系——哪些图层是“一组”的哪些是独立的。可视化工具里拖动图层到父子结构虽然简单但想清楚再拖能避免后续反复调整。中途改层级结构往往意味着关键帧要重打。2.3 Property 驱动与 JSON动画描述和数据分离Hindsight 里每个图层能驱动的属性是有限的核心是 CSS 变换类的属性透明度、位移、缩放、旋转等。这些属性被序列化成 JSON 里的关键帧数组。一个简化示意的结构大概长这样实际字段名以你导出的版本为准{ sceneId: hero, scrollStart: 0, scrollEnd: 1200, layers: [ { layerId: bg, properties: { opacity: [ { time: 0, value: 1 }, { time: 1200, value: 0.2 } ], translateX: [ { time: 0, value: 0, ease: easeOutCubic }, { time: 600, value: 120 }, { time: 1200, value: 0 } ] } } ] }我的建议是第一次导出后一定要自己打开 JSON 看一遍。不是因为要手改它而是只有看过原始结构你才能理解 runtime 的执行逻辑也才能在出问题时知道去哪排查。比如你会发现关键帧数值在不同的设计里会以特定的单位存储这决定了你在不同屏幕上的表现策略。2.4 缓动与每帧插值运行时怎么做到“顺滑跟上手速”JSON 里只记录了关键帧和时间点中间每一帧的样式值由 runtime 插值计算。Linear 插值意思是对时间做线性比例换算但真实滚动中用户手速随时会变纯线性会显得僵硬缓动函数的作用是让动画在起止瞬间“有惯性”视觉上更接近物理运动。关键细节是runtime 不是在每个 scroll 事件里同步更新样式而是通过 requestAnimationFrame 驱动以浏览器刷新频率做插值采样。这是滚动动画不卡的另一个基石。如果每触发一次 scroll 就改一次样式移动端滚轮和触摸事件一秒钟可能触发几十上百次浏览器忙不过来。rAF 则保证每帧最多更新一次把“滚动位置采样”和“动画渲染”解耦用户手速再快动画输出节奏也是稳定的。3. 环境准备从源码把编辑器跑起来含最常见的坑编辑器是 Python 桌面包在 GitHub 的 google/hindsight 仓库里。我当时的系统是 macOS另外在 Windows 机器上也试过这里把两条路的经验都写一下。3.1 依赖清单与启动步骤你至少需要Python 3.8 以上、Git、以及系统本身的图形界面支持。大体流程如下git clone https://github.com/google/hindsight.git cd hindsight python -m pip install -r requirements.txt python main.py具体入口命令和依赖列表以你 clone 下来的 README 为准仓库在不同时期改过结构我在两个版本上看到的启动方式就有细微差别。跑起来后你会看到编辑器主窗口左侧是场景列表中间是画布与图层列表底部是时间轴整体就是“AE 精简版”的长相。3.2 不同系统上最容易翻车的地方Windows最常见的问题是 Python 装好了但 tkinter 没有随附。检测方法是在命令行执行python -m tkinter如果弹出一个窗口就说明没问题没弹窗的话需要换一个带 tkinter 的 Python 安装包重新装。另一个问题是路径我遇到过用中文用户名目录导致编辑器导出素材路径错乱的情况建议把项目 clone 到纯英文路径下。macOS如果你用的是系统自带 Python权限和版本都可能卡住建议用 Homebrew 装一个独立的 Python 环境再用python3启动。我第二次在一台新机器上装的时候就是直接brew install python解决的省去了一堆系统权限的折腾。Linux需要额外安装 tk 相关的系统包比如 Debian / Ubuntu 上要sudo apt install python3-tk否则启动时直接报ModuleNotFoundError: No module named tkinter。3.3 编辑器里值得先试的几个操作启动之后别急着建复杂工程先把三件事做一遍新建一个场景给它设一段滚动区间比如 0 到 2000 像素把一个图片素材拖成图层在时间轴不同位置打两个关键帧改一下透明度预览滚动效果确认“滚动进度到动画播放”的映射符合直觉。这套流程走下来你对 Hindsight “编辑-导出-预览”的心智模型就建立了后面做复杂场景时不容易懵。预览功能是编辑器内置的不用先接前端这一点对非开发背景的动效师特别友好——他们可以在完全不碰代码的情况下确认动画意图。4. 实操一条龙做一个“图片放大 文字浮现”的滚动场景纸上谈兵够了来点真的。我以一个最常见的场景为例页面顶部一张大图随着滚动从 1.2 倍缩放降到 1 倍同时标题从下方透明度 0 浮上来。这个效果在无数品牌站里出现过用 Hindsight 做起来大概是这样的流程。4.1 先把 DOM 骨架搭好runtime 工作的前提是页面里存在和导出 JSON 中图层 ID 对应的 DOM 节点。具体匹配规则在不同版本里有差异——有的按 id有的按 data 属性我用的版本是按场景和图层 ID 匹配。所以 HTML 里至少要保证section idhero classscene div idhero-bg classlayer-bg.../div div idhero-title classlayer-title.../div /section无论是动画被导出时还是 runtime 初始化时这些节点的存在性都要保持稳定。如果页面用了异步渲染等数据到位后再初始化 runtime否则图层匹配不到动画会静默失败——这是最容易踩的雷而且不好排查因为控制台往往不报错只是动画不出来。4.2 在编辑器里拖出这段动画打开编辑器新建一个名为 hero 的场景滚动区间设为 0 到 1000。把背景图层加入场景在时间轴起点打一个 scale 1.2 的关键帧在终点打 scale 1再把标题图层加入起点透明度 0、Y 偏移 60px终点透明度 1、Y 偏移 0。缓动上图片缩放建议用 smooth 的缓动曲线文字浮现用 easeOutCubic 这类“先快后慢”的曲线会让文字像被轻轻托起来而不是匀速僵直地移动。这里想多说一句缓动曲线的选择决定了整段动画的质感。同样两个关键帧配不同缓动观感天差地别。手写代码时你可能懒得去调曲线细节但在编辑器里所有曲线都可视可调调完之后立即预览这种即时反馈带来的打磨深度是手写代码很难达到的。4.3 导出 JSON看清楚产物再进代码导出时编辑器会把场景结构、图层关键帧、缓动配置、素材引用打包成一个 JSON 文件素材会复制到对应的 assets 目录。导出后做两件事打开 JSON 检查图层 ID 与页面节点对得上确认素材路径是相对路径且 assets 目录跟随 JSON 一起放入项目静态资源。我吃过一次亏在编辑器里用了绝对路径引用素材导出 JSON 后直接传到服务器结果所有图片 404。所以每次导出我都习惯性地在 JSON 里搜一下“http”或者绝对路径前缀有就直接改成相对路径。这个小习惯后来帮我在好几个项目里免于踩坑。4.4 用 runtime 把它在页面里播起来接入方式大致是这样包名与初始化参数以你用的版本为准这里给的是我当时项目的写法import Hindsight from hindsight const player new Hindsight({ animation: /assets/hero-animation.json, container: document.querySelector(#hero) }) player.start()跑起来之后滚动页面你应该能看到背景图从 1.2 缩放到 1文字在滚动区间内浮上来。如果没反应排查顺序我建议是控制台看 JSON 是否加载成功 → 看图层 ID 是否匹配 → 看滚动容器选择器是否正确。九成的问题出在这三步。5. 从 Demo 到真实项目集成细节与框架共存Demo 跑通是第一步接进真实项目才是考验。这一节我按“生命周期、滚动容器、响应式、框架共存”四块讲基本都是实战里实打实踩过的点。5.1 生命周期管理初始化与销毁Hindsight 的 runtime 内部有自己的检测逻辑会在滚动过程中实时计算场景状态。在单页应用里路由切换会导致页面节点被卸载如果你不销毁实例轻则内存泄漏重则报错。标准做法是在组件卸载时调用实例的销毁方法并解除内部注册的滚动监听。在 React 里用useEffect的清理函数在 Vue 里用onUnmounted钩子都是顺手的事。关键是养成习惯凡是引入了外部 runtime 的组件初始化与销毁永远成对写。我见过不少项目因为少了销毁这一步页面切来切去动画越滚越卡最后变成“玄学性能问题”。5.2 滚动容器的适配window 滚动 vs 内部 div 滚动默认情况下 Hindsight 监听的是 window 滚动这对整页滚动叙事没问题。但如果你的页面是“左侧固定导航右侧内容区独立滚动”或者弹窗里有一段带滚动动画的引导页就必须把滚动容器传给 runtime让它基于内部容器的滚动位置计算进度。这里有个隐蔽的坑容器高度和 Scene 的滚动区间是强绑定的。容器高度取决于内部内容而内部内容可能因为图片加载、字体加载而变化滚动区间一旦漂移动画就会提前播完或者迟迟不触发。我的处理方式是给容纳动画的 Scene 一个明确的最小高度或者在图片加载完成之后、初始化 runtime 之前做一次高度校准。内容高度稳定了再启动动画比在 runtime 里做各种补偿都省心。嵌套滚动如果躲不开尽量让“动画发生层”和“页面滚动层”保持同一个不要一个场景同时受两层滚动驱动。否则调试的时候你会疯掉。5.3 响应式同一份动画在不同屏幕上的策略Hindsight 的导出 JSON 里关键帧数值如果以像素为单位那不同屏幕宽度下的表现就需要你提前想好策略。常见做法有两种桌面和移动端导出两套 JSON用媒体查询切换加载不同资源动画节奏贴合两端设备特性。同一套 JSON按宽度缩放动画强度在初始化时根据视口宽度算出一个“动画强度系数”乘到关键帧的位移和缩放值上宽屏更张扬窄屏更克制。我个人更推荐第一种。两套 JSON 的管理成本没那么高但移动端的体验可控性最好尤其要避开“在手机上看到桌面端那种大幅位移动画”的尴尬。动效师也更容易在编辑器里直接针对手机竖屏调一版而不是靠系数硬压。数值系数压出来的动画容易出现小屏幕上位移量不足、节奏太快的问题。5.4 与 React/Vue/SSR 共存的正确姿势和 React 配合时我用的是 dynamic import 把 runtime 拆成异步 chunk避免拖慢首屏看起来像这样import { useEffect, useRef } from react export default function HeroScene() { const containerRef useRef(null) useEffect(() { let player import(hindsight).then(({ default: Hindsight }) { player new Hindsight({ animation: /animations/hero.json, container: containerRef.current, }) player.start() }) return () player?.destroy() }, []) return section ref{containerRef} classNamehero-scene.../section }注意不要在服务端渲染时执行初始化因为这些逻辑依赖浏览器环境。SSR / SSG 项目里把组件标记为 client-only或者干脆在 useEffect 里做所有事情就不会出问题。6. 性能优化与移动端实战从 60fps 掉到 30fps 的排查过程滚动动画对性能的要求比普通页面高一个量级因为每一帧都在改写视觉状态。我把性能问题分成四类来聊。6.1 先保住合成层只动 transform 和 opacityHindsight 驱动的属性主要是 transform 和 opacity 这一类“合成器友好”的属性。用它们做动画时浏览器不经过布局和绘制直接走合成器开销极小。反过来如果有人在 runtime 的补偿逻辑里写了width、height、left、top每一次变化都会触发重排掉帧是必然的。实际操作上我给每个常驻动画图层加了will-change: transform相当于提前告诉浏览器“这个层会经常动”。但别无脑给所有图层都加——合成层是吃内存的移动端尤甚几十个图层全部提层低端机器直接内存吃紧反而更卡。经验值肉眼可见的动画层才提静置的图层不要。6.2 JSON 瘦身与素材管理JSON 越大解析越慢每帧插值计算越重。我查看导出文件时发现关键帧经常有很多重复的数值比如一段匀速位移中间被无意义地打了十来个关键帧。编辑器里有抽稀或采样精度设置导出前调一下可以大幅减小体积。我的经验是关键帧能少则少两三个就能描述的运动不要打十个。素材层面的坑更多大图在 Scene 触发时才解码解码一次的时间足够让滚动卡一下。我做长页时给每个大图都准备了小尺寸渐进版本初始加载的是轻的滚动到场景前再换高清图。配合loadinglazy整体流畅度提升非常明显。6.3 移动端专属问题清单手机上的滚动动画是重灾区几个高频问题值得单列地址栏伸缩移动端浏览器滚动时地址栏会收起或展开100vh随之变化Scene 的滚动区间跟着漂移。我用动态视口高度如100dvh替代固定 vh或者干脆用 JS 实时读取实际视口高度来设置容器尺寸。iOS 橡皮筋回弹页面拉过头时 scroll 值会出现负值动画可能反向播放甚至闪现异常状态。这时候给 progress 做 clamp把负值强制归 0看起来就正常了。touch 滚动惯性惯性滚动期间 scroll 事件频率不稳定如果 runtime 是在事件里同步更新就会卡。Hindsight 的核心逻辑走 rAF 路线所以惯性期间反而表现很好但如果你自己加了额外的 scroll 逻辑尽量也走 rAF 路线不要直接操作样式。6.4 一整套帧率排查方法当页面在某段滚动时从 60fps 掉到 30fps我一般按这个顺序查打开 DevTools 的 Rendering 面板打开 FPS meter确认掉帧发生在哪个滚动区间、对应哪个 Scene暂时禁用该 Scene 里的图片素材只留纯 transform 动画。如果帧率恢复了问题在图片解码或绘制如果还卡逐一删除图层用二分法定位到具体属性。八成是某个图层引入了重排或图层爆炸用 Performance 面板录制滚动过程看 Main 线程的长任务都堆在哪排查 runtime 之外是否有第三方脚本在抢主线程。这套流程每次都能帮我找到罪魁祸首而且往往不是 runtime 本身而是页面里别处的代码在抢主线程。滚动动画是最容易暴露“别人家代码”性能问题的场景之一。7. 复盘与选型什么场景真的适合用 Hindsight7.1 我在真实项目里的体会我完整用 Hindsight 做的项目是一个品牌长页五个章节的叙事型滚动页面包含视差背景、文字浮现、图片缩放、章节间进度条这样的动效。项目里动效师和前端是两个人整个动效联调周期比我以前纯手写的项目缩短了大概一半——动效师在编辑器里调完导出新 JSON我替换文件、检查 DOM 匹配就完事几乎不需要来来回回改代码。不太顺的地方也有。最明显的是 JSON 文件基本没法手改一旦需要做细枝末节的调整必须回到编辑器重导而这要求电脑上装了编辑器。团队里如果只有前端没有动效师每次小调都要拉上能碰编辑器的同事反而多了环节。另外老浏览器上需要补 polyfill 和降级方案移动端单独导一套 JSON 也意味着素材翻倍这些成本要提前算进去。7.2 适合与不适合的清晰清单适合用 Hindsight不建议用品牌故事、产品发布的叙事型长页后台系统、表格类页面设计师或动效师能直接参与的项目纯前端小团队且没有可视化创作需求需要精致的滚动视差和场景切换只需要简单淡入淡出的页面营销 Campaign 微站对包体积有极致要求的弱网场景说实话Hindsight 是一种“动效创作协作模式”的解决方案而不只是又一个动画库。如果你的团队结构和它不匹配它的优势发挥不出来反而会增加协作环节。7.3 和 GSAP / ScrollMagic / 原生 API 的选型对比这里直接给结论式对比方便做决策GSAP ScrollTrigger功能最全面社区资源最多JS 高手用起来行云流水但动画仍然是用代码描述设计师改起来需要前端协助。ScrollMagic老牌方案功能稳定但维护基本停滞新项目我不太建议再选。原生 IntersectionObserver rAF适合简单 reveal 动效灵活但复杂时间轴要自己造轮子代码量会失控。Hindsight最大差异点是“不写代码也能做动画”适合设计师与前端协作的团队。选型时先问自己一个问题这套动画的创作者是谁是前端还是动效师如果是后者Hindsight 基本就是最优解如果只是前端一个人全包那选 GSAP 反而顺手。7.4 团队协作的一个实用建议最后给正在考虑引入 Hindsight 的团队一个建议把 JSON 当作代码一样管理。每次动效师导出新版本都带上版本号命名前端在项目里锁定引用的版本动效师提交前自己跑一遍预览前端替换文件后看 git diff确认 JSON 的变化符合预期。我们在项目里就是这么做的联调沟通成本降得很明显。最后说个我自己的体会。Hindsight 最打动我的不是省了多少行代码——该写的集成代码还是得写而是它把“动效设计”这件事从开发流程里彻底拆出去了。动效师在一个像 AE 的界面里调参数前端只负责提供正确的容器和生命周期管理两边通过一份 JSON 文件说话扯皮少了很多。它当然不是万金油如果你只是想在页面上加几个 hover 反馈那完全没必要动用它。我的建议是先拿一个两屏的小场景跑通全流程用实际体验判断它适不适合你的团队再决定要不要放大到整个项目。工具这东西用对地方才是真的好用。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

2026年Codex部署实战:API配置、CLI安装与VS Code扩展避坑指南 2026/10/1 7:19:06

2026年Codex部署实战:API配置、CLI安装与VS Code扩展避坑指南

1. 为什么 2026 年还要认真折腾一次 Codex 部署先把话说在前头:Codex 这类 AI 编程助手,装起来不难,难的是"装完之后能稳定跑起来"。我见过太多人卡在最后一步——CLI 二进制找不到、API 返回 400、代理配置对不上,然后…

阅读更多 →
STM32+FPGA工业控制器分级存储方案:EEPROM、NOR Flash与SD卡设计 2026/10/1 7:19:06

STM32+FPGA工业控制器分级存储方案:EEPROM、NOR Flash与SD卡设计

做工业控制器这几年,最常被问的问题就是“你们数据到底存哪了”。这问题听着基础,背后其实是整个存储架构的设计取舍。STM32FPGA 这种异构组合在运动控制、边缘采集网关里太常见了,而数据存储恰恰是这类系统最容易翻车的一环——不是在调试现…

阅读更多 →
避坑指南:为什么你本地的OpenClaw智能体总是“智障”?从API到多智能体排查TaoToken 2026/10/1 7:19:06

避坑指南:为什么你本地的OpenClaw智能体总是“智障”?从API到多智能体排查TaoToken

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

阅读更多 →
无犯罪记录公证如何办理?无犯罪记录公证可以异地办吗?避坑指南 2026/10/1 7:18:59

无犯罪记录公证如何办理?无犯罪记录公证可以异地办吗?避坑指南

摘要:很多准备留学、移民、海外务工的朋友,都会需要办理无犯罪记录公证,不少人疑惑这项公证是否支持异地办理。传统线下公证处往往需要来回跑,现在通过微信/支付宝搜索证天下、慧办好、指上通等公证小程序,足不出户就能…

阅读更多 →
基于STM32的仓库环境监控:温湿度粉尘监测与ESP8266上云实现 2026/10/1 7:18:59

基于STM32的仓库环境监控:温湿度粉尘监测与ESP8266上云实现

仓库里堆着几十箱电子元器件,长期没有环境监控,结果一夜受潮,引脚氧化,直接损失好几千块。这让我下定决心做一套基于STM32的仓库环境控制系统,把温湿度监测、粉尘监测、自动通风除湿和ESP8266上云全部打通,…

阅读更多 →
STM32+HX711+OLED电子秤开发:硬件设计、驱动与标定全解析 2026/10/1 7:18:59

STM32+HX711+OLED电子秤开发:硬件设计、驱动与标定全解析

1. 项目需求拆解与硬件方案选型1.1 为什么是STM32HX711OLED这个组合做称重项目,市面上的方案其实不少:有直接用单片机加电阻分压的,有用专用称重仪表的,也有用Arduino配上各种模块的。我为什么推荐STM32HX711OLED这个组合&#xf…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉