Hétvégi projekt: Rendszermonitort a gépbe!

Sokan szeretik látni a gépük erőforrás használatát valamilyen módon. Így vagyok ezzel én is, viszont nem szeretem az olyan megoldásokat, amik egy widgetként, vagy overlayként jelenítik meg ezeket a képernyőn.

Általában játék közben hasznosak ezek az infók, de ebben az esetben az ember nem váltogat ki, overlay meg kitakar a játékból, rosszabb esetben gondokat is okoz (nálam a Discord nem szereti a Steam overlayét).

És akkor itt jött az ötlet: Építek egy hardwares rendszermonitor widgetet a gépbe! :)

A terv az volt, hogy egy kis LCD kijelzőt építekbe, amin megjelennek a fontosabb adatok:

CPU / GPU kihasználtság, hőmérsékletek, ventilátor fordulatszámok, és persze a VGA / rendszermemória használata.

 

Mi kell hozzá?

Egy LCD kijelző és valami ami meghajtja.

A kijelző esetében egy 2.8" Nextion kijelzőre esett a választás. Eredetileg kicsit nagyobbat akartam, de abból itthon nem lehetett ép kapni, külföldről rendelni pedig nem akartam, mert 1+ hónap mire megjönne ugye.

A Nextion nagyon jó kis kijelzőket gyárt, és nem csak méretben de tudásban is van választék: https://nextion.tech

Amit én használok, annak 4 Mb menórája van, amibe feltölthetünk különböző elemeket, amiket meg akarunk majd jeleníteni: képek, betűkészletek, UI elemek, és itt tárolódik a program is amit a kijelző futtat.
A kijelző egyébként érintő kijelző is egyben, de ez a funkciója jelen esetben kihasználatlan marad.

Kell még valami ami majd vezérli a kijelzőt. Ez lehet bármi ami tud soros kapcsolatot vele létesíteni, akár egy USB -> serial átalakító (FTDI). Vagy egy mikrokontroller, pl. Arduino.

Habár nem a leglogikusabb választás, de én az utóbbit választottam. Hogy miért is, arról majd később.

 

Hogy kerül a kép a kijelzőre?

Az UI létrehozáshoz van egy remek kis program, amivel egyszerűen felpakolhatunk minden elemet a kijelzőre úgy, ahogy azt majd a valóságban látni szeretnénk. Ezeknek az elemeknek a tulajdonságait majd programból lehet módosítani. 

Első körben vektor grafikusan megterveztem, hogy is nézne majd ki a képernyőm. Majd ugyanezt elkezdtem megvalósítani a Nextion Editorban. Az edirorban szinte minden UI elem megtalálható ehhez, kivéve a kör grafikon. Ezt magam rajzoltam!

Ez utóbbi esetében ugye 0-100% kijelzésre van szükség, és ha szép grafikont akarunk, akkor ez 101 képet jelent. Ráadásul külön van címke mindkettőn (CPU, GPU), így ez igazából 202 kép. Nincs az az ember aki ezt egyesével megcsinálná, így ezen kicsit automatizáltam.
Megcsináltam a grafikont vektor grafikusan, ami ugye igazából egy szöveges leírónyelv. Ezt aztán programból módosítottam úgy, hogy generálódjon nekem 101 változat a százalékoknak megfelelő körcikkekkel, számokkal.

Illetve kellett még maga a háttérkép, amire ezek az elemek rákerülnek.

 

 

Az elkészült képernyőt már csak fel kell tölteni, amire két lehetőség van:
Vagy rámásoljuk egy SD kártyára és azt behelyezve a képernyő SD foglalatába, felmásolja annak tartalmát a memóriába
Vagy pedig egy USB -> soros átalakítóval egyenesen a programmal töltetjük fel. 

Utóbbi a legegyszerűbb, így én is ezt az opciót választottam. 

Mivel minden UI elemhez tartozik egy azonosító, így egyszerűen tudjuk annak értékeit módosítani a megfelelő parancsok átadásával ami a soros porton küldünk a kijelzőnek. 

 

Vezérlés Arduinoval

Tehát ahogy említettem én Arduinoval vezérlem. Méghozzá azért, mert már eleve van egy Arduino a gépben, ami az Ambilightomat működteti. Erről részletesebben itt írtam.

Tehát adott volt, hogy erre kötöm az kijelzőt is, így nem kell plusz egy kütyű a gépbe, még ha csak egy USB -> soros illesztő is lenne az. Illetve szoftveresen is gazdaságosabb, de erről majd kicsit lentebb.

Arduinohoz ráadásul létezik Nextion kijelzők kezeléséhez függvénykönyvtár, amivel pár egyszerű paranccsal lehet az UI elemeket babrálni. 

Itt aztán jött is az első gond! Nem elég szegény Arduino Nano memóriája a Nextion és a LED kezelő libek futtatásához. Sebaj, van itthon egy Arduino Mega is, így a projekt fejlesztése ezen folyt tovább. Mondhatnánk overkillnek ezt a boardot, de mivel ez az Arduino más feladatokat is fog még a jövőben ellátni, nem az!

Szuper, most már mindent az Arduino vezérel: Ambilightot , LCT-t. De hogy kapja meg az Arduino a rendszeradatokat, amiket majd át kell passzolnia az LCD-nek?

A PC-s program

