使用ESP32和I2C LCD设计一款可放置在桌面上的专用PC性能监控器
很长一段时间里,我总是需要反复按下Alt键切换到任务管理器或系统监控工具,才能查看电脑资源的使用情况。尤其是在进行大量渲染或游戏时,如果能一目了然地看到这些信息,就能大大减少猜测的时间。一个小巧而专用的显示屏,能够实时显示CPU负载、内存使用率、磁盘容量、网络流量和电池状态,似乎正是理想的解决方案。
我决定不买价格昂贵的台式设备,而是自己动手制作。这个项目将低成本的ESP32开发板与标准的16×2 I2C LCD显示屏结合在一起。运行在电脑上的Python脚本通过psutil库收集系统统计信息,并通过简单的USB串口连接将数据发送给ESP32。微控制器解析JSON格式的数据,循环显示多个信息页面,每隔几秒更新一次屏幕内容。
整个系统完全本地化,无需Wi-Fi、云服务,也无需复杂的配置。所有功能均通过一根USB线缆实现。
软件与库
•Arduino IDE – 用于上传 ESP32 固件
•Frank de Brabander 开发的 LiquidCrystal I2C 库——用于驱动 I2C LCD
•Benoit Blanchon 的 ArduinoJson 库(版本 6)——解析传入的 JSON 字符串
•Python 3 – 运行电脑监控脚本
•pyserial – 用于处理 Python 中的 USB 串行通信
•psutil – 收集实时系统信息(CPU、内存、磁盘、网络、电池、运行时间)
你可以使用以下命令安装这两个 Python 包:
在 Arduino IDE 中,使用库管理器安装 LiquidCrystal I2C 和 ArduinoJson(版本 6)。
接线图
使用I2C LCD的一大优点是线路简单,仅需四根线即可。I2C总线由两条信号线(SDA和SCL)以及电源和地线组成。
重要提示:大多数ESP32板的默认I2C引脚为GPIO21(SDA)和GPIO22(SCL)。如果您的板使用不同的引脚,请在代码中修改Wire.begin(SDA, SCL)这一行。
设置ESP32固件
ESP32 持续监听串行数据,逐字符构建 JSON 消息,并在收到完整对象后才进行解析。这种稳健的方法可避免因数据碎片化或不完整而引发的问题。
1. 安装电路板包
如果你之前没有使用过Arduino IDE与ESP32:
转到“文件”>“首选项”,并将 Espressif ESP32 板件索引 URL 添加到“附加板管理器 URL”字段中。
打开工具 > 板子 > 板子管理器,搜索 esp32 并通过 Espressif Systems 安装该软件包。
从板子列表中选择 ESP32 开发模块(或您特定的板子)。
2. 上传草图
创建一个新的草图,复制下方的完整代码,如有需要请更改LCD地址,并上传到你的ESP32。
上传后,打开串口监视器(115200波特率)以查看“ESP32就绪”的消息。
然后关闭显示器——是时候设置电脑端了。
3. Python 脚本 – 收集电脑性能统计信息
Python 脚本使用 psutil 库获取实时系统信息。所有收集的数据以单个 JSON 对象(后跟换行符)通过串口发送到 ESP32。脚本持续运行,默认每两秒更新一次。
你只需修改一行代码:SERIAL_PORT 应设置为你的 ESP32 的正确串口(Windows)或设备路径(Linux/macOS)。
4. 获取COM端口
Windows:打开设备管理器,在“端口(COM 和 LPT)”中查找类似“USB 串行端口(COMx)”的内容。
Linux:运行 ls /dev/ttyUSB* 或 ls /dev/ttyACM*;ESP32 通常显示为 /dev/ttyUSB0。
macOS:它会显示为 /dev/cu.usbserial-xxxx。
5. 脚本代码
创建一个名为 pc_monitor.py 的文件,并粘贴以下内容。根据需要修改 SERIAL_PORT。
6. 运行脚本
确保您的ESP32已插入USB端口,并关闭Arduino串口监视器(因为它会占用该端口)。
在保存 pc_monitor.py 的文件夹中打开终端(命令提示符、PowerShell 或 Linux/macOS 终端)。
运行:
你应该每2秒看到一次JSON数据的打印。
同时,ESP32上的LCD会开始循环显示实时系统信息。
7. 您在LCD上看到的内容
显示屏会循环显示五个不同的页面,每个页面停留3秒后自动切换到下一个。
每当电脑发送新的JSON数据包时(每2秒一次),数据都会立即更新,因此所有数值始终保持最新。
8. 测试与首次运行
首次接通电源时,LCD会显示一个简短的启动画面(PC Monitor v2.0),然后进入第一个统计页面。如果尚未接收到串行数据,数值将保持为零。
Python 脚本运行后,你应该能看到数字实时变化。电脑端也会打印每发送的 JSON 数据,因此你可以验证数据是否正在被传输。
3D打印外壳 – 由JUSTWAY制造
电子设备运行正常后,下一步就是为项目赋予一个完整、专业的外观。设计并打印一个能精准适配ESP32板、LCD屏幕以及所有线路的外壳,需要花费时间,并且还需要一台优质的3D打印机。
我选择了JUSTWAY定制3D打印手机壳。JUSTWAY专注于高品质打印,尺寸精准,边壁光滑,层线清晰。您可将自己的STEP文件上传至其网站,立即获取报价。零件包装完好,与模型完全一致。
为什么我推荐JUSTWAY参与这个项目:
•完美适配标准ESP32开发板和16×2 I2C LCD显示屏
•USB接口和通风孔的开孔
•有多种颜色可选(黑色、白色、透明)
•快速周转,全球发货
最终思考
该项目将一个廉价的ESP32和一个简单的I2C LCD改装成一款可放置在桌面上的专用PC性能监控器。它无需互联网连接,也不依赖外部云服务,仅需一根USB线缆即可实现供电和数据传输。Python与Arduino的结合具有高度灵活性,基于JSON的协议也使得添加或修改显示的性能指标变得十分简便。
如果遇到任何问题,请先检查基本事项:I2C 地址、正确接线、正确的 COM 端口以及波特率(115200)。提供的 ESP32 代码内置了 JSON 解析和错误报告功能,因此串口监视器会始终准确告知您具体哪里出了问题。
现在,自己动手制作一个显示器吧,再也不用 Alt+Tab 切换到任务管理器了。如果你成功制作出来,欢迎分享你的照片以及所做的修改——我非常期待看到你的创意成果。
本文编译自hackster.io





