一種使用ESP32和AIDA64,通過WIFI發(fā)送硬件狀態(tài)實現(xiàn)VFD副屏的方法,

眾所周知,通過AIDA64軟件,我們可以實現(xiàn)一個電腦硬件監(jiān)控副屏,這種網(wǎng)上有很多教程,我開始也是看的網(wǎng)上的教程準備做一個副屏的??偨Y(jié)起來,有三種方法可以實現(xiàn):
使用SensorPanel,這種就是相當于制作一個窗口,里面顯示各種信息,然后拖到副屏里去,調(diào)整大小讓其占滿整個副屏
使用RemoteSensor,這種方法相當于建立了一個web服務(wù)器,布局設(shè)置和SensorPanel是一樣的,不過是通過瀏覽器顯示的,這種一般是需要一個不用的手機當作副屏的
使用其他的顯示模塊,點開LCD菜單就能看到AIDA64支持很多型號的LCD,OLED,VFD之類的屏幕,這種是需要串口或USB進行通信的
綜上,如果選擇前兩種,需要準備一個副屏或者手機,成本有點過高了,如果使用第三種,需要連接串口線,但是我的電腦只有3個USB口,鍵盤一個鼠標一個,還有一個要插U盤或者手柄,不能一直拿來插屏幕,就想到有沒有辦法通過WIFI把數(shù)據(jù)發(fā)出去呢,自然是有的,因為RemoteSensor本來就是一個Web服務(wù)端啊,只要給它發(fā)送請求,就能拿到數(shù)據(jù)了,然后解析出來再通過屏幕顯示就好了。
我這里選擇了ESP32作為控制器,因為它有WIFI功能,顯示屏選了GP1294AI VFD屏幕,選它是因為在淘寶搜屏幕的時候恰好看到了感覺很有科技感就買了。下面是完成后的效果,當然,本文只是提供一個通過WIFI傳遞硬件數(shù)據(jù)的方法,不一定要用一樣的控制器和顯示屏。



1,首先當然是驗證WIFI發(fā)送數(shù)據(jù)是否可行了,打開AIDA64->設(shè)置->LCD->RemoteSensor,選擇一個端口,這里我用的8080,因為我的80端口無法通過其他設(shè)備訪問,搜了下說可能是被運營商屏蔽了??傊嘣囋?,選一個能用的端口就行,具體怎么試后面說。然后勾選啟用RemoteSensor LCD支持。

2,之后選擇LCD 項目,在里面添加一些需要顯示的內(nèi)容,這里是我已經(jīng)布置好的內(nèi)容,這個就不說了,基本上上手就會用,其他教程也很多

這里要注意的就是類別,項目類別有以下幾種,分別是柱狀圖(Sensor item),數(shù)值(Simple sensor item),文本(Static label),圖片(Image),圖表(Graph)和表盤(Arc Gauge),我這里只解析了文本和數(shù)值,其它的因為我暫時沒用到,所以現(xiàn)在只支持Simple sensor item和Static lable這兩類,記住這兩個類型的名字,因為后面還要說。

3,上面添加完項目之后,我們將地址和端口輸入瀏覽器訪問下
關(guān)于怎么看地址,首先WIN+R鍵,然后輸入cmd,回車,打開命令行,輸入ipconfig回車就能看了



我是電腦開的熱點給ESP32連接的,所以是無線局域網(wǎng) 本地連接2那個,ip是192.168.137.1,端口號是8080,在瀏覽器輸入192.168.137.1:8080訪問,如果是ESP32和電腦同時連接一個WIFI,那就是上面那個無線局域網(wǎng) WLAN的地址了,順便一說ESP32的WIFI頻段是2.4GHz,所以單5G和雙頻段的WIFI都連不上的,我就是沒辦法只能電腦開熱點了
這里最好用同一個WIFI下的其他設(shè)備訪問這個地址,因為windows防火墻可能會攔截其他設(shè)備,如果訪問不了,把防火墻關(guān)了試試,也可能是端口被屏蔽無法訪問,需要換一個端口。

4,可以看到web瀏覽器正在顯示剛剛配置的項目,并且數(shù)據(jù)不斷刷新,按下F12,看網(wǎng)頁HTML代碼

