Close
0%
0%

Gnat-Stats, Tiny OLED PC Performance Monitor

Arduino OLED PC Performance Monitor with Client software

Similar projects worth following
Gnat-Stats, Tiny OLED PC Performance Monitor.

After a recent purchase of a Nvidia GTX1080 graphics card, 4k monitor, plus Doom(2016), I thought it would be great to see some external telemetry..

I then Stumbled upon Psyrax's Hackaday.IO project.

Armed with an Arduino ProMicro and a 128x64 pixel OLED display, I compiled the source code.

The GnatStats Hardware Serial Monitor Visual Studio application is based around Psyrax's "SerialSender" Application , yet heavily modified by Colin Conway.

(Auto Reconnect, CPU/GPU Hardware Name ID's, Frequencies, Serial activity display timeout)

GnatStats_ProMicro_STM32_TFT_V1.5.zip

TFT Version 1.5. : STM32 BluePill & ProMicro Suppport : 128x160 ST7735 & 240x320 ILI9341 TFT Support : Add PWM Output for Back Light : Separate "Configuration_Settings.h" to make setting up easier

x-zip-compressed - 23.51 kB - 03/21/2019 at 16:57

Download

GnatStats_ProMicro_STM32_OLED_V1.41_CFG.zip

Add separate "Configuration_Settings.h" to make setting up easier

x-zip-compressed - 17.00 kB - 03/21/2019 at 22:44

Download

GnatStats_ProMicro_STM32_OLED_V1.4.zip

Version 1.4 : STM32 BluePill Support : Remove PowerPin Support

x-zip-compressed - 16.67 kB - 03/17/2019 at 18:00

Download

GnatStats_Release_V1.31.zip

Version 1.31: MOVE CONFLICTING!!! NEOPIXEL PIN TO 10, Option to trigger an event at a given CPU or GPU threshold eg: LED indicator at 100% CPU Load. Top Config option to disable all pre-selected power/gnd pins on Arduino pins D4 and D5 when not powering OLED from ProMicro Top Config option to disable/enable "activitychecker" (Enable blank screen on serial timeout eg: PC powered down, Disable to retain last sampled info eg: PC crash or overclocking diagnostics)

x-zip-compressed - 15.80 kB - 01/25/2019 at 17:42

Download

Gnat-Tacho Overlay 47.75mm v2.zip

Gnat-Stats circular tachometer dial overlay graphic

x-zip-compressed - 1.55 kB - 10/25/2018 at 22:21

Download

View all 8 files

  • 1 × Arduino ProMicro
  • 1 × SSD1306 or SH1106 OLED Display

  • Gnat-Stats TFT Version 1.5

    Rupert Hirst2 days ago 0 comments

    TFT Version 1.5 

    : STM32 BluePill & ProMicro Suppport
    : 128x160 ST7735 & 240x320 ILI9341 TFT Support
    : Add PWM Output for Back Light
    : Separate "Configuration_Settings.h" to make settings easier

    2.8" ILI9341 240x320  Running on a BluePill STM32.  A bit large maybe to be called Gnat-Stats :)

  • Gnat-Stats OLED Version 1.4

    Rupert Hirst6 days ago 0 comments

    Gnat-Stats OLED v1.4  

    : STM32 BluePill Support
    : Remove PowerPin Support


    Gnat-Stats small TFT versions coming soon.

  • Hardware Serial Moniitor v1.1

    Rupert Hirst10/16/2018 at 11:29 0 comments

    Hardware Serial Moniitor updated to v1.1

    Compiled with  .Net 4.6.2  to make use of LibreHardwareMonitor's updated  DLL (Fork of OpenHardwareMonitor) 

  • Gnats-Stats Updates

    Rupert Hirst10/16/2018 at 11:26 0 comments

    Version 1.3: 

    Top Config option to disable all pre-selected power/gnd pins on Arduino pins D4 and D5 when not powering OLED from ProMicro 

    Top Config option to disable/enable "activitychecker" (Enable blank screen on serial timeout eg: PC powered down, Disable to retain last sampled info eg: PC crash or overclocking diagnostics) 

    Option to trigger an event at a given CPU or GPU threshold eg: LED indicator at 100% CPU Load. 

    NeoPixel Ring CPU/GPU Bargraph example:

    Gnat-Tacho

    Custom overlay

View all 4 project logs

  • 1
    Step 1

    Gnatstats Tiny OLED PC performance monitor

    by Rupert Hirst and Colin Conway

    The HardwareSerialMonitor application uses the open source OpenHardwareMonitorLib.dll to sniff the sensors of most modern PC graphics, CPU and motherboards whilst, also pooling windows hardware stats.


    Part of Psyrax's original arduino sketch, is a "anti screen burn" feature. This feature, inverts the screen background (black - white), after a preset time, to give even wear to the OLED display. This feature has been extended to totally turn off the OLED screen when no serial data is available, such as PC power down.

    I wanted to keep the overall footprint as small as possible. The i2C pins on the ProMicro reside on D2(SDA) and D3(SCL). The displays i2c pins lined up but, obviously the power pins would be a problem.

    After measuring a current of 18.6mA on a fully lit OLED display, I decided to pull pin D5 High(5v) and D4 Low(to ground) on the ProMicro to providing the necessary VCC / GND for the display.

    ----------------------------------------------------------------------------

    OLED Pins: VCC GND SCL SDA

    ProMicro Pins: D5(HIGH) D4(LOW) D3 D2

    -----------------------------------------------------------------------------

    18mA is within the Atmel 32u4 maximum pin current limit of 20mA. This allowed the display to be simply soldered straight to the header of the ProMicro.

    The HardwareSerialMonitor application is based of Psyrax's original source code and heavily modified by Colin Conway to include additional hardware stats.

View all instructions

Enjoy this project?

Share

Discussions

gitxmax wrote a day ago point

Yet another fantastic update, thanks!

Do both screens work with either STM32 BluePill or ProMicro?

  Are you sure? yes | no

Rupert Hirst wrote a day ago point

Thanks 😁

Yes both screens work with both micros. Just uncommented  the micro and the screen you are using from the config tab. 

The BluePill has a lot more memory for bitmaps. The only downside is that neopixels on the STM use the MOSI SPi pin. This being the case I left it out for the moment.

 You can use software SPi and get the pin back but it really impacts the refresh of the screen.

  Are you sure? yes | no

Boris wrote 2 days ago point

Heya,

Having an odd issue and wondering if I've mucked up somewhere!

I purchased https://www.aliexpress.com/item/0-96-inch-IIC-Serial-Yellow-Blue-OLED-Display-Module-128X64-I2C-SSD1306-12864-LCD-Screen/32896205376.html

When I load the display up, the bottom bit of the screen seems cut off as can be seen in this screenshot:

https://www.dropbox.com/s/68gqtzxcljyv5cr/2019-03-21%2018.10.52.jpg?dl=0

Have I ordered an incorrect display, or is this a configuration setting I can change?

Thanks!

  Are you sure? yes | no

Rupert Hirst wrote 2 days ago point

I noticed this issue using the newer adafruit SSD1306 libraries. 

I have never had this issue before in earlier libraries.

Kind of got around it in v1.4 by specifying the pixel height and width

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Most vendors just call it a SSD1306 but often they are SH1106. The 1.3" screens are always SH1106 it appears, even though they call them SSD1306

Try selecting the SH1106 library 

  Are you sure? yes | no

Boris wrote 2 days ago point

Which SH1106 library did you use? I seem to be having compile errors with the choice I have (https://github.com/davidperrenoud/Adafruit_SH1106).

Alternatively, would v1.4 work with my particular setup? I noticed that the power pin option was removed, so didn't want to risk it lest I fried an OLED!

Thanks!

Edit: Ignore - if I RTFM'd, I'd see you already included a link!

  Are you sure? yes | no

Boris wrote 2 days ago point

All working perfectly with the 1106 library! Thank you very much!

  Are you sure? yes | no

gitxmax wrote 2 days ago point

Having a small issue with the neopixel ring... 

I received a ring whch is marked wcmcu-2812B-16, which seems to be a clone of the original, but of a larger size. It works ok-ish, but has 2 issues..

The leds seem to be reversed. The cpu leds are mapped to the bottom part and the gpu leds are at the top.

There's no startup animation (as seen on one of the youtube videos.)

Mostly concerned with reversing the top and bottom mapping. Could you give me  a hint, what needs to be changed in the code?

Thanks!

  Are you sure? yes | no

Rupert Hirst wrote 2 days ago point

if you look in the "NeoPixelGauges" tab and take the following as an example

//---------------------- CPU--------------------

void CPU_loadGauge(int cpuUsage ) {

  refreshNeopixels();

  float CPUloadfactor = cpuUsage ;

  if (CPUloadfactor >= 0 ) {
    pixels.setPixelColor( number of the pixel you want to be lit  round the ring, 229, 193, 0);

..............................

if you have 16 pixels the numbers start at 0 -15 , so the first pixel is address "0"

In your case the PCB is laid out in reverse. You will have to go down the "NeoPixelGauges" tab and change all the numbers.

Example: CPU_loadGauge

  pixels.setPixelColor( 15, 229, 193, 0);

  pixels.setPixelColor( 14, 230, 165, 1);

  pixels.setPixelColor( 13, 232, 137, 2);

Above becomes 

   pixels.setPixelColor( 0, 229, 193, 0);

   pixels.setPixelColor( 1, 230, 165, 1);

   pixels.setPixelColor( 2, 232, 137, 2);

and so on..................

Hope this is as clear as mud :)

  Are you sure? yes | no

gitxmax wrote 2 days ago point

Thanks man, will dive into it ;)

  Are you sure? yes | no

gitxmax wrote 02/24/2019 at 20:57 point

Thanks for the fantastic project.

I recreated the project, using an arduini nano instead. V1.2 works somewhat ok, but with the v1.31 the telemetry data is not pulled. Is there anything in the latest code, which possible conflicts with the arduino nano?

  Are you sure? yes | no

gitxmax wrote 03/10/2019 at 06:47 point

Replaced Arduino nano with Arduino ProMicro and all the issues gone.

  Are you sure? yes | no

Rupert Hirst wrote 03/10/2019 at 22:04 point

The code needs hardware USB to function correctly

  Are you sure? yes | no

alexyecla wrote 02/19/2019 at 11:08 point

Hi Rupert, thanks for your proyect i'd love it, I'm trying use your gnat-serial-monitor, and detects usage. and temps, but I want send more data like vram, voltage, cpu & gpu freq...so how I can add these parameters?? hope you can help me.

  Are you sure? yes | no

Belean wrote 01/12/2019 at 09:14 point

Hi Rupert! I've been looking for a project like yours for a long time. So thanks a lot! But I'm stuck with one meter to go, can you help me out? Everything works great, but the data is missing: no temp, no hardware names, just CPU...blank, GPU...blank, hertz...blank. I've an i7-7700 and a GTX 1080. Hardware Serial Monitor tray v1.1 is up and running. Any suggestions could be very useful to me, thank you!

  Are you sure? yes | no

Rupert Hirst wrote 01/13/2019 at 20:53 point

HI Belean,

Did you run HardwareSerialMonitor as Admin?

  Are you sure? yes | no

Belean wrote 01/13/2019 at 21:35 point

Thaks for your answer Rupert! Yes I did. HardwareSerialMonitor_v1.1. And OpenHardwareMonitor v0.8.0-beta works fine, if this can help. You can confirm that if I did everything right it should work even on an updated PC, right? There should be no external variables that could interfere with the project therefore?

  Are you sure? yes | no

Rupert Hirst wrote 01/13/2019 at 22:50 point

if you ran the app as admin and you have selected the correct com port from the tray it should work. The only other things that may effect it are folder permissions, the arduino Com port driver, Antivirus or a firewall blocking the com port.

  Are you sure? yes | no

Richardson Cherubini wrote 01/09/2019 at 21:52 point

Hello. Excellent project. I'm trying to reproduce this project, but I'm having the following problem. Can you give me a hand?

https://imgur.com/a/frKznmH

  Are you sure? yes | no

acid company wrote 12/11/2018 at 18:17 point

how to fix form1 windows problem on serialmonitor?

  Are you sure? yes | no

acid company wrote 11/24/2018 at 13:26 point

great project. thanks for share it but i want to same build for my pc. how i set up this parts and how i install to code in arduino? can u help me about this issue?

  Are you sure? yes | no

valentin-bykov-1990 wrote 11/13/2018 at 08:43 point

tell me please,what command do I need to write to display information about the gpu ram load?

  Are you sure? yes | no

Rupert Hirst wrote 10/21/2018 at 21:24 point

Asrul...  Which display have you got ?

  Are you sure? yes | no

Asrul Yol wrote 10/19/2018 at 22:45 point

hey Rupert, im really new to adruino. im trying to varify the scetch, and i got "splashscreen was not include in this scope" error. How do i fix this? 

  Are you sure? yes | no

Rupert Hirst wrote 10/20/2018 at 00:03 point

Hi,

Did you alter something in the sketch before you verified it? 

Did you download the libraries?

In arduino IDE 1.85 with correct libraries it should complie just fine.

Just because it complains about "splashscreens" does not mean the problem is with that. It could be something as simple as you deleted or  missed out a semicolon somewhere above, in the code.

  Are you sure? yes | no

Asrul Yol wrote 10/20/2018 at 12:11 point

hi.. i've find out the problem and able to upload the sketch.. but now no display.. can u help me on this.. i ve try as your previous comment below.. but still didnt light up.. any suggestion?

  Are you sure? yes | no

valentin wrote 10/19/2018 at 13:47 point

really very happy with this monitor. I will buy WS2812 digital leds right now ;)

  Are you sure? yes | no

PhuocBull wrote 10/16/2018 at 08:16 point

OMG ! This is so great !

  Are you sure? yes | no

valentin-bykov-1990 wrote 10/15/2018 at 12:48 point

led is circuit module RGB?

  Are you sure? yes | no

Rupert Hirst wrote 10/16/2018 at 09:41 point

Its a NeoPixel ring with a custom cut overlay.  i would have posted more pics but hackadayio has a limit of 6 pictures.

  Are you sure? yes | no

valentin-bykov-1990 wrote 10/16/2018 at 11:03 point

and on what contacts deduced? amazing thing happened))

  Are you sure? yes | no

