色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>計(jì)算機(jī)運(yùn)行狀態(tài)監(jiān)視器開源硬件

計(jì)算機(jī)運(yùn)行狀態(tài)監(jiān)視器開源硬件

2023-02-01 | zip | 0.07 MB | 次下載 | 免費(fèi)

資料介紹

描述

我想在屏幕上顯示我電腦的當(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”。

poYBAGPXaz6AWr30AAMyz1lzyd8731.png
?

進(jìn)入“LCD Items”,添加需要添加到LCD上顯示的運(yùn)行參數(shù)。

需要記錄下添加參數(shù)的“Label”和“Uint”,后面在Arduino IDE中會(huì)用到。

poYBAGPXa0SAR495AAQkpcWVJ_4307.png
?

我分別添加了以下參數(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

pYYBAGPXa0eAL9hTAACxAHM3qso476.png
?

通過“Board Manager”搜索“WizFi360”并安裝 Board 支持

poYBAGPXa0qAN5QqAACe1QC8QDU245.png
?

“工具->開發(fā)板:”***”-> Raspberry Pi RP2040 Boards(2.6.1)”選擇“WIZnet WizFi360-EVB-PICO”。

poYBAGPXa0-AC7CDAAE_T1iYX24076.png
?

添加“GFX Library for rduino”,該庫支持圓屏GC9A01。

pYYBAGPXa1KAcEdnAACIEz90eHs431.png
?

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);
pYYBAGPXa1SADo4yAABZmHAN7t8080.png
?

初始化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 使用的引腳

poYBAGPXa1eAfoaHAABw5QKPMqQ505.png
?
#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í)屏幕顯示如下:

poYBAGPXa1uATcYhAAHLxjrQ7RQ684.png
?

在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]);

完畢。

?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
主站蜘蛛池模板: 久久中文字幕综合不卡一二区| 97se se| 国家产午夜精品无人区| 午夜毛片在线观看| 国产精品高清视频在线| 外女思春台湾三级| 国产精品视频大全| 性夜a爽黄爽| 国精品产露脸偷拍视频| 亚洲精品乱码一区二区三区 | 国产精品自在自线亚洲| 网红刘婷hd国产高清| 国产美女影院| 亚洲欧美视频在线| 久久黄色网| 506070老熟肥妇bbwxx视频| 暖暖在线观看播放视频| 99日韩精品| 日韩欧美一区二区三区在线视频 | 国产一区二区精品视频| 人妻精品久久无码专区| 91羞羞视频| 免费一级片网站| 97超碰在线视频人人av| 免费播放美女一级毛片| 伊人久久青草| 欧美高清videos 360p| 2020久久精品永久免费| 女人久久WWW免费人成看片| 欧美日本韩国一二区视频| 被肉日常np高h| 日本无修肉动漫在线观看| 成人女人A级毛片免费软件| 石原莉奈rbd806中文字幕| 国产无遮挡无码视频在线观看不卡 | 中文字幕欧美一区| 免费观看的毛片| 第一福利在线永久视频| 乡村教师电影版| 久久精品国产亚洲AV蜜臀| 99re28久久热在线观看|