![]()
计算机在处理剪辑、渲染、游戏等高强度工作时,用户通常需要实时监控CPU、GPU、内存占用率等运行状态参数。系统自带的任务管理器功能完备,但仅支持显示器显示,对单显示器用户不够友好,无法提供直观、脱离显示器的反馈方式。本项目针对上述问题,通过上位机软件采集系统数据,利用串口发送至下位机,最终以指针表盘形式直观呈现相关信息。
硬件介绍
主控
本 项 目 主 控 采 用 ESP-12F 模 块 ( 见 图 1),该模块基于 ESP8266EX 芯片,具备高性能、低功耗、低成本的特点。ESP-12F 模块集成 CH340 串口芯片,可简化外围电路设计,且支持 ESP-IDF 与Arduino 两种开发环境,有效降低了开发难度。
![]()
电压表
本项目采用 85C1 型 5V 电压表(见图 2),经简单改装后作为模拟仪表盘使用。ESP-12F 模块接收串口数据后,会将其转换为 0~5V 模拟电压值输入电压表,驱动指针偏转,从而直观反映计算机当前的资源使用状态。
![]()
PCF8591芯片
PCF8591 是一款单电源、低功耗的 8 位 CMOS数据采集芯片,可通过 I2C 总线扩展 4 路 8 位 ADC和 1 路 8 位 DAC。该芯片程序编写简单,拥有良好的软件兼容性与跨平台移植性,其工作电压与 MCU匹配,不需要额外设计供电电路。本项目仅使用其DAC 功能。
陶瓷灯丝与按键
陶瓷灯丝用于光照不足时为设备补光,确保指针清晰可见;按键用于实现下位机对计算机的控制。陶瓷灯丝与按键如图 3 所示。
![]()
PCB设计
本项目 PCB 设计主要包含核心板外围电路与I2C 通信接口等部分。PCB 上设有 ESP-12F 模块的排针孔位,可将现成模块嵌入并焊接。PCB 上为PCF8591 芯片设计了对应电路,包括 I2C 接口与选址接口,并引出其模拟输出接口,用于驱动电压表。PCB 设计如图 4 所示,PCB 3D 预览如图 5 所示。
![]()
外观设计
计算机状态监视器外观为白色长方体,大小为132.4mm×60mm×63mm, 外 壳 采 用 PLA 材 料3D 打印制成,并根据仪表盘与按键区域进行开孔。外壳分为上下两部分,采用滑盖结构,上盖设有快捷功能按键,正面放置两个仪表盘,分别显示 CPU 与内存占用率。设备外壳边缘经过倒角处理,整体设计简约大方,给人稳重可靠的观感。3D 模型预览如图 6 所示。
![]()
本项目对 85C1 型 5V 电压表的表盘进行了改造。首先测量其表盘大小为 60mm×35mm,随后在 Adobe Photoshop 中按该比例设计对应 CPU 与内存表盘图案并打印,替换原有表盘,改装后的电压表如图 7 所示。
![]()
上位机软件设计
上位机软件采用 Python3 开发,通过 Tkinter库函数完成 UI 构建与设计。上位机软件作为计算机操作系统与外部硬件终端之间的通信桥梁,是项目的核心,其架构与实现过程如下。
上下行链路
上行链路为 MCU 到 PC 端的指令。PC 端实时监听下位机发送的物理按键指令,触发预设的快捷操作(如启动应用或打开文档),实现桌面实体快捷键的功能。
下行链路为 PC 到 MCU 的指令。PC 端实时采集计算机系统的性能参数(CPU 与内存占用率),通过串口协议打包发送至下位机,由下位机通过电路驱动仪表指针偏转。
系统数据采集
在系统数据采集方面,上位机软件通过 Python的 Psutil 库获取 CPU 与内存的实时占用率。为简化 MCU 的串口解析,程序将采集的数据整理为定长字符串“CxxGxx”发送,其中“xx”为对应数值。例如,CPU 占用率为 67%、内存占用率为 12% 时,发送数据为“C67G12”。
实体按键控制逻辑
实体按键控制逻辑通过监听串口上行数据实现,当 MCU 检测到物理按键被按下后,会向上位机发送指令(如 B1),上位机接收指令后,查询文件路径映射表,动态调用 Windows API 打开对应程序或文件。
软件多线程设计
为避免串口读写或数据采集可能导致的软件“假死”问题,软件采用多线程设计,将界面渲染、数据采集与发送、数据接收与处理分开运行。主线程负责UI 响应,另设两个线程:一个负责定时发送数据,另一个负责实时接收数据。在初始化过程中,软件首先启动发送线程,与 MCU 的串口连接成功后,再启动接收线程。
软件UI设计与功能
软件 UI 采用简约实用的设计风格,主要分为左侧设置区,右侧监控区与底部设置区。各区域通过带标题的边框隔离,整体布局清晰有序。程序中通过tk.LabelFrame 创建带标题的容器,通过权重合理分配空间。上位机软件操作页面如图 8 所示。
![]()
左侧设置区用于配置串口参数,默认波特率为9600,如需修改可在程序中调整。右侧监控区设有两个进度条,通过 self.style.configure 对其外观进行定制,直观显示系统状态。
底部设置区利用循环结构创建 Label、Entry、Button,简化程序并避免冗余。
单片机程序设计
单片机程序设计基于 Arduino 框架,采用 C、C++ 语言开发,其核心是作为“物理执行者”与“指令发起者”。程序逻辑相对上位机更为简洁,其核心逻辑如下。
串口解析与仪表驱动
上位机通过串口持续发送定长格式的字符串,为保障主循环运行效率,程序通过 Serial.available()实时监测缓冲区,数据送达后,通过 indexof() 函数定位“C”与“G”的字符位置,再经过字符串截取与类型转换函数提取 CPU 与内存的实际占用百分比。然后将 0~100 的百分比按比例转换为 0~255 的数值,通过驱动函数控制 PCF8591 芯片输出相应电压值,驱动仪表指针偏转。
物理按键实现
在 MCU 的程序设计中,首先将物理按键对应的引脚初始化为内部上拉模式,使其默认保持高电平,随后在 loop()函数中持续检测引脚状态,程序不仅检测当前引脚是否为低电平,还引入 lastState 变量用于记录上一次电平状态。当检测到当前状态为低电平且上一次为高电平时,程序会执行 20ms 的时延以实现按键消抖。待电平稳定后,再通过串口向上位机发送“B1”“B2”等指令,从而触发计算机的相应操作。
成品展示
完成 PCB 焊接、外壳组装以及软 / 硬件调试后,最终完成了这款基于 ESP-12F 的计算机状态监视器,系统整体框图如图 9 所示。
![]()
将设备连接至计算机,并在上位机软件中完成串口连接后,设备即可开始工作,此时,电压表的指针能够及时响应,指示准确。按下设备的第一个按键,上位机成功识别 B1 指令,自动打开预设的浏览器,显著提升了桌面操作效率。设备获取计算机 CPU 与内存占用率信息如图 10 所示。
![]()
结语
本项目实现了一款基于 ESP-12F 的计算机状态监视器 , 其创新之处在于,将计算机系统参数通过模拟仪表盘的形式呈现,既解决了单显示器用户不便实时查看系统状态的问题,又为桌面增添了复古科技美感。此外,实体按键功能提高了设备的实用性与操作便捷性,使其不仅是一个状态监视器,更兼具控制台功能。未来可利用 ESP8266 自带的 Wi-Fi 功能,将有线串口传输升级为 WebSocket 无线传输,摆脱线缆束缚,让设备摆放更加自由。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.