Kell egy programi ami kinyeri a szükséges rendszerinfókat és küldi az Arduinonak. Mivel ilyen programom már van, történetesen ami az Ambilighthoz küldi az RGB színadatokat, így gondoltam ezt fejlesztem tovább, hogy a rendszeradatokat is küldje.

Ahogy az Amibilighotos posztban is írtam, ezt a programot nem én fejlesztettem, de itt-ott már belenyúltam, hogy az én igényeimnek megfelelőre alakítsam a tudását. Most viszont még jobban átalakítottam!

Nem akartam feltalálni a spanyolviaszt, így kerestem valami kész megoldást, amit csak használni kell a rendszerinfók lekéréséhez. Meg is találtam ezt az Open Hardware Monitor személyében.
Ez egy nyílt forrású rendszer információs program, ami még többet is tud ami nekem kell.

De hogy lehet ezt használni egy C programomban? Egyszerű!
Csak be kell tölteni a OpenHardwareMonitorLib.dll fájlt és máris használhatóak a benne lévő függvények.
Sőt, még példa program is van rá.

Tehát nagyon egyszerűen fel lehetett vértezni a kis programot, hogy a HW infót is kinyerjen. Ezeket aztán fél másodpercenként el is küldi az Arduinonak, ami a megfelelő formában küldi tovább az LCD-nek. 

Tervben volt még, hogy FPS számot is megjelenítek a kijelzőn, de kis kutatás után erről lemondtam. Sajnos azt nem ilyen egyszerű megvalósítani. Talán majd egyszer még mélyebben belemerülök és lesz ilyen is.

Építsük bele a gépbe!

A prototípus nem másba került bele, mint abba a kis dobozba, amiben egyébként érkezett. :)
Persze a terv az, hogy ez a gépbe kerül bele, így a következő lépés ennek kivitelezése volt.

Sokat gondolkodtam hol lenne jó helye, végül arra jutottam, hogy a gép végében a hátsó falon, kicsit ferdén, hogy a székben ülve pont jól rálássak.

Divat manapság az alaplapok csatlakozót eltakarni, ami az én alaplapomon még nem volt gyárilag. Gondoltam készítek rá egy takarót, ami egyben az LCD burkolata is lesz. Ezt első körben kartonból építtettem meg, hogy lássam jól kiadja-e, jó-e a rálátás és egyáltalán tetszik-e majd így...

Tetszett! Jöhetett a stabilabb megvalósítás.
Ej ha lenne 3D nyomtatóm... de sajnos még nincs! :(
Így maradt a kreatívabb megvalósítás. Vettem egy szép nagy fehér műanyagdoboz a Pepcoban, aminek a tetejéből elkészült a burkolat. Mérés, rajzolás, vágás, hajlítás, ragasztás és tökéletes lett. Talán szebb is mintha nyomtatva lenne :)

Kétoldalú ragasztóval lett a házra fogatva, így talán ha egyszer leszedném, akkor nem lesz olyan nehéz megtenni.

Az Arduinot is be kellet építeni, de mivel ez a ház másik oldalára került, így ide csak egy L alakú felfogató konzolt csináltam neki, amire fel van csavarozva maga az Arduino és ez az egész a ház hátsó oldalára. 
Képeken a kábel management mint olyan még nem létezik, azt ne is figyeljétek! :D

És hát ennyi! Működik és szerintem egész klasszul is néz ki. 

Később ez az Arduino fogja vezérelni a ventilátorok LED-jeit, illetve a vízpumpa és a még nem bekerült M.2 SSD hűtés színeit is. Természetesen ezek is a PC-s progiból lesznek állíthatóak.

 

Hozzászólások

A nextion tényleg nagyon baba. Én anno valami kínai SPIs olcsó kijelzővel toltam.

Általában játék közben hasznosak ezek az infók

Egyébként miért? Engem játék közben pont nem szokott érdekelni, a játékra szeretnék fókuszálni.

Ez csak ilyen haszontalan infó ami elsőre praktikusnak tűnik, de egyébként nem. Mármint amíg belövöd a grafikát addig oké hogy látod hogy cpu vagy gpu bottleneck, de utána max eyecandy.

Én villanyrollerre vettem speckó kijelzőt, mutatott az mindent feszültségektől kezdve a megtehető hatótávon át az aktuális gyorsulás áramerősségén át mindent. Egy hétig vicces volt, utána meg rá se néztem. Idővel vissza is raktam az eredeti "kijelzőt" amin van 4 led oszt pacsi (M365).

 

Ettől függetlenül maga a build frankó és hibátlan hétvégi projektnek ;)

Okosóra nálam is hasonló, egészen addig értelmetlen amíg teljesen nem tudja kiváltani az okostelefont, de ugye azt nem olyan egyszerű a kamera miatt óra formátumban.

Ellenben egy fitness karkötő baromi praktikus, egyrészt nem kell hurcolnom a lakáson belül a telefonomat mert mindig rezeg ha csörgök/sms-t kapok, reggel tudok úgy korán ébredni hogy nem verem fel asszonyt/gyereket, na meg azért picit motivál hogy látom hány lépést tettem és azért törekszem rá hogy meglegyen a célom. Kb 2 hetente elég tölteni és akkor is 20 perc alatt csutkán van.

Így ebben a formátumban hibátlan, de bármi más okosóra nekem csak egy rohadt drága notification center amit rohadt sűrűn kell tölteni és tök felesleges ha amúgy is nálam van a telefon.

Ízléses a cucc, nekem tetszik :)