A collection of ESP-IDF firmware projects for the Waveshare ESP32-C6-Touch-AMOLED-1.8 development board.
Built with an agentic-first development workflow — each project is developed with Claude Code as the primary agent. Hardware specs, build rules, LVGL gotchas, and lessons learned across all projects live in CLAUDE.md and .claude/commands/, giving the agent full context from the first message of every session.
| Feature | Detail |
|---|---|
| Chip | ESP32-C6, RISC-V 160MHz, single-core |
| Flash | 16MB external NOR-Flash |
| Display | 1.8" AMOLED, SH8601, 368x448, QSPI 40MHz |
| Touch | Capacitive, FT3168, I2C |
| PMIC | AXP2101 (LiPo charge/discharge, power rails) |
| IMU | QMI8658 (6-axis accelerometer + gyroscope) |
| RTC | PCF85063 (with backup battery pads) |
| Audio | ES8311 codec + dual microphone array + speaker |
| IO Expander | TCA9554 (controls display/touch power) |
| Wireless | Wi-Fi 6, BT 5 LE, IEEE 802.15.4 (Thread / Zigbee / Matter) |
| Storage | microSD card slot (SDMMC) |
| Battery | 3.7V LiPo, MX1.25 connector, ~350mAh |
| # | Project | One-liner |
|---|---|---|
| 11 | MCP Canvas | MCP server — AI agent draws to AMOLED over WiFi (12 tools) |
| 12 | Baby Cry DSP | Crying detection via pure DSP — FFT, adaptive threshold, SD logging |
| 13 | Baby Cry VAD | Crying detection with VAD gate + DSP (ESP-SR research documented) |
| 14 | Sensory Play | IMU-driven toy — particle physics, tilt gestures, touch keyboard |
| 15 | Nursery Rhymes | Music-box player with realistic harmonic synthesis |
| 16 | BitChat Relay | BLE mesh relay for BitChat protocol — telemetry + SD logging |
| 17 | PixelPet | Tamagotchi-style virtual pet with sprite renderer + RTC decay |
| 18 | Govee Monitor | BLE humidity/temperature monitor with charts, Supabase upload and a parquet archive |
Each project's own README has the detail (architecture, build steps, screenshots). Numbering continues from an earlier board (ESP32-C6-LCD-1.47) in a separate repo, which is why it starts at 11.
- ESP-IDF v5.5+
- USB-C cable
# Activate ESP-IDF
. ~/esp/esp-idf/export.sh
# Build
idf.py -C projects/<name> build
# Flash
idf.py -C projects/<name> -p /dev/cu.usbmodem1101 flash- Copy the scaffold from an existing project or use
/new-project <name>with Claude Code - Copy
sdkconfig.defaults.template→sdkconfig.defaults, fill in WiFi credentials - Run
idf.py -C projects/<name> set-target esp32c6 - Build and flash
ESP32-C6-Touch-AMOLED-1.8/
├── shared/components/ # Shared ESP-IDF components (amoled_driver, lvgl, ...)
├── projects/ # One subdirectory per firmware project (11_…, 12_…, …)
├── docs/
│ ├── board-research/ # Numbered research docs — board, silicon, peripherals
│ ├── waveshare-support/ # Verbatim vendor support correspondence
│ ├── research/ # External research artefacts (e.g. BitChat protocol)
│ ├── reference/ # Score sheets, lookup tables
│ ├── media/ # Photos and demo videos for READMEs
│ └── *.md # Loose blog posts and ad-hoc setup notes
├── ref/ # Vendor reference code (gitignored)
├── .claude/commands/ # Agent skills for Claude Code
├── CLAUDE.md # Operational summary: pin map, build rules, gotchas
└── README.md # You are here
CLAUDE.md— pin map, build commands, init sequence, every "gotcha" we've hit. Read this first.docs/board-research/— long-form research backingCLAUDE.md: official docs digest, chip reference, GPIO map, I2C bus, RTC/audio, power saving, project plans, etc. See its index.docs/firmware-robustness.md— how this repo makes firmware-to-REST pipelines survive outages, reboots and its own bugs. Every rule traced to a real failure in project 18.docs/waveshare-support/— exact vendor support tickets and replies, kept verbatim.- Per-project READMEs — each
projects/<name>/README.mdcovers that project's architecture and quirks.
- TCA9554 IO expander (I2C 0x20) must set P4 and P5 HIGH before display/touch init
- SH8601 coordinates must be even-aligned — LVGL needs a rounder callback
- No PSRAM — display has built-in GRAM; use widget-based rendering, not framebuffer
- Nearly all GPIOs are used by onboard peripherals — very few free pins for external hardware
- 6 I2C devices share one bus (GPIO 7/8): TCA9554, AXP2101, FT3168, QMI8658, PCF85063, ES8311
- AXP2101 PMIC — long-press power button (2.5s) for hardware shutdown
- SD card and AMOLED display share SPI2 — cannot be active simultaneously. See
docs/board-research/18-sd-display-spi-sharing.md.