Rupert Hirst wrote 10/16/2018 at 10:22 point

Glad to see Gnatstats/HardwareSerialMonitor detects your 8700k Coffee Lake

https://www.youtube.com/watch?v=8u8uStfVLHc

  Are you sure? yes | no

Rupert Hirst wrote 10/16/2018 at 11:36 point

I saw your CPU on the OLED display on Thingiverse ;)

If you are the same person as below 

valentin wrote 09/18/2018 at 20:41

I realized a shell in 3D printing from this project:

https://www.thingiverse.com/thing:3107543 "

But maybe i am wrong

  Are you sure? yes | no

valentin-bykov-1990 wrote 10/16/2018 at 11:38 point

this is not me)

  Are you sure? yes | no

valentin wrote 10/19/2018 at 13:18 point

it's me ;)

  Are you sure? yes | no

kot0005 wrote 10/12/2018 at 23:31 point

Hi, Thanks for this Project. I am newbie using Arduino, So which one of the libraries do I use ?  I used all of them and when I upload it works but my oled screen doesnt light up. I made sure the pins outs are right.

  Are you sure? yes | no

Rupert Hirst wrote 10/16/2018 at 09:46 point

You have to use all of the libraries mentioned.

You have to uncomment  one of the lines for the perticular OLED display you are using...

//#define OLED_SSD1306
#define OLED_SH1106

or 

#define OLED_SSD1306
//#define OLED_SH1106

If your using a display with a ProMicro on the back as per the pictures 

you will need to uncomment

 //#define enablepowerPins

And uncomment the one below it in the sketch for you perticular screens power requirements.

check you have the correct polarity for the selected OLED screen!!!

Also make sure you i2c address correct in the sketch

  Are you sure? yes | no

valentin-bykov-1990 wrote 10/12/2018 at 03:46 point

for itself decided to use this holder(his own and can convert it) https://ru.aliexpress.com/item/128X64-0-96-O/32871594368.html?spm=a2g0s.9042311.0.0.7a2833edrKLWbw

  Are you sure? yes | no

valentin-bykov-1990 wrote 10/09/2018 at 14:29 point

Hello, very cool project, I would like to ask the question, is it Possible to add a second physical display with the output of information about the state of RAM and paging file?

  Are you sure? yes | no

Rupert Hirst wrote 10/09/2018 at 18:06 point

Yes it is possible but not with the present library. U8GLIB supports multiple screens, It would mean a extensive rewrite of the code.  I am not sure if open hardware monitor supports displaying the page file. 

  Are you sure? yes | no

valentin-bykov-1990 wrote 10/09/2018 at 18:38 point

it's sad, because I was ready to order two displays ((by the way there is an idea about the front panel for the case, if you make it out of black Plexiglas,the display will Shine through and off will also be nice. and please sorry, i use google translate))

  Are you sure? yes | no

Rupert Hirst wrote 10/11/2018 at 12:28 point

I  am working on a enclosure for a variant of GnatStats at the moment :)

  Are you sure? yes | no

Rupert Hirst wrote 10/08/2018 at 23:44 point

GnatStats Release v1.3

Version 1.3: 

Option to trigger an event at a given CPU or GPU threshold eg: LED indicator at 100% CPU Load. 

Top Config option to disable all pre-selected power/gnd pins on Arduino pins D4 and D5 when not powering OLED from ProMicro 

Top Config option to disable/enable "activitychecker" (Enable blank screen on serial timeout eg: PC powered down, Disable to retain last sampled info eg: PC crash or overclocking diagnostics)

NeoPixel Ring CPU/GPU Bargraph example

  Are you sure? yes | no

Rupert Hirst wrote 09/18/2018 at 21:06 point

Thats really great Valentin. I will be sure to link it in the next update :)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates