You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
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.
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.
@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
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.
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
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.
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.
Activity
AlexeOnTheShip commentedon Sep 17, 2026
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.
javaoverride commentedon Sep 17, 2026
EnygmaINC i just got this board today looking to port it at the weekend so maybe we could help each other out
EnygmaINC commentedon Sep 17, 2026
@javaoverride Sounds good to me! Down to collab
javaoverride commentedon Sep 19, 2026
@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
javaoverride commentedon Sep 19, 2026
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.
javaoverride commentedon Oct 2, 2026
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
javaoverride commentedon Oct 6, 2026
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
sathishkuriakose commentedon Oct 17, 2026
Thank you for your efforts to make it work for us
EnygmaINC commentedon Nov 9, 2026
This is awesome! I too have "cracked" it; and I also added battery (lipo via the JST connector) charging, sensing, and deep sleep.
EnygmaINC commentedon Nov 9, 2026
Update: I got this board running on Launcher and opened two PRs.
Arduino_ST77922_1L4. The ST77922 wants register writes on one QSPI line but pixel data on four, which Arduino_GFX's QSPI bus can't do, so it's an own-bus ESP-IDF driver.lcdwiki-es3c35pboard, including a touch driver for the touch block built into the ST77922 (I2C0x55, 16-bit register addresses). It's a draft until the DisplayDrivers PR lands.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.