Skip to content
Conduit

skill

ws-ESP32-S3-CAM

Firmware + tooling workspace for the Waveshare ESP32-S3-CAM-GC2145 (ESP32-S3 + GC2145 camera, ES8311 codec, ES7210 mic ADC). Vendor notes, slash commands, and example projects.

chayuto/ws-ESP32-S3-CAMcommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/chayuto/ws-ESP32-S3-CAM itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 25, 2026

ws-ESP32-S3-CAM

Workspace for the Waveshare ESP32-S3-CAM-GC2145 (SKU 33702, P/N ESP32-S3-CAM-GC2145) — the GC2145 DVP sensor variant of Waveshare's ESP32-S3-CAM-OVxxxx carrier board.

Full context, pinout, and vendor quirks live in CLAUDE.md.

Repo philosophy

This repo publishes firmware + tooling only — recordings, derived labels, trained classifier weights, and analyses that narrate real captures stay local. The datasets/ tree, lab notebooks under projects/*/ml-experiments/, and date-stamped narrative docs are gitignored. See CLAUDE.md "Publish boundary" for the full list.

Repo layout

ws-ESP32-S3-CAM/
├── CLAUDE.md                 # authoritative board notes + publish boundary
├── README.md                 # this file
├── .claude/
│   └── commands/             # /build /flash /monitor /ml-researcher /restore-factory ...
├── docs/
│   ├── blog/                 # public-facing writeups
│   └── research/             # public-info-sourced surveys, design + method docs
├── projects/
│   └── cry-detect-01/        # YAMNet-on-S3 baby-cry detector + auto-ensemble tooling
└── ref/                      # vendor docs + repos (gitignored, ~1.2 GB)
    ├── datasheets/           # ESP32-S3, GC2145, ES8311, ES7210
    ├── schematic/            # ESP32-S3-CAM schematic
    ├── wiki/                 # offline docs.waveshare.com snapshot
    └── demo/                 # ESP32-S3-CAM-OVxxxx + display-support vendor clones

Active projects

projects/cry-detect-01

Discreet bedroom baby-cry monitor. No camera, no screen — ES7210 mic → YAMNet-1024 INT8 (TFLite Micro) → SD-card CSV + SSE web UI + red-LED alert. Host-side data tools turn the resulting captures into auto-labelled training material via a 4-oracle ensemble (no human in the label loop).

Status (2026-04-25):

  • Detector firing on real cries. After two firmware fixes — double-sigmoid removal in the YAMNet output path and a mel-feature magnitude-vs-power correction — the on-device cry_conf reaches 0.934 on real cries (matching FP32 YAMNet) versus 0.000 on silence. First ALERT_FIRED events (n=6 in one night) landed under the fixed firmware.
  • Stage 2.7 file API live: remote /files/ls, /files/get, /files/tail, /files/df — pull logs without pulling the SD card.
  • Local timezone: Sydney AEST/AEDT. Timestamps RFC-3339 with numeric offset (e.g. 2026-04-18T08:13:53.726+10:00).
  • Host-side auto-ensemble label pipeline (tools/ensemble_audit.py) merges YAMNet wide-class scores, an acoustic-feature classifier, an embedding classifier on YAMNet's 2048-d meanmax, a sub-type cluster, and temporal context into per-capture confidence tiers. Method documented in docs/research/host-side-auto-ensemble-method.md.
  • ML work follows the /ml-researcher discipline: pre-register hypothesis, stamp model versions, lab-notebook gitignored, conclusions only land as research notes.

Research notes

Public-eligible surveys, design docs, and method writeups under docs/research/:

DocumentScope
host-side-auto-ensemble-method.mdThe 4-oracle no-human label pipeline + LOSO discipline + ablation findings
repo-boundary-yamnet-cry-distill.mdBoundary between this device-side workspace and the planned yamnet-cry-distill-int8 training repo
data-vault-redesign-20260425.mdWhy we removed humans from label production
cry-detect-data-program-plan.mdLong-term roadmap to first real training run
cry-detect-starter-plan.mdWhy pretrained YAMNet over ESPDet/custom training
crying-detection-s3-ml-alternatives.mdAlternative ML approaches considered + rejected
yamnet-class-exploitation.md20 watched AudioSet classes: cry spectrum, joy context, FP sources
retraining-roi-analysis.mdRecalibration vs. head-retraining vs. full-finetune ROI
log-management-design-20260423.mdVault layout + extraction protocol design
classification-logging-plan.mdStage 2.6a: log all watched-class confidences per inference
file-api-plan.mdStage 2.7 spec
runtime-robustness-plan.mdSix bug classes + prevention catalogue
feasibility-s3-camera-project.mdVision-side feasibility (de-prioritised; cataloguing only)
prior-art-survey.md, pretrained-espdl-inventory.md, yolo26-and-esp-dl-2026.md, yolo26-s3-port-plan.mdVision-side surveys (archived)

ESP-IDF

  • Version required: ≥ v5.5.1 (we use 5.5.3 at ~/esp/esp-idf)
  • Activate: . ~/esp/esp-idf/export.sh (source it; Claude Code will prompt for the . builtin — answer yes once per session)

Build / flash / monitor

. ~/esp/esp-idf/export.sh
idf.py -C projects/cry-detect-01 -B /tmp/ws-cry-detect-01-build build
idf.py -C projects/cry-detect-01 -B /tmp/ws-cry-detect-01-build -p /dev/cu.usbmodem3101 flash

Monitoring: idf.py monitor is broken in non-TTY shells — use the pyserial snippet in .claude/commands/monitor.md.

Hardware quick-reference

Value
CPUESP32-S3 rev v0.2, dual-core Xtensa LX7 @ 240 MHz
PSRAM8 MB OPI @ 80 MHz
Flash16 MB quad (3.3 V), QIO @ 80 MHz
CameraGC2145 DVP (PID 0x2145, SCCB 0x3C)
Audio DACES8311 (I²C 0x30 8-bit / 0x18 7-bit)
Audio ADCES7210 4-channel (I²C 0x40, I²S slave; dual MEMS mics)
I/O expanderCH32V003 over I²C (LED, LCD-reset, backlight PWM, battery ADC)
USBNative USB-Serial/JTAG on GPIO 19/20
SD1-bit SDMMC (CLK=16 / CMD=43 / D0=44)
ButtonsBOOT @ GPIO 0, user @ GPIO 15
Built-in temp sensorESP32-S3 internal (die temp, via driver/temperature_sensor.h)

Full authoritative pinout in CLAUDE.md.

Differences from sibling repos

ws-ESP32-S3-CAM (this)ws-ESP32-C6-Touch-AMOLED-1.8
Targetesp32s3esp32c6
Cores2 (Xtensa LX7)1 (RISC-V)
PSRAM8 MB OPI ✓None
CameraGC2145 onboardNone
ScreenExternal FPC onlyOnboard AMOLED
Prior baby-cry workYAMNet ML (this repo)RMS + ratio rule-based

The sibling C6 project's rule-based detector serves as the empirical baseline for judging whether cry-detect-01's ML model is finding events that actually occurred.

Sibling repos

Waveshare board workspaces built with the same agentic-first workflow. If a technique is missing here, it is probably solved in one of the others.

RepoBoardFocus
ws-ESP32-C6-Touch-AMOLED-1.8ESP32-C6-Touch-AMOLED-1.8 — RISC-V C6, 1.8" SH8601 AMOLED, IMU, codecMCP canvas, BitChat BLE relay, baby-cry DSP, sensory toys, Govee monitor
ws-ESP32-S3-Touch-AMOLED-1.8ESP32-S3-Touch-AMOLED-1.8 — Xtensa S3 + PSRAM, 1.8" CO5300 AMOLED, CST820 touchverified board notes, ESP-IDF template, ESP-SR voice picture book
ws-ESP32-S3-CAM (this repo)ESP32-S3-CAM-GC2145 — Xtensa S3 + 8 MB PSRAM, GC2145 DVP camera, ES8311/ES7210 audiocamera + audio bring-up, YAMNet baby-cry detection
ws-esp32c6-lcd147-projectsESP32-C6 + 1.47" ST7789 LCD — RISC-V C6, 172×320 LCD, Wi-Fi 6LVGL animations, Wi-Fi 6 tools, MCP servers
ws-pico2goPico2Go robot — RP2350A, TB6612 drive, TLC2543 line array, ST7789MicroPython robotics, PIO sensing, schematic reverse engineering
↑↓ navigate openesc close