往下翻,看到這里有很多span元素,正是我們剛剛設(shè)置的那些項目,里面有很多屬性,大部分沒什么用,都是格式之類的,只有id屬性和元素的主體(就是>和<夾著的那段數(shù)據(jù))我們需要提取出來。
可以看到,這里元素所顯示的數(shù)據(jù)和實際有些不符,只有文本類項目的值是對的,其他如時間,CPU占用率這些數(shù)據(jù)都是預(yù)設(shè)的固定值,這里主要是提取出所有的項目,給他們分配一個結(jié)構(gòu)保存起來,之后還會再發(fā)送請求刷新數(shù)據(jù)。這里貼個解析的代碼:
5,之后就是獲取刷新的數(shù)據(jù)了,可以看到HTML里有很多JS代碼,應(yīng)該就是靠這些來刷新數(shù)據(jù)的,可惜我沒了解過web開發(fā),看不懂代碼,于是直接用wireshark抓包了一下。

發(fā)現(xiàn)在瀏覽器發(fā)送了一個GET /sse的請求后,開始不斷收到數(shù)據(jù)
為了驗證,使用curl發(fā)送一個HTTP請求試試

果然,開始不斷收到刷新數(shù)據(jù),至此,獲取刷新數(shù)據(jù)也成功實現(xiàn)了,只要發(fā)送一個GET /sse請求,然后不斷接收HTTP響應(yīng),再把數(shù)據(jù)提取出來就好了。
可以看到這里的HTTP響應(yīng)體,數(shù)據(jù)都是在‘ {|} id | 內(nèi)容?{|} '這樣的結(jié)構(gòu)中,需要和上面一樣把id和內(nèi)容提取出,然后對比之前保存的項目的id,替換對應(yīng)的內(nèi)容。貼個代碼:
到這里,已經(jīng)成功實現(xiàn)了獲取AIDA64的數(shù)據(jù)。
二,硬件的連接
VFD屏幕的引腳:

GP1294AI VFD屏的資料是商家給的,驅(qū)動板資料如下:

上下各有6個接口,上面那6個接口是要用的,可以看出使用的是SPI通信,從上至下分別是VCC, SCLK, CS, SDA, RST, GND引腳
我用的是ESP32-WROOM-32 30引腳的開發(fā)板,網(wǎng)上查了下引腳圖如下:

可以使用VSPI進行通信,VSPI有四個引腳,因為不需要讀取數(shù)據(jù),所以MISO不用,那么接線就是:
VCC -> 3V3
SCLK -> GPIO18(VSPI CLK)
CS -> GPIO5(VSPI CS0)
SDA -> GPIO23(VSPI MOSI)
RST -> GPIO21? //隨便選一個能用的就行
GND -> GND
最后附一個接線圖:

三,軟件部分
開發(fā)環(huán)境使用的是VSCODE,裝了platform IO插件,本來是用的Arduino IDE的,用了兩天感覺不好用就換了,這個在網(wǎng)上搜一下就有很多教程,要注意的是第一次創(chuàng)建項目的時候要下載好久,我開了魔法但是也沒效果,最后等了3個小時才好。
然后Board選擇的是Espressif ESP32 Dev Module,F(xiàn)ramework選擇的是Arduino

之后就是按照上面的流程寫代碼就好,Arduino的庫還是很好用的,主要部分就是連接WIFI,發(fā)送HTTP請求,解析數(shù)據(jù),然后顯示。
顯示部分使用的是商家給的庫,在U8g2庫上改的,我看了下原版U8g2好像沒有這個型號的顯示屏。因為用的是U8g2庫,所以修改成其他顯示屏也很方便,只需要改一下定義時的類和引腳就好

這里使用的是硬件SPI,所以只需要自己定義CS和RST引腳,SPI的接線就和上面一樣就行
然后貼一個HTTP部分的代碼,主要是讀數(shù)據(jù)的:
主要就是這些,其他的WIFI連接,U8g2顯示之類的網(wǎng)上就有很多例子,我這里就主要介紹一下怎么讀數(shù)據(jù),解析數(shù)據(jù)了。本來寫這篇就只是想分享一下通過WIFI發(fā)送AIDA64的監(jiān)控數(shù)據(jù)到ESP32模塊的方法,顯示屏甚至ESP32都是可以替換的。

然后是我自己的ESP32連接GP1294AI的項目代碼:
https://github.com/Electroenix/ESP32_AIDA64_GP1294AI
之后也會在這里面增加詳細的說明
