概要
利用AIDA64 Extreme软件可以以串口的形式输出电脑的各项性能数据这个功能,我们可以使用单片机读取这个串口数据,并将其显示在任意可以被单片机驱动的屏幕上,实现对电脑性能的实时监测。
整体架构流程
本系统使用:
AIDA64 Extreme软件
LCD1602液晶显示屏(背面带模块,可以直接用iic驱动的那种)
arduino nano单片机
我们先设置AIDA64软件,使其能够以串口形式输出数据:
再设置一下需要哪些电脑性能数据:
接着使用虚拟串口,虚拟出一对串口(COM1->COM2)
它在设备管理器中长这样:
我们上面设置了AIDA64的输出串口为COM1,现在我们只需要找一个串口监视器监视COM2,即可获得AIDA64输出的串口数据:
得到了AIDA64的串口输出样式,我们就能有针对性的编写程序来提取对我们有用的信息了!
把问题抛给AI,得到我们所需要的能提取串口数据中的信息的程序:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
// 用于存储解析后的数据
char cpuStr[4];
char ramStr[4];
char cStr[4];
char dStr[4];
// 串口通信的波特率
const int baudRate = 9600;
void setup() {
// 初始化串口通信
Serial.begin(baudRate);
// 初始化LCD1602
lcd.init();
lcd.backlight();
// 等待串口数据
Serial.println("等待数据...");
}
void loop() {
// 检查串口是否有数据可用
if (Serial.available() > 0) {
// 读取一行数据(直到遇到换行符)
String receivedData = Serial.readStringUntil('\n');
// 移除数据末尾的换行符和回车符(如果有的话)
receivedData.trim();
// 解析数据(假设数据格式固定为"CPU x% RAM x% C x% D x%")
int cpuIndex = receivedData.indexOf("CPU ") + 4;
int ramIndex = receivedData.indexOf("RAM ", cpuIndex) + 4;
int cIndex = receivedData.indexOf("C ", ramIndex) + 2;
int dIndex = receivedData.indexOf("D ", cIndex) + 2;
int cpuEndIndex = receivedData.indexOf('%', cpuIndex);
int ramEndIndex = receivedData.indexOf('%', ramIndex);
int cEndIndex = receivedData.indexOf('%', cIndex);
int dEndIndex = receivedData.indexOf(' ', dIndex + 1) - 1; // 假设D后面的值后面有空格或字符串结束
// 复制解析出的数据到字符数组(注意:这里假设数据长度不会超过3个字符)
strncpy(cpuStr, receivedData.substring(cpuIndex, cpuEndIndex).c_str(), 3);
strncpy(ramStr, receivedData.substring(ramIndex, ramEndIndex).c_str(), 3);
strncpy(cStr, receivedData.substring(cIndex, cEndIndex).c_str(), 3);
strncpy(dStr, receivedData.substring(dIndex, dEndIndex).c_str(), 3);
// 确保字符串以null字符结尾
cpuStr[3] = '\0';
ramStr[3] = '\0';
cStr[3] = '\0';
dStr[3] = '\0';
// 显示数据到LCD1602
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPU:");
lcd.print(cpuStr);
lcd.print("%");
lcd.setCursor(9, 0);
lcd.print("RAM:");
lcd.print(ramStr);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("C:");
lcd.print(cStr);
lcd.print("%");
lcd.setCursor(9, 1);
lcd.print("D:");
lcd.print(dStr);
lcd.print("%");
// 等待一段时间后再接收新的数据(可选)
delay(2000);
}
}
接下来烧录到单片机就成啦
哦,还要记得进AIDA64里面把输出端口改为单片机所在的端口,之前是为了测试,选择了COM1.
小结
这种通过读取串口信息获取数据的方法,自由性很强,可以用不同的单片机,不同的屏幕;
AI也很强大了,处理简单的编程问题也很方便,哈哈。
感谢…不记得名字了,还请感谢诸位提供的这个思路。
ps.封面图片是烟雾报警项目的面包板,借用了部分硬件设施,不要让面包板上其他模块迷惑你:)