ESP32 PC Performance Monitor. RealโTime System Stats Eink
by Shahbaz Hashmi Ansari in Circuits > Computers
126 Views, 1 Favorites, 0 Comments
ESP32 PC Performance Monitor. RealโTime System Stats Eink
Most of us check our PC's performance by opening Task Manager or glancing at a secondary monitor, which always means staring at yet another bright, backlit screen. I wanted something different. Something that just sits quietly on my desk, shows me what my computer is doing in real time, and doesn't pile on more screen glare to my workspace.
So I built a tiny PC performance monitor using an e-ink display, the same paper-like technology you'd find in a Kindle. It shows live CPU usage, RAM, Disk, Network speed, Battery status, and System Uptime, all refreshing every few seconds. And unlike a traditional LCD or OLED display, there's no backlight involved whatsoever. The screen holds its image with zero power draw and only consumes energy during the brief moment it updates. The result is something that genuinely looks like a printed piece of paper sitting on your desk, readable in any lighting, completely glare-free, and oddly satisfying to look at.
The build itself uses just a handful of components: a Seeed Studio XIAO ESP32-S3 microcontroller, a WeAct Studio 1.54" e-paper display, and a 3D-printed enclosure. A Python script running on the PC collects system stats and sends them over to the display through USB serial. The firmware, the Python script, and the 3D print files are all open-source, so anyone with a 3D printer and basic skills can put one together for under $10.
Why this project belongs in the "Dream a Better World" contest: We spend our days surrounded by screens that are always on, always bright, and always consuming power, even when we only need a quick glance at a number. This project challenges that norm. E-ink draws power only during a refresh and holds its image indefinitely without any energy. No backlight means no blue light emission, reducing the eye strain and screen fatigue that millions of desk workers experience daily. And because the entire build is open-source and costs under $10, it's accessible to anyone, not just people who can afford a secondary monitor. This is my small contribution toward a future where the technology on our desks is more energy-conscious, more respectful of our eyes and attention, and more available to everyone. Not every step toward a better world has to be big, sometimes it's as simple as replacing a glowing screen with a piece of digital paper.
Supplies
For this build, I used two compact off-the-shelf modules wired together and housed inside a fully 3D printed enclosure.
Electronics
Hardware
- Hook-up Wire
- Solder Kit
- USB-C Cable (for powering and flashing the XIAO)
Fabrication
- 3D Printed Parts (files included)
Software
- Arduino IDE
- Python 3 (runs on your PC)
- psutil (Python library for reading system stats)
- pyserial (Python library for USB serial communication)
The e-paper display connects directly to the XIAO ESP32-S3 through a handful of wires, and the whole assembly tucks neatly into the printed enclosure, making it straightforward to build, modify, and reproduce.
CAD Design
For this project, I didn't design the enclosure from scratch. I came across a beautifully minimalist stand on MakerWorld, designed by Matt (Endpoint101), that fits the WeAct 1.54" e-paper display almost perfectly. It also has a clip on the back that holds the ESP32 development board in place, which meant no extra fasteners or glue were needed. Full credit goes to Matt for the thoughtful design work here. Go give his model a boost on MakerWorld if you end up using it!
The stand also includes an optional partial cover to hide any messy wiring at the back, which I found genuinely useful once everything was wired up.
Print Settings
I printed the enclosure in white PLA, which ended up being a great choice. The clean white finish gives it a very polished, almost commercial look that pairs nicely with the paper-like appearance of the e-ink display itself.
Here are the settings I used, based on the designer's recommended profile:
- Material: White PLA
- Layer Height: 0.2mm
- Walls: 2
- Infill: 15%
- Supports: Not required
- Estimated Print Time: Around 31 minutes
The print came out clean with no issues at these settings. If your first layer adhesion is solid and your bed is leveled well, this is a straightforward print with no tricky overhangs or tight tolerances to worry about.
Where to Get Your PCBs Manufactured
This project uses off-the-shelf modules and jumper wires, so you won't need a custom PCB to follow along. That said, if you ever want to take this further and design a proper integrated board with the ESP32 and e-paper connector in one clean package, here's where I'd point you.
This step is sponsored by NextPCB, one of the larger PCB and PCBA manufacturers out there, shipping to makers in over 150 countries.
They recently launched a service called Rev 0 PCBA that's worth knowing about if you're prototyping. You upload your Gerber files, BOM, and Pick-and-Place file, and the platform automatically runs DFM and DFA checks, matches your components against their inventory of over 600,000 in-stock parts, and gives you a fixed price quote on the spot. No emails back and forth, no waiting on a sales engineer. Once you confirm, fully assembled boards can ship in as fast as 7 working days.
For a first PCBA order, they're offering up to a $500 SMT coupon through the Rev 0 campaign, which makes prototype quantities essentially free to assemble.
For a project like this one specifically, a small breakout PCB would make the build much cleaner and more reliable than loose jumper wires inside a printed enclosure. That's exactly the kind of thing Rev 0 PCBA is built for.
๐ Get $500 SMT coupon on your first Rev0 PCBA order: https://www.nextpcb.com/rev0-pcba
๐ NextPCB Official Website: https://www.nextpcb.com/
The Build
With all the components in hand and the enclosure printed, putting everything together is actually pretty satisfying. There's no soldering involved at any point. Everything connects through jumper wires and a small JST connector.
- Start by sliding the WeAct 1.54" e-paper display into the front slot of the enclosure. The screen should face forward through the rectangular opening, with the display PCB sitting flush against the back of the frame. The fit is meant to be snug, so don't force it. If yours feels a little loose, a small piece of double-sided tape on the back of the display PCB will hold it in place just fine.
- Next, plug the mini JST cable into the connector port on the e-paper display PCB. It only fits one way, so there's no guessing involved there.
- Now take the other end of that cable and connect the jumper wires to the XIAO ESP32-S3 according to this pin mapping:
- BUSY โ D0 (GPIO 1)
- RST โ D1 (GPIO 2)
- DC โ D2 (GPIO 3)
- CS โ D3 (GPIO 4)
- SCK โ D8 (GPIO 7, default SPI clock)
- MOSI โ D10 (GPIO 9, default SPI MOSI)
- VCC โ 3V3
- GND โ GND
- One thing worth being careful about here: make sure VCC goes to the 3V3 pin and not the 5V pin. The e-paper display runs on 3.3V logic, and accidentally connecting it to 5V can damage it. Also, if you're using individual jumper wires rather than a ribbon cable, color-coding them really does help. Red for VCC, black for GND, and a different color for each signal line will save you a lot of head-scratching if something doesn't work on the first try.
- Once everything is wired up, tuck the XIAO ESP32-S3 into the slot at the back of the enclosure and route the wires so they're not pulling on any of the connections. Before you close everything up, make sure the USB-C port on the XIAO is still accessible. You'll need it for flashing the firmware and for the live serial connection to your PC.
Flashing the Firmware
There are two pieces of software involved in this project. The firmware that runs on the XIAO ESP32-S3 and handles everything the display does, and a Python script that runs on your PC in the background, collects your system stats, and sends them over to the board through USB serial.
1. Arduino Libraries
Open the Arduino IDE and head to Sketch โ Include Library โ Manage Libraries. Search for and install these three libraries:
- GxEPD2 by Jean-Marc Zingg โ this is the main driver for the e-paper display and handles both full and partial refresh
- Adafruit GFX by Adafruit โ provides the graphics primitives like text rendering and shapes
- ArduinoJson by Benoรฎt Blanchon โ parses the JSON data coming in from the Python script
2.Board Setup
Go to Tools โ Board and look for XIAO ESP32S3. If it doesn't show up, you'll need to add the Seeed board package first. Go to File โ Preferences, find the "Additional Board Manager URLs" field, and paste in this URL:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Then go to Tools โ Board Manager, search for "esp32", and install the package. After that, XIAO_ESP32S3 will appear in your board list.
3.Arduino Firmware
Here's the firmware that goes on the XIAO. It handles the display layout, listens for incoming serial data, and manages the refresh logic.
Once the code is ready, select the correct port under Tools โ Port and hit Upload. When it finishes, the display should show a splash screen, which means the firmware is running and waiting for data to come in.
4.Python Script
Make sure you have Python 3 installed on your PC. Then open a terminal and run:
psutil handles reading your CPU, RAM, Disk, Network, and Battery stats directly from the operating system. pyserial takes care of sending that data down to the XIAO over USB.
Here's the Python script:
5.Running Everything
Connect the XIAO to your PC via USB-C, then open the Python script and update the COM port to match your device. On Windows, you can find it under Device Manager โ Ports. Then just run:
The terminal will start printing your system stats every few seconds, and within a moment the e-ink display will refresh and show everything live. CPU usage, RAM, Disk, Network speed, Battery, and Uptime, all sitting quietly on your desk.
The display uses partial refresh for regular updates, which is fast and flicker-free, and does a full refresh every few minutes to clear any ghosting that builds up over time. You can leave the script running in the background without any noticeable impact on your system.
Working Video & Tutorial
Here's the full build video showing the assembly, code walkthrough, and live demo:
What started as a simple weekend project quickly turned into one of those builds that ended up being much more satisfying than I expected. At first, I just wanted an easier way to keep an eye on my PC's performance without constantly opening Task Manager or monitoring software.
But the moment I saw live CPU and memory data appearing on that tiny paper-like display, I knew there was something special about it.
Unlike a traditional LCD or OLED screen, this display doesn't glow, flash, or compete for your attention. Because it's an e-ink display, it uses no backlight, consumes power only when the image changes, and looks more like a printed card sitting on your desk than another electronic screen. In a setup already filled with bright monitors and notifications, having a display that quietly shows useful information without adding more visual noise feels surprisingly nice.
One of the best parts of this project is how accessible it is. The core hardware costs less than $10, there's no soldering involved, and everything runs on open-source software. The Arduino code, Python script, and 3D-print files are all available in the description, so anyone with basic tools and a little curiosity can build one in under an hour.
What I like most about this project is that it proves useful hardware doesn't need to be expensive, complicated, or power-hungry.
- Less energy because the display only uses power when refreshing the image
- Less eye strain because there's no backlight and no constant screen glare
- More accessible because it costs under $10, requires no custom PCB, and no soldering
- More open because every file is shared and every step is documented
And this is really just the beginning. The same hardware could easily be turned into a weather display, a Spotify now-playing screen, a Pomodoro timer, a smart notification panel, or something completely different.
I'd love to know what you'd build with it. If you have an idea for a new mode or feature, leave a comment below and let me know.
Hopefully this project gives you a different perspective on what a desktop monitor can be. Sometimes the most useful display isn't the brightest or the fastest. It's the one that quietly gives you the information you need while staying out of the way.