Files
battery-monitor/STORY.zh-CN.md
denq 172eb6b046 Fix image caption formatting - add blank lines for proper display
Added blank lines between images and captions to ensure captions appear
on a new row below images instead of on the same line.

This follows Markdown best practices where a blank line creates a new
paragraph for the caption text.

Fixed in both STORY.md and STORY.zh-CN.md for all images.
2025-11-06 17:51:24 +08:00

11 KiB
Raw Permalink Blame History

解决 uConsole 4G 模块之谜Vibe Coding 编程纪事

「工作/生活中的 Vibe Coding」系列文章 —— 真实的故事,讲述如何在任何地方使用便携设备和现代工具构建定制化解决方案,解决日常问题。

当你的电脑成为它自己的调试环境

想象一下,在咖啡馆里悠闲地调试设备的电源管理问题,直接在该设备上构建诊断工具。不需要台式工作站。不需要"等我回家再修"。只有你、一台口袋大小的电脑,以及在灵感迸发时随时随地解决问题的自由。

这就是我在某个周末解决 uConsole CM5 臭名昭著的 4G 模块死机问题的经历——结果发现问题根本不是功率传输,而是电压下降

问题:当 4G 模块导致系统崩溃

ClockworkPi uConsole 是黑客的梦想:将树莓派 CM5 塞进翻盖式外壳,配备机械键盘和模块化扩展槽。这是那种让你想要折腾、定制和突破边界的设备。

但有一个令人沮丧的问题。在电池供电时启用 4G 扩展模块,系统会随机冻结——完全卡死。唯一的解决办法?物理移除电池并重启。

论坛帖子充满了各种理论:

  • "这是软件 bug"
  • "你的电池是假货"
  • "电源管理芯片功率不够"
  • "你需要买更好的电池"

这些解释都不完整。用户被迫在移动性电池供电和连接性4G之间做出选择但无法可靠地同时拥有两者。

我决定调查——但有个特别之处:我将在 uConsole 本身上构建所有诊断工具,同时使用电池供电运行。如果我能用正在经历问题的设备来解决问题,那将证明关于现代开发工作流程的一些深刻见解。

在 uConsole 上调试 4G 调制解调器问题

在遇到问题的设备上构建解决方案——真正的 vibe coding 实践

调查:追踪电压

坐在咖啡馆里uConsole 使用电池供电,我开始构建。首先是一个简单的 Web 应用程序来实时监控电池指标。Next.js 热重载意味着我可以立即看到变化。没有编译时间,没有部署步骤——只有纯粹的迭代式问题解决。

监控揭示了一些意想不到的东西。当 4G 模块激活时:

  • 功耗看起来正常(约 8-10W
  • 传输期间电流峰值(高达 2A
  • 但电压... 电压下降到危险的低水平

突破:不是瓦特的问题,而是伏特的问题

经过几个小时的数据手册研究,画面变得清晰:

SimTech SIM7600G-H 4G 模块有严格的电压要求:

  • 工作范围3.4V 至 4.2V
  • 最低安全电压:约 3.45V
  • 电流消耗:传输突发期间高达 2A

当电压降至 3.45V 以下时会发生什么:

  1. 4G 模块欠压
  2. USB 总线挂起
  3. 系统无响应
  4. 只有移除电池才能重置

真正的问题: 锂离子电池有内阻。当 4G 模块抽取 2A 电流时,电压会瞬间下降。如果电池已经部分放电或内阻较高,电压就会降至 3.45V 以下 → 立即死机。

这解释了一切:

  • 为什么 USB 供电有帮助(减少电池电流消耗)
  • 为什么有些电池效果更好(内阻更低)
  • 为什么会随机发生(取决于电池状态和负载时机)

洞察:并非所有电池容量都可用

突破来自构建一个新的可视化:电池能量输出 vs 电压——一条放电曲线,绘制剩余容量与电压的关系。

我用 FEB-4000 4000mAh 电池进行了完整测试100% 至约 2%),在 2 小时 48 分钟内捕获了 4,318 个数据点:

能量输出 vs 电压(带 3.45V 阈值)

红线显示 4G 模块的最低电压。右侧的所有内容都无法用于 4G 连接。

令人震惊的结果:

  • 电池总容量24.79 Wh
  • 3.45V 以上可用容量13.39 Wh (54%)
  • 3.45V 以下不可用11.40 Wh (46%)

这意味着:对于可靠的 4G 操作,你只能使用大约一半的电池容量。 一旦电压降至 3.45V,你仍然有 40-50% 的电量剩余——但它对 4G 来说是无法使用的。

解决方案:电压感知电源管理

确定根本原因后,修复变得显而易见:在 4G 激活时降低电流消耗以防止电压下降。

策略:

  • 检测 4G 模块何时激活(调制解调器状态、网络流量)
  • 将 CPU 频率从 2.4GHz 降至 1.8GHz
  • 更低的电流消耗 = 更少的电压下降
  • 保持电压高于 3.45V 阈值

结果: 电池供电下 4G 运行非常稳定。

为什么 Vibe Coding 有效:零上下文切换的魔力

让我震惊的是:整个项目——从"为什么会崩溃"到"带自动电源管理的生产就绪解决方案"——在两天内大约花了 10 小时

没有台式工作站。没有示波器。没有单独的测试设备。只有:

  • uConsole 本身
  • 用于研究的 Web 浏览器
  • Claude Code 用于 AI 辅助开发
  • 咖啡馆 WiFi

秘诀:

  1. 即时反馈循环:构建图表 → 实时观察 → 发现电压下降 → 修复 → 重复
  2. 零上下文丢失:调试环境就是目标环境
  3. 现代工具Next.js 热重载、TypeScript 安全性、AI 辅助编码
  4. 专注的心流:没有分心,没有切换,只有纯粹的问题解决

Vibe Coding 不仅仅是氛围——它是一种高效的、现代的开发工作流程,适用于任何有互联网连接的地方。

构建的内容:实时电池监控 + 智能电源管理

第一阶段诊断工具Next.js + TypeScript + Recharts

电池监控 Web 应用:

  • 实时指标(电压、电流、功率、百分比)
  • 4 个交互式图表,用于趋势分析
  • 会话记录到 SQLite 数据库
  • CSV 导出用于深入分析
  • 新增:电池能量输出 vs 电压图表(带 3.45V 阈值可视化)

关键发现的可视化:

FEB-4000 电池百分比

完整的放电曲线从 100% 到约 2%

FEB-4000 电压和电流

电压下降和电流峰值模式

FEB-4000 能量输出(带阈值)

关键图表显示 4G 可用容量 vs 不可用容量

每个会话捕获特定时间段内电池行为的完整画面。我用它来记录智能电源调节器的前后行为。

第二阶段自动电源管理Bash + udev + systemd

监控应用确认了电压下降。接下来,我需要自动缓解:

uConsole 智能电源调节器组件:

  1. 主调节器 (uconsole-power-regulator.sh)

    • 基于 AC 和 4G 状态确定电源模式
    • 应用适当的 CPU 设置
    • 控制电压监控
    • 统一日志记录
  2. 后台守护进程 (uconsole-power-daemon.sh)

    • 每 5 秒监控 AC 电源和 4G 调制解调器状态
    • 仅在状态变化时触发调节器
    • 处理边缘情况(如服务启动时 AC 已连接)
  3. 电压监控系统

    • voltage-monitor.sh - 电池 + 4G 激活时每 5 秒检查电压
    • voltage-alert-notify.sh - 多方式告警(桌面/音频/日志/LED
    • voltage-monitor-control.sh - 启动/停止控制器
    • 当电压 < 3.45V 时告警,速率限制为每 30 秒
  4. udev 规则 (99-uconsole-power-regulator.rules)

    • AC 电源连接/断开时触发power_supply 子系统)
    • 4G 调制解调器 USB 设备变化
    • wwan0 接口状态变化
    • ttyUSB 和 cdc-wdm 设备事件
  5. 安装脚本 (install-uconsole-power-regulator.sh)

    • 一键设置,带卸载和升级选项
    • 创建日志、设置权限、重新加载服务
    • 支持从旧版 4G 电源管理器升级

电源模式:

AC 已连接2.4GHz(完整性能)- 无电压监控
电池 + 4G1.8GHz(节能模式)- 启用电压监控和告警
仅电池:    2.0GHz(平衡性能)- 无电压监控

测试结果:

之前CM5 @ 2.4GHz + 4G = 电压降至 3.45V 以下 → 系统死机
之后CM5 @ 1.8GHz + 4G = 电压保持 > 3.45V → 稳定运行 ✓

试试看

快速开始:

git clone https://hiwifi.denq.us:8418/denq/battery-monitor.git
cd battery-monitor
npm install
npm run dev  # 访问 http://localhost:3000

# 安装 uConsole 智能电源调节器(可选)
cd scripts
sudo ./install-uconsole-power-regulator.sh install

你将获得:

  • 实时电池电压/电流/功率监控
  • 电池能量输出 vs 电压放电曲线
  • 4G 兼容性的 3.45V 阈值可视化
  • 智能电源调节AC 检测 + 4G 状态监控)
  • 电池 + 4G 激活时自动电压告警
  • 会话记录和 CSV 导出
  • 完整的电池测试工具包

需要详细使用指南? 参见 TOOL-GUIDE.md

构建的乐趣

在设备上发现问题并在同一设备上构建解决方案,这种感觉非常令人满足。没有"我稍后再修"。没有上下文切换。只有纯粹的、专注的当下问题解决。

uConsole CM5 现在在电池供电下配合 4G 运行稳定。社区对为什么某些电池效果更好有了新的理解。整个解决方案都是在一个专注的周末通过 vibe coding 构建的。

这就是 vibe coding:在灵感迸发的任何地方,带着喜悦构建定制解决方案。不是因为你必须这样做,而是因为你可以这样做。

工具已经存在。硬件价格实惠。唯一的问题是:你将构建什么?


社区影响

自从分享这一发现以来:

  • 多位用户确认电压下降是根本原因
  • 基于放电测试改进了电池推荐
  • 多位用户采用了 uConsole 智能电源调节器
  • 为社区提供了新的电池测试方法
  • 根据用户反馈添加了事件驱动的 AC 检测

分享你的结果:

  • 使用放电曲线工具测试你的电池
  • 在 ClockworkPi 论坛分享发现
  • 为电池推荐做出贡献

改进和贡献:

  • 改进电池推荐列表
  • 添加更多图表和可视化
  • 增强电源调节器逻辑
  • 支持其他 AXP2xx 设备

资源和参考

硬件文档:

社区讨论:

工具和库: