Skip to content

Feature Request: Support LCDWiki ES3C35P (3.5" ESP32-S3, ST77922 QSPI panel) #434

Open

Description

@EnygmaINC

Launcher currently has ES3C28P (2.8" ILI9341, standard 4-wire SPI). LCDWiki also sells a 3.5" sibling, ES3C35P (320×480, ST77922 driver, capacitive touch, sold under various rebrands e.g. Hosyond's "ESP32-S3 3.5" Touchscreen Module").

This board uses a genuinely different display bus- quad-SPI, no DC pin, commands encoded as 32-bit words over the data lines- rather than the standard 4-wire SPI Launcher currently supports via Arduino_HWSPI/TFT_DISPLAY_DRIVER_N. A working reference implementation already exists in the xiaozhi-esp32 project (boards/lcdwiki-es3c35p/), including the full ST77922 init command table and confirmed pinout:

  • CS=10, CLK=12, D0=11, D1=13, D2=14, D3=9, RST=NC, Backlight=41
  • Touch: FT6336G-compatible over I2C at addr 0x55 (not the usual 0x38), RST=48, INT=47
  • Panel: 320×480, BGR order, esp_lcd_st77922 with use_qspi_interface=1

Would a QSPI/DC-less databus + ST77922 driver be something you'd consider adding, or is there already a path for boards with this display architecture that I'm missing? Happy to test on real hardware if that helps.

Activity

  1. AlexeOnTheShip commented on Sep 17, 2026

    @AlexeOnTheShip
    Contributor

    Heya, im that guy who added ES3C28P. One thing I would say it that this is unlikely to be implemented due to low "popularity" of this device + there is not much of a Devs who has it nor any firmware.
    One thing I would recommend is to try to port it by yourself.

  2. javaoverride commented on Sep 17, 2026

    @javaoverride

    EnygmaINC i just got this board today looking to port it at the weekend so maybe we could help each other out

  3. EnygmaINC commented on Sep 17, 2026

    @EnygmaINC
    Author

    @javaoverride Sounds good to me! Down to collab

  4. javaoverride commented on Sep 19, 2026

    @javaoverride

    @EnygmaINC quick update i have the screen now displaying the gui correctly but still have issues with touch may get time after work to have another bash at it

  5. javaoverride commented on Sep 19, 2026

    @javaoverride

    cheap-black-display-board.zip

    Took about 6 hours of trial and error but the display and touch are both fully working now. also the sd card slot, Attached a zip with everything:

    Cheap-Black-Display-board.rar — the board folder to drop into boards/

    st77922-driver-files/ — 4 driver files for lib/Arduino_GFX/src/display/

    submodule-edits/ — 2 files to overwrite inside the submodules

    Launcher-Cheap-Black-Display.bin — pre-built firmware, flash and go

    README.md — everything documented, including the two traps below

    Two traps that cost me most of the time:

    PSRAM mode. On ESP32-S3 with OPI PSRAM, PlatformIO's default qio_qspi silently fails — ps_malloc() returns broken memory and DMA sends static to the panel. Fix: board_build.arduino.memory_type = qio_opi in platformio.ini.

    5-bit pixel rotation. This panel rotates each 16-bit RGB565 pixel left by 5 bits before displaying. Colors come out rotated (red→blue, green→red, etc.). Fix: pixel = (pixel >> 5) | (pixel << 11) before sending each pixel.

    Pinout confirmed working:

    Display: CS=10, SCLK=12, D0=11, D1=13, D2=14, D3=9, BL=41, RST=NC

    Touch: SDA=38, SCL=39, RST=48, INT=47 (I2C addr 0x55)

    SD (4-bit SDIO): CLK=5, CMD=4, D0=6, D1=7, D2=2, D3=3

    The .bin is ready to flash if anyone wants to try it immediately. If your pins match, it should just work.

  6. javaoverride commented on Oct 2, 2026

    @javaoverride

    Heya, im that guy who added ES3C28P. One thing I would say it that this is unlikely to be implemented due to low "popularity" of this device + there is not much of a Devs who has it nor any firmware. One thing I would recommend is to try to port it by yourself.

    i have almost ported the Bruce Firmware so it will have that its still buggy at the min so not ready for release just yet and if you need any other firmware am happy to take a look

  7. javaoverride commented on Oct 6, 2026

    @javaoverride

    ok so i have put both post and some info at https://tinkerpad.co.uk/esp32-s3-35-lcd.html hope that helps you out

  8. sathishkuriakose commented on Oct 17, 2026

    @sathishkuriakose

    Thank you for your efforts to make it work for us

  9. EnygmaINC commented on Nov 9, 2026

    @EnygmaINC
    Author

    cheap-black-display-board.zip

    Took about 6 hours of trial and error but the display and touch are both fully working now. also the sd card slot, Attached a zip with everything:

    Cheap-Black-Display-board.rar — the board folder to drop into boards/

    st77922-driver-files/ — 4 driver files for lib/Arduino_GFX/src/display/

    submodule-edits/ — 2 files to overwrite inside the submodules

    Launcher-Cheap-Black-Display.bin — pre-built firmware, flash and go

    README.md — everything documented, including the two traps below

    Two traps that cost me most of the time:

    PSRAM mode. On ESP32-S3 with OPI PSRAM, PlatformIO's default qio_qspi silently fails — ps_malloc() returns broken memory and DMA sends static to the panel. Fix: board_build.arduino.memory_type = qio_opi in platformio.ini.

    5-bit pixel rotation. This panel rotates each 16-bit RGB565 pixel left by 5 bits before displaying. Colors come out rotated (red→blue, green→red, etc.). Fix: pixel = (pixel >> 5) | (pixel << 11) before sending each pixel.

    Pinout confirmed working:

    Display: CS=10, SCLK=12, D0=11, D1=13, D2=14, D3=9, BL=41, RST=NC

    Touch: SDA=38, SCL=39, RST=48, INT=47 (I2C addr 0x55)

    SD (4-bit SDIO): CLK=5, CMD=4, D0=6, D1=7, D2=2, D3=3

    The .bin is ready to flash if anyone wants to try it immediately. If your pins match, it should just work.

    This is awesome! I too have "cracked" it; and I also added battery (lipo via the JST connector) charging, sensing, and deep sleep.

  10. EnygmaINC commented on Nov 9, 2026

    @EnygmaINC
    Author

    Update: I got this board running on Launcher and opened two PRs.

    Tested on one unit from AliExpress (https://www.aliexpress.us/item/3256812149380399.html): display, touch, SD, all four rotations, battery sense (GPIO 8), deep sleep with BOOT wake, and installing and booting firmware from SD. The full results table, including what I did not test, is in the PR.

    Thanks @javaoverride: you got this board working first, and the pinout and notes you posted in this thread matched what I ended up with (display, touch and SD pins). Mine is a separate implementation and doesn't use your code, but I'm glad to compare notes or merge efforts if you'd like.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions