搭建一个远程电脑监控系统,可以随时随地查看电脑的运行状况
我想创建一种无需亲自坐在电脑前即可远程监控电脑性能的方法。无论我正在运行资源密集型任务、玩游戏,还是仅仅想查看系统状态,这款设备都能让我通过任何有网络连接的地方,实时获取CPU、GPU、RAM和SSD的性能数据。
它有什么作用?
这个智能家居项目将一个Particle设备转变为硬件监控中心,可实现以下功能:
•通过串行连接接收实时的PC性能数据
•CPU、GPU、RAM 和 SSD 的运行状态统计(温度、使用率、速度、功耗)
•将编码后的数据上传至 GitHub 进行云存储
•通过LED指示灯提供视觉反馈
•可通过网页界面实现远程监控
硬件要求
所需部件
•粒子光子/氩气(或兼容的粒子物联网设备)
•USB转串口线(用于电脑连接)
•3个LED(可选)——用于视觉反馈的状态指示灯
•3个电阻(可选)——若使用LED,每只220Ω
•面包板和跳线
•带监控软件的电脑(用于收集硬件性能数据)
引脚配置(可选LED)
•引脚4:切换LED(数据传输指示灯)
•引脚5:开关指示灯(系统状态)
•引脚7:接收指示灯(数据接收时闪烁)
注意:LED灯仅用于视觉反馈和调试。系统在没有它们的情况下也能完美运行——它们只是帮助你查看数据的传输与接收情况。
软件与服务
•粒子云平台 - 物联网设备管理
•GitHub API - 通过网络钩子实现云数据存储
•C++ 应用程序 - 本地数据格式化器(texteditor.cpp)
•JavaScript/HTML - 网页仪表盘(index.html,up.js)
•粒子网络钩子 - 将设备连接到 GitHub
工作原理
系统架构
PC硬件统计 → 串行 → 颗粒设备 → 云 → GitHub → 网页仪表盘
数据流
•数据采集:PC监控软件收集硬件统计信息
•格式化:C++ 应用程序将数据格式化为 CSV 并通过串口发送
•处理:粒子固件解析传入的数据(格式:C u 18 = CPU 使用率 18%)
•编码:数据已使用Base64编码以确保安全传输
•上传:通过 webhook 将编码数据发布到 Particle Cloud
•存储:GitHub API 使用基于 SHA 的版本控制来存储数据
•显示:网页界面实时获取并显示更新内容
固件逻辑分析
固件实现了复杂的数据显示处理流程:
输入解析器:采用了一种巧妙的字符级协议
•第一个字符(大写):组件类型(C=CPU,G=GPU,R=RAM,S=SSD)
•第二个字符(小写):计量类型(u=使用量,t=温度,s=速度,p=功率)
•剩余字符:数值
智能SHA管理:
Base64编码:我特别自豪的是能够直接在微控制器上实现Base64编码——这确保了数据在云端传输过程中的完整性,且无需依赖外部库。
这是我在打开更新器,然后查看 GitHub 更新的过程。
面临的挑战
我真正挣扎的地方
1. GitHub API 集成
最大的挑战是实现可靠的云存储。GitHub 的 API 要求文件更新时使用 SHA 哈希值,这意味着需要跟踪版本历史并处理冲突。我必须实现:
•启动时自动获取SHA
•每次成功上传后更新SHA
•SHA 无法使用时的回退逻辑
2. 串行通信可靠性
在PC与粒子设备之间实现稳定的串行通信曾一度颇具挑战:
•需要实现正确的握手(OK确认)
•添加了结束标记以表示数据完成
•已实现输入验证,以防止无效数据
3. 数据编码
在内存有限的微控制器上实现Base64编码需要仔细优化。我不得不编写一个自定义编码器,使其能够与Arduino的String对象兼容。
我是如何克服它的
•全面测试:在代码中添加了串行调试功能
•响应处理器:实现 webhook 响应订阅,以自动更新 SHA
•视觉反馈:LED灯可即时确认每一步操作
•验证函数:创建了 numcheck()、capcheck() 和 lowercheck() 函数,以确保数据完整性
代码亮点
输入解析
该协议在保持可读性以便调试的同时,最大限度地减少了数据传输。
自动SHA管理
设备每次上传后都会自动更新其SHA值,无需人工干预。
安全提示
重要提示:该项目之前在 JavaScript 文件中硬编码了访问令牌。对于生产环境使用,请注意:
•将令牌存储在环境变量中
•使用服务器端代理进行 API 调用
•切勿向代码仓库泄露机密信息
•建议使用 Particle 的身份验证功能
未来改进
如果我能重新开始或继续开发:
•添加温度警报:当温度超过阈值时触发通知
•历史图表:存储并可视化随时间变化的趋势
•移动应用:打造原生应用,享受更佳的移动端体验
•支持多台电脑:可扩展以监控多台计算机
•OLED显示屏:添加本地显示,实时查看统计信息
结论
该项目成功地将嵌入式系统、云API和网络技术相结合,打造了一个实用的家庭自动化解决方案。尽管在API集成和串行通信方面存在挑战,但最终成果仍能实现可靠且实时的电脑监控,无论身处何地均可使用。
所展示的技能
•嵌入式C/C++编程
•串行通信协议
•RESTful API 集成
•数据编码/解析
•云物联网架构
•网页开发(HTML/JS)
如何构建这个项目
想重现这个PC监控系统吗?以下是一份快速指南,帮助你开始:
步骤1:设置 GitHub 存储空间
•创建一个 GitHub 仓库(公开或私有)
•在仓库中创建一个文本文件用于存储数据(例如:creation.txt)
•生成具有仓库权限的 GitHub 个人访问令牌
•GitHub 设置 → 开发者设置 → 个人访问令牌
•生成具有仓库权限的 GitHub 个人访问令牌
•GitHub 设置 → 开发者设置 → 个人访问令牌
•注意文件的SHA哈希值(稍后需要使用)
步骤2:配置Particle Webhooks
•在 Particle 控制台中创建两个网络钩子:
•Webhook 1:获取文件 SHA
•活动名称:request_sha(或您自定义的名称)
•方法:GET
•添加标头:Authorization token, User-Agent, Accept
•响应模板:{{sha}}
•Webhook 2:更新文件
•事件名称:ifttt_upload(或您自定义的名称)
•方法:PUT
•包含内容和SHA字段的JSON体
•回复模板:{{content.sha}}
步骤3:刷写固件
复制粒子固件代码(参见代码部分)
替换占位符:
•初始SHA哈希
•Webhook 名称
•引脚编号(如有不同)
•替换占位符:初始SHA哈希、Webhook名称、PIN码(如不同)
•将Flash传输到您的Particle设备
步骤4:设置PC数据收集
•编译 C++ 格式化程序
•安装电脑监控软件(如HWiNFO、Open Hardware Monitor等)
•配置监控软件,以以下格式输出数据:C u 18(组件、指标、值)
步骤5:创建网页仪表盘(可选)
•设置HTML/JS文件
•添加您的粒子访问令牌
•本地运行或部署到Web服务器
步骤6:硬件组装(可选)
如果你想使用视觉反馈LED:
•将LED与220Ω电阻连接到第4、5和7号引脚
•接地连接
•LED在数据传输期间会闪烁
步骤7:测试系统
•在粒子控制台中调用闪烁函数以激活系统
•运行您的电脑监控软件
•执行 C++ 格式化器以发送数据
•查看 GitHub 文件更新并获取新数据
•请查看网页仪表盘以获取实时显示
提示:
•无需LED即可启动,便于初期测试
•使用串行监视器调试数据流
•如果SHA出现不同步,请手动调用setSha函数
•在运行完整系统之前,先单独测试网络钩子
本文编译自hackster.io





