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 = GPIO6SCLK = GPIO7LCD_CS = GPIO14LCD_DC = GPIO15LCD_RST = GPIO21LCD_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.47ESP32-S3-Touch-LCD-1.47ESP32-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
GPIO22is 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
172x320layout and the vendor offsets already present inDisplay_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 GHzWi-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
lvgllibrary from this project. - The build uses the
huge_apppartition scheme. That is the known-good setup for this workspace.
Files That Matter
- Arduino/examples/LVGL_Arduino/LVGL_Arduino.ino Boot flow for the scanner firmware.
- Arduino/examples/LVGL_Arduino/WiFi_Scanner.cpp Wi-Fi scan logic and SSID formatting.
- Arduino/examples/LVGL_Arduino/LVGL_Driver.cpp Green-on-black screen layout and text updates.
- Arduino/examples/LVGL_Arduino/Display_ST7789.cpp Board-specific LCD write path and backlight control.
- Arduino/examples/LVGL_Arduino/Display_ST7789.h The exact pin map and screen dimensions.
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
- Waveshare product page: https://www.waveshare.com/esp32-c6-lcd-1.47.htm
- Waveshare wiki: https://www.waveshare.com/wiki/ESP32-C6-LCD-1.47