Files
cute-handshake-capture/ESP32-C6-LCD-1.47-Demo

ESP32-C6-LCD-1.47 WiFi List Firmware

This workspace contains a custom firmware for the non-touch Waveshare ESP32-C6-LCD-1.47.

The firmware does one job:

  • boot the board
  • turn the LCD backlight on
  • scan nearby 2.4 GHz Wi-Fi networks
  • display the visible SSIDs as a green list on the screen
  • rescan periodically

The active Arduino sketch is:

Why This Works On This Device

This firmware is specific to the non-touch ESP32-C6-LCD-1.47 board because it matches the board's actual LCD wiring and controller assumptions:

  • LCD controller: ST7789
  • LCD size: 172x320
  • SPI LCD pins:
  • MOSI = GPIO6
  • SCLK = GPIO7
  • LCD_CS = GPIO14
  • LCD_DC = GPIO15
  • LCD_RST = GPIO21
  • LCD_BL = GPIO22

Those values match the Waveshare ESP32-C6-LCD-1.47 documentation and the vendor Arduino template for this exact board.

It is not intended for:

  • ESP32-S3-LCD-1.47
  • ESP32-S3-Touch-LCD-1.47
  • ESP32-C6-Touch-LCD-1.47
  • other ST7789 boards with different offsets, reset wiring, or backlight control

The Important Fixes

The stock demo was close, but not stable enough for this board until a few things were corrected:

  • The display flush path was using a large per-refresh stack buffer in LCD_addWindow(). That is a bad failure mode on the C6 and can leave the panel black. The firmware now sends pixel data without allocating a useless receive buffer.
  • Backlight duty handling was cleaned up so GPIO22 is driven with the correct full-scale PWM value instead of a fragile hard-coded number.
  • The board now boots into a minimal screen path instead of starting the original SD-card and wireless demo logic at the same time.
  • The app uses the official C6 template's panel init and geometry, including the 172x320 layout and the vendor offsets already present in Display_ST7789.h.

Those fixes are why this firmware works on this unit when the earlier mixed S3/C6 attempts did not.

Caveats

  • This is for the non-touch C6 board only.
  • It scans 2.4 GHz Wi-Fi networks. That is normal for ESP32 Wi-Fi scanning.
  • The screen can only show a limited number of SSIDs cleanly at once, so the firmware renders the first visible chunk and rescans periodically.
  • Hidden SSIDs are shown as <hidden>.
  • Network order is whatever the Wi-Fi stack returns for that scan, so entries can move between rescans.
  • Long SSIDs wrap on screen.
  • The sketch uses Arduino and the bundled offline lvgl library from this project.
  • The build uses the huge_app partition scheme. That is the known-good setup for this workspace.

Files That Matter

Known-Good Build And Flash

Compile:

arduino-cli compile \
  -b 'esp32:esp32:esp32c6:PartitionScheme=huge_app' \
  --build-path /tmp/arduino-build-c6-wifi-list \
  --libraries '/Users/drjones/Library/Mobile Documents/com~apple~CloudDocs/dev shit life/4 way handshake/ESP32-C6-LCD-1.47-Demo/Arduino/libraries' \
  '/Users/drjones/Library/Mobile Documents/com~apple~CloudDocs/dev shit life/4 way handshake/ESP32-C6-LCD-1.47-Demo/Arduino/examples/LVGL_Arduino'

Flash:

arduino-cli upload \
  -p /dev/cu.usbmodem1101 \
  -b 'esp32:esp32:esp32c6:PartitionScheme=huge_app' \
  --input-dir /tmp/arduino-build-c6-wifi-list

If your serial port changes, replace /dev/cu.usbmodem1101 with the current device from arduino-cli board list.

References