Skip to content

Add Waveshare ESP32-S3-Touch-AMOLED-2.16 curated board#1821

Draft
bdraco wants to merge 1 commit into
mainfrom
board-waveshare-amoled-216
Draft

Add Waveshare ESP32-S3-Touch-AMOLED-2.16 curated board#1821
bdraco wants to merge 1 commit into
mainfrom
board-waveshare-amoled-216

Conversation

@bdraco

@bdraco bdraco commented Jul 3, 2026

Copy link
Copy Markdown
Member

What does this implement/fix?

Adds a curated board manifest for the Waveshare ESP32-S3-Touch-AMOLED-2.16, an ESP32-S3 board with a 2.16" 480x480 CO5300 AMOLED panel on a quad-SPI bus, a CST9220 capacitive touch panel, and an ES8311 audio codec with an onboard speaker. It features the quad SPI bus, octal PSRAM, the mipi_spi display (model WAVESHARE-ESP32-S3-TOUCH-AMOLED-2.16), the touch, and the speaker (i2s_audio + es8311 + power-amp enable), with Display, Touchscreen, and Speaker bundles.

The panel is self-emissive, so there is no backlight; display CS/reset come from the model. The touch and codec share one I2C bus (SDA 15 / SCL 14).

CST9220 catalog entry. The CST9220 touch controller only exists in ESPHome 2026.7.0+, so its catalog entry (touchscreen.cst9220) was generated from the 2026.7.0-dev schema and added alongside the still-pinned 2026.6.4 catalog (no dependency bump; esphome-constraints.txt stays at 2026.6.4). Because the dependency is still 2026.6.4, the Touchscreen bundle compiles only once esphome is bumped to >= 2026.7.0; the Display and Speaker bundles compile today. This board is prepared so the touch is complete the moment that (imminent) bump lands.

QMI8658 IMU deferred. The board also has a QMI8658 IMU, but the esphome motion platform is missing from the sync's _PLATFORM_DOMAINS, so motion components (this and the existing bmi270/lsm6ds) render as an invalid top-level key. That is a separate catalog-infrastructure fix; the IMU is left out here and lands once motion is handled.

Pins were verified against clydebarrow's mipi_spi 2.16 sample config (the driver author) and the Clawdmeter board.h. The full generated device (display + touch + speaker) passes esphome config under 2026.7.0-dev, and validate_definitions reports 555 boards OK on 2026.6.4.

Related issue or feature (if applicable):

  • N/A

Types of changes

  • New feature (non-breaking change which adds functionality) — new-feature

Frontend coordination

  • No frontend change needed

Checklist

  • The code change is tested and works locally.
  • Pre-commit hooks pass (ruff, codespell, yaml/json/python checks).
  • Tests have been added or updated under tests/ where applicable.
  • components.index.json / definitions/components/*.json have not been hand-edited (the touchscreen.cst9220 entry is generator output from the 2026.7.0-dev schema, spliced in; the 2026.6.4 stamp and all other entries are unchanged).
  • Architecture-level changes are reflected in docs/ARCHITECTURE.md and/or docs/API.md.

@github-actions github-actions Bot added the new-feature New feature label Jul 3, 2026
ESP32-S3 board with a 2.16" 480x480 CO5300 AMOLED panel on a quad-SPI bus, a
CST9220 capacitive touch panel, and an ES8311 audio codec with onboard speaker.
Features the quad SPI bus, octal PSRAM, the mipi_spi display (model
WAVESHARE-ESP32-S3-TOUCH-AMOLED-2.16), the touch, and the speaker (i2s_audio +
es8311 + power-amp enable), with Display, Touchscreen, and Speaker bundles.
Display CS/reset come from the model; the panel is self-emissive (no backlight).

CST9220 only exists in ESPHome 2026.7.0+, so its catalog entry
(touchscreen.cst9220) was generated from the 2026.7.0-dev schema and added
alongside the still-pinned 2026.6.4 catalog. The touch bundle therefore compiles
only once the esphome dependency is bumped to >= 2026.7.0; display and audio
compile today.

The QMI8658 IMU is intentionally left out: the esphome `motion` platform isn't in
the catalog's _PLATFORM_DOMAINS, so motion components render as an invalid
top-level key. That is a separate catalog fix; the IMU lands once it's in.

Pins verified against clydebarrow's mipi_spi 2.16 sample config (the driver
author) and the Clawdmeter board.h.
@bdraco bdraco force-pushed the board-waveshare-amoled-216 branch from d3a2518 to d17a7f7 Compare July 3, 2026 22:05
@codspeed-hq

codspeed-hq Bot commented Jul 3, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 27 untouched benchmarks


Comparing board-waveshare-amoled-216 (d17a7f7) with main (29d3f2a)

Open in CodSpeed

@codecov

codecov Bot commented Jul 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.54%. Comparing base (29d3f2a) to head (d17a7f7).

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main    #1821   +/-   ##
=======================================
  Coverage   99.54%   99.54%           
=======================================
  Files         231      231           
  Lines       18422    18422           
=======================================
  Hits        18339    18339           
  Misses         83       83           
Flag Coverage Δ
py3.12 99.52% <ø> (ø)
py3.14 99.54% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@esphbot

esphbot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

PR Review — Add Waveshare ESP32-S3-Touch-AMOLED-2.16 curated board

Solid, well-documented curated board that faithfully follows the author's recently-merged board pattern; the only real reviewer flag is the cross-version catalog splice, which is intentional and self-correcting.

Verified strengths:

  • Pin map is conflict-free and complete (GPIO 0/4-9/11/12/14/15/38/39/40/42/45/46 all uniquely assigned); QSPI display, shared I2C, I2S audio + es8311 + amp-enable, and boot button are all coherently wired.

  • es8311 address 0x18 correctly serialized to 24 in the generated body; requires transitive expansion (onboard_speaker→i2c_bus, lcd_touch→lcd_spi/lcd_psram) matches generator behavior.

  • Touchscreen bundle omitting lcd_display while lcd_touch.requires pulls it in matches merged precedent (guition-jc3636w518, guition-jc3248w535) — not a bug.

  • validate_definitions.py cross-checks every component_id against the index, so the spliced entry has a loud CI safety net.

  • Touchscreen bundle won't compile on the pinned esphome 2026.6.4 (documented, maintainer's call, but couples this board to the imminent bump — see finding).

  • Spliced cst9220 entry will be dropped by the next full sync on 2026.6.4, tripping validation until the bump lands.

  • cst9220 catalog entry missing image_url (cosmetic).


🟡 Important

1. Touchscreen bundle produces a non-compiling config on the pinned esphome (2026.6.4)
esphome_device_builder/definitions/boards/waveshare_esp32_s3_touch_amoled_2_16/manifest.yaml:9

The touchscreen.cst9220 catalog entry is spliced from the 2026.7.0-dev schema, but esphome-constraints.txt stays at 2026.6.4. A user who selects the Touchscreen (full setup) bundle today gets a config that fails esphome config/compile with an "unknown platform cst9220" error until the dependency is bumped to >= 2026.7.0. The Display and Speaker bundles are unaffected.

Why it matters: the board catalog is user-facing; a bundle that silently fails to build is a poor first experience for anyone who picks up this board before the bump lands.

This is clearly documented in the PR description and manifest, and you (bdraco) are a maintainer making an informed "prepare ahead of the imminent bump" call — so this is a heads-up, not a blocker. Two things worth confirming before merge:

  • The next full script/sync_components.py run against the pinned 2026.6.4 schema will drop touchscreen.cst9220 from components.index.json (it doesn't exist in that schema). At that point validate_definitions.py fails loudly for this board (component_id 'touchscreen.cst9220' not found in components.index.json, line 470-471) — so the nightly catalog-sync PR will go red until the esphome bump merges. That's self-correcting and visible, but the two PRs (esphome bump + any resync) are now coupled; make sure the bump lands before or with the next resync.
  • Consider whether shipping the Display + Speaker bundles now and adding the Touchscreen bundle in the follow-up bump PR would avoid the interim broken-bundle window. Either way is defensible.
Requires ESPHome 2026.7.0+ for the CST9220 touch.

Checklist

  • No hand-edited generated catalog (cst9220 is generator output from dev schema, spliced)
  • Pin map conflict-free and complete
  • Bundles/requires consistent with merged precedent
  • Bundles compile on the pinned esphome version — warning #1
  • Catalog entry parity with sibling components

Automated review by Kōan (Claude) HEAD=d17a7f7 3 min 25s

@esphbot esphbot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking issues found.

  • Touchscreen bundle produces a non-compiling config on the pinned esphome (2026.6.4)

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

Labels

new-feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants