資料介紹
描述
我想在屏幕上顯示我電腦的當(dāng)前狀態(tài),比如CPU使用率、內(nèi)存使用率、當(dāng)前溫度、風(fēng)扇轉(zhuǎn)速等信息。
在這個(gè)項(xiàng)目中,我使用AIDA64來收集電腦信息。
AIDA64 是由 FinalWire Ltd(一家匈牙利公司)開發(fā)的運(yùn)行在 OS 操作系統(tǒng)上的系統(tǒng)信息、診斷和審計(jì)應(yīng)用程序。它在 pc 或網(wǎng)頁上顯示有關(guān)計(jì)算機(jī)組件的詳細(xì)信息。網(wǎng)頁顯示信息的內(nèi)容和格式可以自定義。當(dāng)然,網(wǎng)頁格式對(duì)于我們的應(yīng)用來說是沒有用的。我們只需要 pc 運(yùn)行時(shí)狀態(tài)參數(shù)。
我使用wizfi360作為http客戶端來訪問這個(gè)網(wǎng)頁并獲取參數(shù)。WizFi360是一個(gè)WiFi模塊,可以通過命令連接WiFi,進(jìn)行TCP或TCP(SSL)連接。我用過很多次了,很方便。
RP2040作為一個(gè)MCU,從wizfi360獲取pc運(yùn)行狀態(tài)參數(shù)后,進(jìn)行數(shù)據(jù)處理,并將內(nèi)容顯示在屏幕上。
本項(xiàng)目分為四步:
第一步:設(shè)置AIDA64,使運(yùn)行參數(shù)可以通過http獲取;
Step2:在Arduino IDE中安裝庫文件和板卡支持
第三步:通過WizFi360從http獲取參數(shù),并解析參數(shù);
第四步:在屏幕上顯示電腦的運(yùn)行狀態(tài)(GC9A01);
以下是分步說明。
第一步:設(shè)置AIDA64,使運(yùn)行參數(shù)可以通過http獲取;
打開 Aida64 并轉(zhuǎn)到“文件”>>“首選項(xiàng)”>>“LCD”。然后勾選“啟用 Remotesensor LCD SUPPORT”。
進(jìn)入“LCD Items”,添加需要添加到LCD上顯示的運(yùn)行參數(shù)。
需要記錄下添加參數(shù)的“Label”和“Uint”,后面在Arduino IDE中會(huì)用到。
我分別添加了以下參數(shù):
中央處理器頻率
內(nèi)存使用情況
顯卡頻率
IP地址
溫度
“應(yīng)用”和“確定”保存。
Step2:在Arduino IDE中安裝庫文件和板卡支持
為 Arduino IDE 添加“WIZnet WizFi360-EVB-PICO”支持
打開 Arduino IDE 并轉(zhuǎn)到“文件”->“首選項(xiàng)”。
在彈出的對(duì)話框中,在“Additional Boards Manager URLs”字段中輸入以下 URL:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
通過“Board Manager”搜索“WizFi360”并安裝 Board 支持
“工具->開發(fā)板:”***”-> Raspberry Pi RP2040 Boards(2.6.1)”選擇“WIZnet WizFi360-EVB-PICO”。
添加“GFX Library for rduino”,該庫支持圓屏GC9A01。
Step3:通過WizFi360從http獲取參數(shù),并解析參數(shù);
#include "WizFi360.h"
// Wi-Fi info //
char ssid[] = "WIZNET_test"; // your network SSID (name)//
char pass[] = "********"; // your network password//
int status = WL_IDLE_STATUS; // the Wifi radio's status//
WiFiServer server(5051);
初始化WizFi360模塊的串口,修改波特率為2000000bps(wizfi360的最大波特率)。
第一次初始化為115200,然后在WiZfi360庫的初始化部分加入設(shè)置波特率(2000000),第二次改為2000000bps。
// initialize serial port for WizFi360 module//
#if defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO)
Serial2.begin(2000000);
WiFi.init(&Serial2);
Serial2.begin(2000000);
#endif
在“void setup()”中查看wifi的wizfi360 Link狀態(tài)
// check for the presence of the shield//
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// don't continue//
while (true);
}
// attempt to connect to WiFi network//
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Connect to WPA/WPA2 network//
status = WiFi.begin(ssid, pass);
}
Serial.println("You're connected to the network");
在電腦的80端口創(chuàng)建TCP Socket,獲取PC的運(yùn)行狀態(tài)。
// if you get a connection, report back via serial
if (client.connect(Aida64IpAddr, 80)) {
Serial.println("Connected to server");
// Make a HTTP request
client.println(String("GET /sse HTTP/1.1"));
client.println(String("Host: ") + (String)Aida64IpAddr);
client.println("Connection: close");
client.println();
data_now = 0;
json_String = "";
}
獲取到數(shù)據(jù)后,解析HTML的Header信息,將參數(shù)status存儲(chǔ)在一個(gè)String'json_String'中。
while (client.available()) {
myBuffer.push(client.read());
data_now =1;
}
if(data_now)
{
json_start = false;
while (myBuffer.pop(value)) {
Serial.print((char)value);
if(json_start)
{
json_String += (char)value;
}
if(value == 10) //ascii "\n"
{
if(find_n == true)
{
json_start = true;
find_n = false;
}
else
{
json_start = false;
find_n = true;
}
}
else
{
find_n = false;
}
}
Serial.println("json_String:");
Serial.println(json_String);
HTTP數(shù)據(jù)如下:
HTTP/1.1 200 OK
Content-Type: text/event-stream
Cache-Control: no-cache
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
Access-Control-Allow-Credentials: true
data: Page0|{|}Simple1|CPU Frequency 3890 MHz{|}Simple2|Memory Usage 56%{|}Simple3|GPU Frequency 350MHz{|}Simple4|IP Address 10.0.1.42/{|}Simple5|Temperature 48C{|}
我們需要的是“數(shù)據(jù)”部分,相關(guān)的參數(shù)可以通過下面的流程判斷分解出來。
uint16_t dataStart = 0;
uint16_t dataEnd = 0;
String dataStr;
//json_String = "data: Page0|{|}Simple1|CPU Frequency 998 MHz{|}Simple2|Memory Usage 43%{|}Simple3|GPU1 Usage 0%{|}Simple4|GPU2 Core Frequency 350 MHz{|}Simple5|IP Address 10.0.1.42/{|}Simple6|Motherboard Temperature 47{|}";
dataStart = json_String.indexOf("CPU Frequency") + strlen("CPU Frequency");
dataEnd = json_String.indexOf("MHz", dataStart);
dataStr = json_String.substring(dataStart, dataEnd);
Cpu_frequency = dataStr.toInt();
Serial.print("CPU Frequency:");
Serial.print(Cpu_frequency);
Serial.println("MHz");
dataStart = json_String.indexOf("Memory Usage") + strlen("Memory Usage");
dataEnd = json_String.indexOf("%", dataStart);
dataStr = json_String.substring(dataStart, dataEnd);
memory_usage = dataStr.toInt();
Serial.print("Memory Usage:");
Serial.print(memory_usage);
Serial.println("%");
dataStart = json_String.indexOf("GPU Frequency") + strlen("GPU Frequency");
dataEnd = json_String.indexOf("MHz", dataStart);
dataStr = json_String.substring(dataStart, dataEnd);
GPU_Frequency = dataStr.toInt();
Serial.print("GPU frequency:");
Serial.print(GPU_Frequency);
Serial.println("MHz");
dataStart = json_String.indexOf("Temperature") + strlen("Temperature");
dataEnd = json_String.indexOf("C", dataStart);
dataStr = json_String.substring(dataStart, dataEnd);
Temperature = dataStr.toInt();
Serial.print("Temperature:");
Serial.print(Temperature);
Serial.println("C");
dataStart = json_String.indexOf("IP Address") + strlen("IP Address");
dataEnd = json_String.indexOf("/", dataStart);
dataStr = json_String.substring(dataStart, dataEnd);
Serial.print("IP Address:");
Serial.print(dataStr);
Serial.println("/");
dataEnd = dataStr.indexOf(".", 0);
ip_uint8[0] = (dataStr.substring(0, dataEnd)).toInt();
Serial.println(ip_uint8[0]);
dataStart = dataEnd+1;
dataEnd = dataStr.indexOf(".", dataStart);
ip_uint8[1] = (dataStr.substring(dataStart, dataEnd)).toInt();
Serial.println(ip_uint8[1]);
dataStart = dataEnd+1;
dataEnd = dataStr.indexOf(".", dataStart);
ip_uint8[2] = (dataStr.substring(dataStart, dataEnd)).toInt();
Serial.println(ip_uint8[2]);
dataStart = dataEnd+1;
dataEnd = dataStr.indexOf(".", dataStart);
ip_uint8[3] = (dataStr.substring(dataStart, dataEnd)).toInt();
Serial.println(ip_uint8[3]);
這里我們使用前面記錄的關(guān)鍵字“Label”和“Uints”,分別作為參數(shù)的開始和結(jié)束,從而將“數(shù)據(jù)”分隔成一個(gè)單獨(dú)的運(yùn)行參數(shù)。
- CPU 頻率 MHz
- 內(nèi)存使用率
- GPU頻率 兆赫
- IP 地址 /
- 溫度 C
至此我們就完成了參數(shù)的獲取。
第四步:在屏幕上顯示電腦的運(yùn)行狀態(tài)(GC9A01);
#include
Arduino_GFX *tft = create_default_Arduino_GFX();
在“l(fā)ibraries\GFX_Library_for_Arduino\src\Arduino_GFX_Library.h”中定義 GC9A01 使用的引腳
#elif defined(ARDUINO_RASPBERRY_PI_PICO)||defined(ARDUINO_WIZNET_WIZFI360_EVB_PICO)||defined(ARDUINO_WIZNET_5100S_EVB_PICO)
#define DF_GFX_SCK 26
#define DF_GFX_MOSI 27
#define DF_GFX_MISO GFX_NOT_DEFINED
#define DF_GFX_CS 25
#define DF_GFX_DC 23
#define DF_GFX_RST 28
#define DF_GFX_BL 22
在“void setup()”中初始化屏幕并打開屏幕的背光
tft->begin();
tft->fillScreen(BLACK);
pinMode(22, OUTPUT);
digitalWrite(22, HIGH);
Display_Begin();
為了界面的美觀顯示,我們?cè)凇癝etup()”的時(shí)候編寫了界面的框架。
void display_dashboard()
{
tft->fillArc(120,120, 46, 120, 0, 90, OLIVE);
tft->fillRect(150,123,100,27,WHITE);
tft->setTextColor(OLIVE);
tft->setCursor(175, 125);
tft->setTextSize(3);
tft->println("LAN");
tft->fillArc(120,120, 117, 120, 0, 90, OLIVE);
tft->fillArc(120,120, 46, 48, 0, 90, OLIVE);
tft->fillArc(120,120, 46, 120, 90, 180, YELLOW);
tft->fillRect(0,123,100,27,WHITE);
tft->setTextColor(YELLOW);
tft->setCursor(15, 125);
tft->setTextSize(3);
tft->println("GPU");
tft->fillArc(120,120, 117, 120, 90, 180, YELLOW);
tft->fillArc(120,120, 46, 48, 90, 180, YELLOW);
tft->fillArc(120,120, 46, 120, 270, 360, GREEN);
tft->fillRect(150,90,100,27,WHITE);
tft->setTextColor(GREEN);
tft->setCursor(175, 92);
tft->setTextSize(3);
tft->println("RAM");
tft->fillArc(120,120, 117, 120, 270, 360, GREEN);
tft->fillArc(120,120, 46, 48, 270, 360, GREEN);
tft->fillArc(120,120, 46, 120, 180, 270, ORANGE);
tft->fillRect(0,90,100,27,WHITE);
tft->setTextColor(ORANGE);
tft->setCursor(15, 92);
tft->setTextSize(3);
tft->println("CPU");
tft->fillArc(120,120, 117, 120, 180, 270, ORANGE);
tft->fillArc(120,120, 46, 48, 180, 270, ORANGE);
tft->drawRoundRect(126,165,45,20,10,WHITE);
tft->drawRoundRect(127,166,43,18,9,WHITE);
tft->drawRoundRect(126,188,45,20,10,WHITE);
tft->drawRoundRect(127,189,43,18,9,WHITE);
tft->drawRoundRect(171,165,45,20,10,WHITE);
tft->drawRoundRect(172,166,43,18,9,WHITE);
tft->drawRoundRect(171,188,45,20,10,WHITE);
tft->drawRoundRect(172,189,43,18,9,WHITE);
tft->fillArc(120,120, 39, 45, 0, 360, WHITE);
tft->fillCircle(120,120,39,GREENYELLOW);
tft->setTextColor(WHITE);
tft->setTextSize(3);
tft->setCursor(43, 55);
tft->println("MHz");
tft->setCursor(175, 30);
tft->println("%");
tft->setCursor(58, 192);
tft->println("MHz");
tft->drawRoundRect(132,55,60,20,10,WHITE);
tft->drawRoundRect(133,56,58,18,9,WHITE);
}
此時(shí)屏幕顯示如下:
在STEP3中獲取到參數(shù)后,通過以下處理,將屏幕顯示更新為PC的運(yùn)行參數(shù)。
if(Temperature < 60)
{
tft->fillCircle(120,120,39,GREENYELLOW);
}
else if(Temperature < 85)
{
tft->fillCircle(120,120,39,ORANGE);
}
else
{
tft->fillCircle(120,120,39,RED);
}
tft->setTextColor(WHITE);
tft->setCursor(85, 104);
tft->setTextSize(4);
tft->println(Temperature);
tft->setCursor(140, 112);
tft->setTextSize(3);
tft->println("C");
tft->setCursor(133, 99);
tft->setTextSize(2);
tft->println("o");
tft->fillRect(43,30,70,25,ORANGE);
tft->setTextColor(WHITE);
tft->setCursor(43, 30);
tft->setTextSize(3);
tft->println(Cpu_frequency);
tft->fillRect(132,30,35,25,GREEN);
tft->setTextColor(WHITE);
tft->setCursor(132, 30);
tft->setTextSize(3);
tft->println(memory_usage);
tft->fillRoundRect(136,58,54,14,8,GREEN);
uint8_t memory_uint8 = memory_usage*54/100;
tft->fillRoundRect(136,58,memory_uint8,14,8,WHITE);
tft->fillRect(31,165,80,25,YELLOW);
if(GPU_Frequency>=1000)
{
tft->setCursor(43, 165);
}
else
{
tft->setCursor(58, 165);
}
tft->setTextSize(3);
tft->println(GPU_Frequency);
tft->setTextSize(2);
tft->setCursor(131, 168);
tft->println(ip_uint8[0]);
tft->setCursor(176, 168);
tft->println(ip_uint8[1]);
tft->setCursor(131, 191);
tft->println(ip_uint8[2]);
tft->setCursor(176, 191);
tft->println(ip_uint8[3]);
完畢。
?
- Pi Skype監(jiān)視器開源分享
- 無線串口監(jiān)視器開源分享
- 車庫門監(jiān)視器開源分享
- 管道監(jiān)視器開源設(shè)計(jì)
- CPU和RAM使用監(jiān)視器開源分享
- 模擬讀取串行監(jiān)視器開源硬件
- 用作雷達(dá)安全監(jiān)視器的計(jì)算機(jī)屏幕上檢測(cè)和顯示運(yùn)動(dòng)
- 小馬駒監(jiān)視器開源分享
- 健康監(jiān)視器開源分享
- OctoPrint打印監(jiān)視器開源分享
- 電源監(jiān)視器開源項(xiàng)目
- VESA和計(jì)算機(jī)顯示監(jiān)視器定時(shí)(DMT)的行業(yè)標(biāo)準(zhǔn)和指南 21次下載
- 主流的開源硬件有哪些詳細(xì)資料說明
- 采用無線傳感器網(wǎng)絡(luò)監(jiān)測(cè)步進(jìn)電機(jī)運(yùn)行狀態(tài)的設(shè)計(jì)應(yīng)用 13次下載
- 計(jì)算機(jī)硬件知識(shí)試題
- 計(jì)算機(jī)控制器的結(jié)構(gòu)和功能 792次閱讀
- 工業(yè)計(jì)算機(jī)與普通計(jì)算機(jī)的區(qū)別 609次閱讀
- 如何創(chuàng)建自定義監(jiān)視器? 516次閱讀
- 堅(jiān)固的接觸式監(jiān)視器簡(jiǎn)化了車身控制計(jì)算機(jī)的設(shè)計(jì) 465次閱讀
- 一文詳解單相變壓器空載運(yùn)行狀態(tài) 8457次閱讀
- 什么是堅(jiān)固型邊緣計(jì)算機(jī)?邊緣計(jì)算的計(jì)算機(jī)硬件需求是什么? 2997次閱讀
- 計(jì)算機(jī)系統(tǒng)的硬件組織詳細(xì)概述 4104次閱讀
- 源創(chuàng)通信BPI-M1+ 開源硬件開發(fā)板介紹 2648次閱讀
- 電機(jī)額定運(yùn)行狀態(tài)_電機(jī)額定運(yùn)行方式 5792次閱讀
- 基于EDA技術(shù)的計(jì)算機(jī)硬件系統(tǒng)設(shè)計(jì)方案 1531次閱讀
- 同步電機(jī)的三種運(yùn)行狀態(tài) 2.7w次閱讀
- 基于EDA技術(shù)的計(jì)算機(jī)硬件系統(tǒng)設(shè)計(jì) 1028次閱讀
- 計(jì)算機(jī)的存儲(chǔ)器主要作用_計(jì)算機(jī)的存儲(chǔ)器的分類介紹 1.1w次閱讀
- 計(jì)算機(jī)網(wǎng)絡(luò)有哪些作用_計(jì)算機(jī)網(wǎng)絡(luò)硬件有哪些 1.1w次閱讀
- 液晶監(jiān)視器的選購與保養(yǎng) 1022次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多