Arduino Leonardo 实时 PC 硬件监控:LCD 显示 CPU/GPU 温度
项目背景
想在不打开软件的情况下随时掌握 CPU 与 GPU 温度?本项目利用 Arduino Leonardo(或任意支持 USB HID 的开发板)配合 1602 I2C LCD,通过 C# 上位机读取 OpenHardwareMonitor 数据,经串口实时推送至 LCD,打造专属桌面硬件监控面板。
硬件准备
- Arduino Leonardo / Micro / Pro Micro(需 ATmega32U4 芯片)× 1
- 1602 字符型 LCD + I2C 适配器(地址通常为 0x27 或 0x3F)× 1
- 杜邦线若干
- Micro USB 数据线
接线指南
| LCD 引脚 | Arduino 引脚 |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | SDA (D2) |
| SCL | SCL (D3) |
若使用其他 Arduino 板型,请查阅对应 I2C 引脚定义(Uno 为 A4/A5)。
Arduino 固件核心逻辑
代码采用「字符流 + 结束符」协议:
*结束符 → 显示在第 1 行(GPU 温度)#结束符 → 显示在第 2 行(CPU 温度)DIS*→ 显示 "Disconnected!" 并清屏
void loop() {
while (Serial.available()) {
char c = Serial.read();
inData += c;
if (c == '*') { // GPU 数据结束
inData.remove(inData.length()-1);
lcd.setCursor(0,0);
lcd.print("GPU Temp.: " + inData + "°C ");
inData = "";
}
if (c == '#') { // CPU 数据结束
inData.remove(inData.length()-1);
lcd.setCursor(0,1);
lcd.print("CPU Temp.: " + inData + "°C ");
inData = "";
}
}
}
C# 上位机开发要点
依赖库
- OpenHardwareMonitorLib.dll:从 Open Hardware Monitor 官方发布页获取,引用后可读取 CPU/GPU 传感器数据
- System.IO.Ports:.NET 内置串口通信命名空间
关键代码片段
// 初始化硬件监控对象
Computer c = new Computer { GPUEnabled = true, CPUEnabled = true };
c.Open();
// 定时器中读取温度并发送
private void Status() {
foreach (var hw in c.Hardware) {
hw.Update();
foreach (var sensor in hw.Sensors) {
if (sensor.SensorType == SensorType.Temperature) {
if (hw.HardwareType == HardwareType.GpuNvidia) value1 = sensor.Value.GetValueOrDefault();
if (hw.HardwareType == HardwareType.CPU) value2 = sensor.Value.GetValueOrDefault();
}
}
}
port.Write($"{value1}*{value2}#"); // 协议格式
}
界面功能
- 串口自动扫描与下拉选择
- 刷新间隔可调(ComboBox)
- 连接/断开按钮、状态栏提示
- 最小化到系统托盘,双击恢复
- 必须以管理员权限运行,否则无法读取硬件传感器
常见问题排查
- LCD 无显示/乱码:用 I2C 扫描工具确认地址,修改
LiquidCrystal_I2C lcd(0x3F,16,2); - 串口打开失败:检查设备管理器确认 COM 口号,关闭占用该端口的其他程序
- 温度显示 0 或异常:确认 OpenHardwareMonitor 驱动已安装,且 GPU/CPU 类型匹配(代码默认 Nvidia GPU)
- 延迟大:缩短定时器间隔(最低建议 500ms),或改用二进制协议减少传输开销
扩展思路
- 增加风扇转速、内存占用、磁盘活动等传感器
- 改用 128×64 OLED 显示更多信息并支持图形化趋势图
- 加入 RGB LED 指示温度等级(绿/黄/红)
- 配合 3D 打印外壳做成精致桌面摆件
制造工艺
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- 用 Arduino 打造绚丽显示器 Ambilight 系统
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- 基于 Arduino 与 MAX30100 的实时物联网心率监测系统
- 热水器点火器监测器:Arduino Nano + 树莓派 Zero 监控热电偶电压,熄火即时推送
- Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
- DIY Arduino Nano 示波器:10 Hz–50 kHz / 128×64 LCD
- 基于 Arduino Nano 和 MAX30102 的心率监测仪(16x2 LCD 显示)
- 基于 Arduino Mega 与物联网传感器的高级家庭监控系统
- 打造可靠的 Arduino 气象站:DHT 传感器 + LCD + RTC
- 基于 Arduino UNO 构建可靠的智能能源监测仪——分步指南
- 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