-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Waveshare ESP32-S3 AMOLED 2.41" support with native RM690B0 driver (QSPI) #10793
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 10.0.x
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This pull request adds comprehensive CircuitPython support for the Waveshare ESP32-S3 Touch AMOLED 2.41 board, featuring a native RM690B0 AMOLED display driver with QSPI interface support, hardware-accelerated image conversion (BMP/JPEG), and ESP32-native SD card support.
Changes:
- New
rm690b0module with native QSPI display driver supporting hardware DMA, built-in fonts (7 sizes), and drawing primitives - Image conversion utilities with BMP and JPEG support using hardware JPEG decoder where available, fallback to TJpgDec
espsdcardmodule providing ESP-IDF-based SD card interface compatible with sdcardio API
Reviewed changes
Copilot reviewed 32 out of 34 changed files in this pull request and generated 19 comments.
Show a summary per file
| File | Description |
|---|---|
| shared-bindings/rm690b0/*.{c,h} | Python bindings for RM690B0 display driver and image conversion |
| ports/espressif/common-hal/rm690b0/*.{c,h} | ESP32 implementation of RM690B0 driver with QSPI support |
| ports/espressif/common-hal/espsdcard/*.{c,h} | ESP-IDF SD card driver implementation |
| ports/espressif/bindings/espsdcard/*.{c,h} | Python bindings for SD card with dual API support |
| ports/espressif/boards/waveshare_esp32_s3_amoled_241/* | Board definition files for Waveshare ESP32-S3 AMOLED 2.41 |
| lib/esp_jpeg/* | JPEG decoder wrapper using TJpgDec library |
| py/circuitpy_*.{mk,h} | Build system configuration for new modules |
| ports/espressif/Makefile | Build rules for rm690b0 and espsdcard modules |
| locale/circuitpython.pot | Error message translations |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
ports/espressif/boards/waveshare_esp32_s3_amoled_241/mpconfigboard.h
Outdated
Show resolved
Hide resolved
|
Given the size and style of this PR I suspect it was done via LLM agent. In principle that is ok but I'd like you to say so upfront. Please also state 1) What prompts you did and 2) how you tested it. |
This PR has been mostly created with AI agents usage. Claude Opus + Claude Sonnet + Gemini Pro. Can't tell exact prompts because there were thousands of them. Testing - mostly manual. Hundreds of flashed builds. Tens of test scripts and performance benchmarks. Some of them I left in this repo: https://github.com/ppsx/ws-esp32-s3-amoled-241 If it doesn't fulfill your requirements - that's fine, I don't mind. |
dhalbert
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is a lot of of new device-specific code here, but underneath, there could be more generality that would add capabilities for more boards than this. It could be broken out into multiple PR's.
I am impressed by the amount of effort, but it has ended up being very specific.
espsdcard: instead of adding a new module, I think the implementation could have replacedsdcardio, with additional features that are not implemented on other ports.- JPEG support: can the ESP JPEG support replace the generic jpegio code?
- fonts: why are the fonts compiled in just for this driver? What about existing font support? Could it be used? If not, how could existing generic font support be improved for what you want?
- RM690B0 support: is this generalizable for other QSPI displays or other similar displays, or because it's wired for the ESP-provided driver, it's not?
- Could the image_converter code be broken out into something more general?
|
Agree that I've added some code specifically for this board.
I could progress with this but I'd need some directions, if you don't mind. |
|
Thanks again for your feedback, @dhalbert.
|
tannewt
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you are going the right direction in using existing parts of CircuitPython. I'm glad you done a bunch of testing on this. Please come to us sooner to make sure you are taking the best high level approach.
Before adding sdcardio try sdioio in one bit mode. That is already implemented in espressif and I believe works for SPI sdcards. (That's why sdcardio isn't already implemented.)
I don't like the rm690b0 module because it is doing too much outside. Board specific stuff can be isolated to the board's directory but I don't think you actually need that here. Please start with adding an analog to FourWire for QSPI displays and get displayio working (even if it is slow).
Once we have that, we can talk about making it work faster.
Complete CircuitPython support for the Waveshare ESP32-S3 Touch AMOLED 2.41 board featuring:
Documentation, technical details, examples, etc.:
https://github.com/ppsx/ws-esp32-s3-amoled-241