Skip to content

feat(boards): add Seeed Studio XIAO ESP32-S3 Sense#136

Merged
wujiangang merged 3 commits into
espressif:masterfrom
kintansky:ft/seeedstudio_xiao_esp32s3_sense
Jul 8, 2026
Merged

feat(boards): add Seeed Studio XIAO ESP32-S3 Sense#136
wujiangang merged 3 commits into
espressif:masterfrom
kintansky:ft/seeedstudio_xiao_esp32s3_sense

Conversation

@kintansky

Copy link
Copy Markdown
Contributor

Summary

Add a board adaptation for the Seeed Studio XIAO ESP32-S3 Sense
(seeedstudio/xiao_esp32s3_sense). The Sense variant adds an OV2640
camera, a PDM microphone, and a microSD slot on top of the XIAO
ESP32-S3 base, so this fills a gap for an AI-vision/voice workload in
the smallest possible form factor.

The XIAO uses an ESP32-S3R8 module (8 MB QIO flash + 8 MB octal PSRAM).

Devices wired

  • Camera: OV2640 over DVP 8-bit (XCLK 20 MHz, SCCB on GPIO39/40,
    JPEG 800x600 @ 30 FPS default)
  • Microphone: on-board PDM mic on I2S0 (CLK=GPIO42, DATA=GPIO41)
  • Storage: on-board microSD slot over SPI; mounts as the
    CLAW_PATH_DATA root so the 8 MB flash is only used for the
    read-only system image
  • Console: USB Serial/JTAG (GPIO39-42 are reassigned to camera
    SCCB and PDM mic, so JTAG over GPIO is unavailable on this board)

Known constraint

The on-board user LED and the SD card CS line share GPIO21 on the
Sense expansion board. They cannot be used at the same time. This
adaptation gives the SD card the pin and does not expose the LED. The
README documents how to switch (cut J3 on the expansion board to
disable SD, then re-enable a status_led device on GPIO21 if needed).

Tested

  • idf.py bmgr -c ./boards -b xiao_esp32s3_sense && idf.py build clean
  • Flash and boot on real XIAO ESP32-S3 Sense hardware
  • SD card mounts and is readable/writable (storage.get_root_dir()
    /fatfs)
  • Camera camera.open + get_frame returns JPEG frames
  • Microphone audio.new_input(...).read(...) returns 16 kHz PCM
  • Web UI loads, agent conversations round-trip to the configured LLM

Notes for the maintainer

  • Vendor directory seeedstudio/ follows the same lowercase, no-space
    convention as espressif, lilygo, m5stack, dfrobot, waveshare.
  • No setup_device.c is needed; every device in board_devices.yaml
    uses a built-in board-manager type.
  • No board-specific components/ directory is needed; no chip driver
    had to be vendored in.
  • The README documents the SD-card CS / LED GPIO21 conflict and the
    32 GB / FAT32 SD card limit; both come from the Seeed reference
    design and are not workarounds on our side.

@CLAassistant

CLAassistant commented Jun 27, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@kintansky

Copy link
Copy Markdown
Contributor Author

@CLAassistant recheck

@laride

laride commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

Thank you for your PR! We are currently going through our internal review process.

@laride

laride commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

sha=361ed296ce2cb62e4e328f0190f40a04a24ffd39

kintansky and others added 3 commits July 8, 2026 14:06
Add board adaptation for the Seeed Studio XIAO ESP32-S3 Sense, which
uses an ESP32-S3R8 module (8 MB QIO flash + 8 MB octal PSRAM).

Devices supported:
  - OV2640 camera over DVP 8-bit (JPEG 800x600 @ 30 FPS default)
  - On-board PDM microphone on I2S0
  - On-board microSD slot over SPI; mounts as CLAW_PATH_DATA root
  - USB Serial/JTAG console (GPIO39-42 are reused for camera SCCB and
    PDM mic, so JTAG over GPIO is unavailable on this board)

Known constraint: the on-board user LED and the SD card CS line share
GPIO21 on the Sense expansion board. They cannot be used at the same
time; this adaptation gives the SD card the pin, and the LED is not
exposed as a device. See README.md for the full pin table, build
instructions, and troubleshooting notes.
The earlier 800x600@30FPS symbol was a guess; menuconfig reports
JPEG 640x480@25FPS as the actual OV2640 DVP default on the
ESP32-S3, and the 800x600@30FPS choice does not exist in the
esp_video Kconfig tree.
@laride laride force-pushed the ft/seeedstudio_xiao_esp32s3_sense branch from 361ed29 to 21279b6 Compare July 8, 2026 06:09
@wujiangang wujiangang merged commit 555bec3 into espressif:master Jul 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants