G90 Companion Display — ESP32-S3 external VFO for the Xiegu G90
Waveshare ESP32-S3 4.3″ · 800×480 IPS · CAT over UART
A large-format companion display for the Xiegu G90

The G90's own screen is small and easy to lose in bright sun or from across the operating table. This project adds a 4.3″ touchscreen panel that mirrors every reading on the radio — frequency, mode, S-meter, power, SWR, ATU and AGC status — in a layout you can actually read from across the shack or whilst out activating.

6switchable display themes
800×480capacitive touch panel
≤ 1 Wtarget display power draw

The radio's display is too small for old eyes!

The G90 is compact for a reason — but that means a 2.4″ screen, small digits, and status icons that disappear in daylight. This project doesn't replace any of the radio's controls. It listens to the same CAT data the G90 already produces and re-presents it on a panel built for legibility first.

  • Frequency readable from several metres away
  • Full status mirroring — mode, VFO A/B, ATU, AGC, NB, split, SWR
  • Daylight and night-readable colour schemes
  • Touch control for toggling radio functions directly

One layout, six faces


What it's built from

SubsystemChoiceNotes
Display + MCUWaveshare ESP32-S3 4.3″ Touch Dev Board800×480 IPS, 5-point capacitive touch, 8 MB PSRAM, 16 MB Flash — £31.70 from The Pi Hut
CAT linkUART, MAX3232 if requiredMatches the G90's CI-V-style CAT interface levels
PowerUSB-C, 5VOptional internal battery for fully portable use

Three tasks, one shared radio state

The firmware runs as three FreeRTOS tasks on the ESP32-S3, all reading from and writing to a single shared radio-state structure. This keeps the UI responsive even while the CAT link is busy, and keeps tuning feel smooth regardless of touch input load.

CAT task

  • Poll radio over UART
  • Decode CI-V style responses
  • Write to shared radio state

Display task

  • Draw active theme
  • Refresh widgets from state
  • Animate tuning scale

Touch task

  • Process touch input
  • Handle theme switching
  • Send control commands

Built on LVGL for the UI, TFT_eSPI for the display driver, Preferences for persisting the selected theme and zoom level across power cycles, and ArduinoJson for any future configuration or logging payloads.


Connecting the hardware

The Waveshare ESP32-S3 4.3″ Touch Dev Board has the display, touch controller, PSRAM and flash all pre-wired internally — nothing to connect there. The only external wiring needed is from the G90's CAT port to the board's GPIO header, via a MAX3232 level-shifter. The G90 uses RS-232 voltage levels which would damage the 3.3 V ESP32 GPIOs if connected directly.

Xiegu G90 ACC port → MAX3232 → Waveshare board GPIO (UART2)
G90 ACC pinMAX3232 pinBoard GPIONotes
Pin 3 (TX out)R1INRadio transmits CAT data at RS-232 levels
R1OUTGPIO 18 (RX)Level-shifted to 3.3 V; connect to GPIO breakout header
Pin 2 (RX in)T1OUTRadio receives CAT commands at RS-232 levels
T1INGPIO 17 (TX)3.3 V logic from ESP32
Pin 5 (GND)GNDGNDCommon ground — use board GND header pin
VCC3V3MAX3232 supply from board 3V3 header; add 100 nF caps on charge pump pins

⚠  The G90 ACC socket is a 6-pin DIN. Pin numbering follows the Xiegu documentation — verify against your specific unit before applying power. CAT baud rate is 19200 8N1 by default; confirm in the G90 menu. Never connect the G90's RS-232 output directly to the board GPIO — the voltage swing will damage the microcontroller.


Firmware & code

The full firmware for this project — including all six display themes, CAT decoder, touch handler and TFT_eSPI configuration for the Waveshare board — is available from M0ICR on request.

The code is written for the ESP32-S3 with Arduino IDE with the following libraries:

  • TFT_eSPI — display driver, configured for the Waveshare RGB parallel panel
  • LVGL — UI framework for all six themes and touch routing
  • ArduinoJson — configuration and optional logging payloads
  • Preferences — persists selected theme and settings across power cycles

G90 Companion Display — an open hardware project for the Xiegu G90 — M0ICR