手上还有一些以前买来的配件,就做点东西玩玩吧。一个arduino开发板,一块lcd 1602的显示屏,一些数据线,就这么多东西了,开工!
首先测试了aida64这个软件可以发送系统的状态数据到串口。
试了好几个显示屏,找到一个比较适合读取数据的:

然后分析了数据规则,写个代码让arduino开发板接收这些数据,并显示到lcd 1602显示屏上,就这么简单就完成了.
代码修改了好几次,功能实现了,又想优化成简单点,又想提高效率.......
//LCD1602 I2C配置
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
Serial.begin(9600); //打开串口
lcd.init();
lcd.begin(16, 2);
lcd.backlight();
lcd.print(" Hello world ");
delay(3000);
lcd.clear();
lcd.print("CPU: TMP: ");
lcd.setCursor(0, 1); //换行
lcd.print("MEM: GPU: ");
}
void loop()
{
if (Serial.available())
{
char val = Serial.read();
if ( (val == 0x48) )
{
delay(2);
for (int i=0; i<76;i++)
{
if (Serial.available())
{
val = Serial.read();
//Serial.println(val,HEX);
if (i == 0) { lcd.setCursor(4,0); lcd.write(val);}else
if (i == 1) { lcd.setCursor(5,0); lcd.write(val);}else
if (i == 2) { lcd.setCursor(6,0); lcd.write(val);}else
if (i == 20) { lcd.setCursor(12,0); lcd.write(val);}else
if (i == 21) { lcd.setCursor(13,0); lcd.write(val);}else
if (i == 22) { lcd.setCursor(14,0); lcd.write(val);}else
if (i == 40) { lcd.setCursor(4,1); lcd.write(val);}else
if (i == 41) { lcd.setCursor(5,1); lcd.write(val);}else
if (i == 42) { lcd.setCursor(6,1); lcd.write(val);}else
if (i == 60) { lcd.setCursor(12,1); lcd.write(val);}else
if (i == 61) { lcd.setCursor(13,1); lcd.write(val);}else
if (i == 62) { lcd.setCursor(14,1); lcd.write(val);}else
{delay(2);}
}
}
}
}
}
打印一个外壳,完工。


这东西能把电脑当前的各种数据发送到显示屏上,例如CPU使用率,温度,内存,风扇速度,GPU各种数据,显存之类。

首先测试了aida64这个软件可以发送系统的状态数据到串口。
试了好几个显示屏,找到一个比较适合读取数据的:

然后分析了数据规则,写个代码让arduino开发板接收这些数据,并显示到lcd 1602显示屏上,就这么简单就完成了.
代码修改了好几次,功能实现了,又想优化成简单点,又想提高效率.......
//LCD1602 I2C配置
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
void setup()
{
Serial.begin(9600); //打开串口
lcd.init();
lcd.begin(16, 2);
lcd.backlight();
lcd.print(" Hello world ");
delay(3000);
lcd.clear();
lcd.print("CPU: TMP: ");
lcd.setCursor(0, 1); //换行
lcd.print("MEM: GPU: ");
}
void loop()
{
if (Serial.available())
{
char val = Serial.read();
if ( (val == 0x48) )
{
delay(2);
for (int i=0; i<76;i++)
{
if (Serial.available())
{
val = Serial.read();
//Serial.println(val,HEX);
if (i == 0) { lcd.setCursor(4,0); lcd.write(val);}else
if (i == 1) { lcd.setCursor(5,0); lcd.write(val);}else
if (i == 2) { lcd.setCursor(6,0); lcd.write(val);}else
if (i == 20) { lcd.setCursor(12,0); lcd.write(val);}else
if (i == 21) { lcd.setCursor(13,0); lcd.write(val);}else
if (i == 22) { lcd.setCursor(14,0); lcd.write(val);}else
if (i == 40) { lcd.setCursor(4,1); lcd.write(val);}else
if (i == 41) { lcd.setCursor(5,1); lcd.write(val);}else
if (i == 42) { lcd.setCursor(6,1); lcd.write(val);}else
if (i == 60) { lcd.setCursor(12,1); lcd.write(val);}else
if (i == 61) { lcd.setCursor(13,1); lcd.write(val);}else
if (i == 62) { lcd.setCursor(14,1); lcd.write(val);}else
{delay(2);}
}
}
}
}
}
打印一个外壳,完工。



这东西能把电脑当前的各种数据发送到显示屏上,例如CPU使用率,温度,内存,风扇速度,GPU各种数据,显存之类。
