Originally I had no intention of writing this up, but after nearly two days of head-scratching I realized there’s almost no documentation online for this module. Here’s how to rescue the GM328’s custom ST7735 display and drive it from an ESP8266 (or Arduino).
1. Identify the Module
The flex-cable is stamped XY18CG958-18B
, confirming an ST7735 controller.
On the back you’ll find the 8-pin FPC header and an AMS1117 regulator:
![]() |
|
Back of GM328 display module (pin labels) |
Flipped around, the front side looks like this:
![]() |
|
Front of GM328 display module (pin labels) |
2. Pinout & Wiring
This table shows how each LCD header pin maps to a NodeMCUv2 (ESP8266) GPIO:
LCD Pin | ESP8266 Pin |
---|---|
GND | GND |
5V | 3V3 |
CS | GPIO5 |
CLK (SCL) | GPIO14 |
DIN (MOSI) | GPIO13 |
DC (A0) | GPIO4 |
RST | GPIO16 |
LED (BL) | 3V3 (or GPIO + 220 Ω for PWM) |
![]() |
Breadboard wiring on a D1 Mini (NodeMCUv2) |
3. ESPHome Example
Add this into your ESPHome YAML to fire up the display and show a test message:
spi:
clk_pin: GPIO14 # SCL
mosi_pin: GPIO13 # MOSI
id: spi_bus
font:
- file: "gfonts://Roboto:400"
id: font_big
size: 28
display:
- platform: st7735
model: "INITR_GREENTAB"
spi_id: spi_bus
cs_pin: GPIO5
dc_pin: GPIO4
reset_pin: GPIO16
device_width: 128
device_height: 160
col_start: -1
row_start: 1
invert_colors: false
eight_bit_color: true
update_interval: 5s
rotation: 270°
lambda: |-
it.fill(Color::BLACK);
it.print(it.get_width()/2,
it.get_height()/2,
id(font_big),
TextAlign::CENTER,
"IanThor.com");
4. Result
After boot you’ll see your message centered on the screen. From here you can expand to show sensor data, icons, or small graphics:
![]() |
Final display “IanThor.com” snapshot |
This guide exists because at the time of writing (2025), no one else appears to have published this displays unique pinout online. I hope it saves you time—happy hacking!