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.
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.
Every theme shares the same information architecture — large frequency readout, S-meter with power and SWR, two columns of status/control buttons, and a six-way theme switcher along the bottom edge. Only the palette and emphasis change, so the radio operator's muscle memory carries over no matter which face is active.
01 — Dark blue. The default operating view. Dual VFO, S-meter, power, SWR and TX timer. Mode and band as colour pills beside the frequency.
02 — High contrast. Pure black and white, no greys. For direct sunlight or visually demanding conditions.
03 — Yaesu amber. A nod to the classic amber VFD displays of Yaesu transceivers.
04 — Light & colour. White background with colour-coded status — blue for tuning aids, green for healthy readings.
05 — Night vision. Green on black. Preserves dark adaptation during night operation.
06 — Steel blue. A cooler blue-grey palette, easy on the eye for long operating sessions under artificial light.
| Subsystem | Choice | Notes |
|---|---|---|
| Display + MCU | Waveshare ESP32-S3 4.3″ Touch Dev Board | 800×480 IPS, 5-point capacitive touch, 8 MB PSRAM, 16 MB Flash — £31.70 from The Pi Hut |
| CAT link | UART, MAX3232 if required | Matches the G90's CI-V-style CAT interface levels |
| Power | USB-C, 5V | Optional internal battery for fully portable use |
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.
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.
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.
| G90 ACC pin | MAX3232 pin | Board GPIO | Notes |
|---|---|---|---|
| Pin 3 (TX out) | R1IN | — | Radio transmits CAT data at RS-232 levels |
| — | R1OUT | GPIO 18 (RX) | Level-shifted to 3.3 V; connect to GPIO breakout header |
| Pin 2 (RX in) | T1OUT | — | Radio receives CAT commands at RS-232 levels |
| — | T1IN | GPIO 17 (TX) | 3.3 V logic from ESP32 |
| Pin 5 (GND) | GND | GND | Common ground — use board GND header pin |
| — | VCC | 3V3 | MAX3232 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.
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: