Skip to content
Buy 10+ on select items — save 10% auto-applied
Free US shipping on orders $35+
Order by 3pm ET — ships same-day from the US
Skip to main content

ESP32 GC9A01: Build a Stereo Retro VU Meter | ShillehTek

August 19, 2026 10 views

Project

Build an ESP32 GC9A01 stereo retro VU meter with two round TFT dials, envelope follower input, and peak LEDs for smooth analog-style needle motion at ShillehTek.

3 hr Beginner8 parts

Project Overview

ESP32 + GC9A01 Round Display VU Meter: Build a stereo retro analog-style VU meter using two 1.28 in GC9A01 round TFT displays, each driven by its own ESP32, with peak-indicator LEDs that react to your audio signal.

  • Time: ~3 hours
  • Skill level: Beginner
  • What you will build: A stereo desktop VU meter with animated retro dials, damped needle motion, and LED peak warnings, fed by a simple diode-capacitor envelope follower.
Two ESP32 boards driving two GC9A01 1.28 inch round TFT displays as a stereo retro VU meter
Two round displays, two ESP32s, and a pair of bouncing needles.

Parts List

From ShillehTek

External

  • 2x LEDs (peak indicators)
  • A small enclosure or 3D-printed case for the finished meter
  • An audio source (line-out or headphone signal)

Note: One ESP32 per channel keeps the needle animation smooth on both dials. The GC9A01 uses 3.3 V logic, which matches the ESP32, so no level shifting is needed.

Step-by-Step Guide

Step 1 - Understand the Retro VU Meter Concept

Goal: Understand the design you are recreating.

What to do: A traditional VU meter uses a sensitive galvanometer where the needle deflects with the strength of the audio signal across a calibrated scale. The GC9A01 round 240x240 screen is a great canvas to redraw that instrument in software with retro colors. This build adapts dial-and-gauge rendering work from the thesolaruniverse project to display real signal levels instead of demo values.

Reference photo of a classic analog VU meter with a moving needle
The inspiration: a classic needle VU meter.

Expected result: You have a clear target: two retro dials that move with left and right audio.

Step 2 - Gather One ESP32 and One Display per Channel

Goal: Prepare two identical channel builds.

What to do: Build each channel as its own unit: one ESP32 drives one GC9A01 display over SPI. Because both are 3.3 V logic, the wiring is straightforward.

ESP32 dev board that will drive a GC9A01 round TFT display for the VU meter
One ESP32 powers one display and reads one audio envelope.

Expected result: Two matched sets of parts ready for wiring.

Step 3 - Wire the SPI Display and Envelope Follower Circuit

Goal: Connect the GC9A01 over SPI and convert audio into a DC level for the ESP32 ADC.

What to do: Wire each GC9A01 to its ESP32 as follows: CS to GPIO15, DC to GPIO2, SCK to GPIO18, SDA/MOSI to GPIO23, VCC to 3.3V, and GND to GND.

For each audio channel, build a simple envelope follower: place a small-signal diode in series with the audio line, connect a capacitor from the diode output to ground, and add a bleed resistor so the level falls between peaks. Feed the resulting DC level into an ESP32 ADC input. Add a peak LED with a current-limiting resistor for each channel.

Wiring schematic showing an ESP32 connected to a GC9A01 round display over SPI and an audio diode-capacitor envelope follower into an ADC with a peak LED
GC9A01 on SPI, envelope follower into the ADC, plus a peak LED.

Expected result: Both channels are wired identically, and audio is tapped from the stereo jack breakout.

Step 4 - Flash the Firmware

Goal: Load the left- and right-channel sketches.

What to do: Install Adafruit GFX and Adafruit GC9A01A from the Arduino Library Manager. Use the full left and right sketches from the original project page. The core drawing loop looks like this:

Code:

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"

#define TFT_DC 2
#define TFT_CS 15
#define DEG2RAD 0.0174532925

Adafruit_GC9A01A tft(TFT_CS, TFT_DC);

const int AUDIO_IN = 34;   // envelope follower output
float needle = 0;          // current needle angle

void setup() {
  tft.begin();
  tft.fillScreen(0xAB21);  // retro dial background color
  // draw the scale arc, tick marks and labels once here
}

void loop() {
  int raw = analogRead(AUDIO_IN);
  float target = map(raw, 0, 4095, -45, 45);   // level  needle angle
  needle += (target - needle) * 0.25;          // damped, homogeneous motion

  // erase the previous needle, then redraw at the new angle
  float x = 120 + 80 * sin(needle * DEG2RAD);
  float y = 150 - 80 * cos(needle * DEG2RAD);
  tft.drawLine(120, 150, x, y, GC9A01A_RED);

  delay(20);
}

Expected result: Each display boots into a retro dial with a resting needle.

Step 5 - Assemble Both Channels Into One Enclosure

Goal: Package the project as a single stereo unit.

What to do: Mount the two displays side by side on the front panel. Place the ESP32 boards and envelope follower circuits behind them, and bring the stereo input out to the 3.5 mm jack. Keep analog wiring short to reduce noise pickup.

Inside view of the enclosure showing two ESP32 boards and envelope follower circuits behind the GC9A01 displays
Inside the box: two independent channels and the input circuitry.

Expected result: A tidy, self-contained stereo VU meter.

Step 6 - Feed Audio and Observe the Needles and Peak LEDs

Goal: Verify the meter responds to music.

What to do: Feed a line-level signal into the stereo input and watch both needles track the music with a smooth, analog-like lag. When a channel exceeds the safe level, its peak LED lights.

Finished ESP32 and GC9A01 round display VU meter operating with music and moving needles
The finished meter in action.

Expected result: A working stereo VU meter with animated dials and peak indication.

Conclusion

This project uses two ESP32 boards and two GC9A01 round TFT displays to recreate a stereo analog-style VU meter with damped needle motion and peak LEDs. With a simple diode-capacitor envelope follower feeding the ESP32 ADC, the needles move in sync with real audio.

Want the exact parts used in this build? Grab them from ShillehTek.com. If you want help customizing this project or building something for your product, check out our IoT consulting services.

Photo and original guide reference: Mirko Pavleski (mircemk) on Hackster.io.