Hardware Matrix

Is Seeed Studio XIAO ESP32S3 Sense Cam & Mic Compatible with Home Assistant (ESPHome)?

Verdict Badge
VERDICT: [ COMPATIBLE (MANUAL CONFIG REQUIRED) ]
Protocol: DVP / I2S / 3.3V
Bridge Needed: NO

Electrical Specifications

Always confirm pin assignments against the manufacturer datasheet before wiring.

Not yet documented. Electrical specifications for this device have not been confirmed against a manufacturer datasheet, so none are shown here rather than showing estimates. Submit verified specifications if you have the datasheet to hand.

Compatibility Overview

Thumb-sized ESP32-S3 module featuring camera expansion board with OV2640 (Early Revisions) / OV3660 (Current Revisions) 3MP sensor, PDM digital microphone, and MicroSD slot for local AI audio/video telemetry.

Wiring Seeed Studio XIAO ESP32S3 Sense Cam & Mic to XIAO ESP32S3

Module pin XIAO ESP32S3 Note
Camera XCLK GPIO10 Fixed by the Sense expansion board. Nothing on the camera is wired by hand; these are the pins the config names.
Camera SIOD / SIOC GPIO40 / GPIO39 The SCCB control bus — I2C in all but name.
Camera D0–D7 GPIO15, GPIO17, GPIO18, GPIO16, GPIO14, GPIO12, GPIO11, GPIO48 Y2 through Y9 in the sensor datasheet, in that order in data_pins.
Camera VSYNC / HREF / PCLK GPIO38 / GPIO47 / GPIO13
PDM microphone CLK / DATA GPIO42 / GPIO41 One clock, one data line: the mic is PDM, not I2S, hence pdm: true.
Antenna U.FL connector The XIAO ESP32S3 has no onboard antenna. Clip the supplied rod antenna on before flashing.

Host pins are the ones the configuration on this page uses. Move a pin here and change it in the YAML — they are documented together so they cannot disagree.

Technical Specification Matrix

Feature / Attribute Specification / Status
Hardware Protocol DVP / I2S / 3.3V
Bridge Required NO
Border Router Needed None
Hardware Capabilities & Peripherals
OV2640 / OV3660 Camera Stream PDM Digital Mic Audio MicroSD Card

Note: these entities come from the ESPHome configuration you flash — each one needs its matching component in that YAML before it appears.

Pairing Complexity Intermediate
Factory Reset Instruction Hold BOOT button while plugging USB cable.

Wire, Flash, Adopt, Check

1

Wire it up

Follow the wiring table above. The XIAO ESP32S3 pins there are the ones the configuration uses, so if you move one, change it in both places.

2

Flash the configuration

Create a new device in the ESPHome dashboard (the Home Assistant add-on) and paste the configuration below into it, or save it as emb_xiao_s3_sense_esphome.yaml and run esphome run emb_xiao_s3_sense_esphome.yaml. The first flash goes over USB. If it is not detected, hold BOOT button while plugging USB cable to put it in download mode. Every update after that is over the air.

3

Adopt it in Home Assistant

Settings → Devices & Services. A node on the same network shows up as a discovered ESPHome device within a minute of joining Wi-Fi; choose Configure and enter the API encryption key from your secrets.yaml. If discovery does not find it, add the ESPHome integration by hand with the node's IP address.

4

Check it works

The boot log's setup section lists the camera with the sensor it detected and the configured resolution, and Home Assistant adds a camera entity to the node. Open http://<node-ip>:8080 in a browser: a moving picture there means the pins, PSRAM and antenna are all right. A picture on the API stream but a stalled MJPEG stream is Wi-Fi, not the camera.

ESPHome Configuration

Starting configuration for Seeed Studio XIAO ESP32S3 Sense Cam & Mic on XIAO ESP32S3. Untested on hardware — verify wiring and pins against your own board.

# ESPHome configuration for Seeed Studio XIAO ESP32S3 Sense Cam & Mic
# Host: XIAO ESP32S3. Pin numbers below are host-side defaults — any free
# GPIO will do, and you should change them to match your own wiring.

esphome:
  name: emb_xiao_s3_sense_esphome
  friendly_name: "Seeed Studio XIAO ESP32S3 Sense Cam & Mic"

esp32:
  board: seeed_xiao_esp32s3
  framework:
    type: esp-idf

psram:
  mode: octal
  speed: 80MHz

logger:
  hardware_uart: USB_SERIAL_JTAG

api:
  encryption:
    key: !secret api_encryption_key

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# Camera pins are fixed by the Sense expansion board (Seeed's camera_pins.h
# for the XIAO_ESP32S3 target). The component detects OV2640, OV3660 and
# OV5640 at boot, so the same block covers every revision of the module.
esp32_camera:
  name: "Camera"
  external_clock:
    pin: GPIO10
    frequency: 20MHz
  i2c_pins:
    sda: GPIO40
    scl: GPIO39
  data_pins: [GPIO15, GPIO17, GPIO18, GPIO16, GPIO14, GPIO12, GPIO11, GPIO48]
  vsync_pin: GPIO38
  href_pin: GPIO47
  pixel_clock_pin: GPIO13
  resolution: 800x600
  jpeg_quality: 12
  max_framerate: 10 fps
  idle_framerate: 0.2 fps

# MJPEG stream on port 8080 — open http://<node-ip>:8080 in a browser, or
# add it to Home Assistant as a Generic Camera for a smoother feed than the
# native API stream.
esp32_camera_web_server:
  - port: 8080
    mode: stream

# The onboard PDM microphone: one clock line, one data line.
i2s_audio:
  - id: i2s_mic
    i2s_lrclk_pin: GPIO42

microphone:
  - platform: i2s_audio
    id: pdm_mic
    i2s_audio_id: i2s_mic
    i2s_din_pin: GPIO41
    pdm: true
    adc_type: external

Before you flash: the !secret values come from your secrets.yaml, and the GPIO numbers are host-side defaults rather than properties of this part — change them to match how you actually wired it.

What Appears in Home Assistant

Camera
camera

Snapshots and a low-rate stream through the native API. The ESPHome device page in Home Assistant shows it as a camera card.

MJPEG stream on port 8080
not an entity

Open http://<node-ip>:8080 in a browser, or add it as a Generic Camera in Home Assistant for a smoother feed than the API stream.

Microphone
not an entity

The microphone: block exposes nothing on its own. It is the input for voice_assistant or micro_wake_word, which are separate components.

Known Problems and Fixes

No log output over USB without one line

The XIAO's USB-C port goes to the S3's USB-Serial-JTAG peripheral, not UART0. With the default logger the node boots silently. The config sets logger: hardware_uart: USB_SERIAL_JTAG, which is why esphome logs works over the cable.

Attach the antenna

There is no ceramic antenna on this board. Without the rod antenna on the U.FL connector the node may still join Wi-Fi at a metre from the router, then drop the moment the camera starts streaming.

Seat the expansion board

The camera, microphone and card slot all live on the detachable Sense board, on two board-to-board connectors. A board pressed on at an angle gives a camera probe failure at boot and a mic that reads silence. Press both connectors home until they click.

PSRAM is not optional

The frame buffer lives in the 8MB octal PSRAM. The config declares psram: mode: octal for that reason; a generic esp32-s3-devkitc-1 board block without it initialises the camera and then fails to allocate a frame, or limits you to tiny resolutions.

Which sensor did you get

Seeed has shipped the Sense with an OV2640 and, on later batches, an OV3660; an OV5640 is sold as an upgrade. esp32_camera probes the sensor at boot and drives whichever it finds, so the config does not change — but the OV2640 tops out at 1600x1200 and the others go higher, if you raise resolution.

It runs hot when streaming

The S3 streams JPEG at a sustained few watts and the bare module has no heatsink. idle_framerate keeps the camera at a fraction of a frame per second until something is actually watching, and is the difference between warm and too hot to touch.

The card slot is on SPI

The microSD slot on the Sense board sits on the S3's SPI pins with chip select on GPIO21, clear of every camera pin. The config does not touch it; ESPHome's sd_mmc_card and the SPI SD components can, if you want local recording.

🛠️ Hardware Correction & Field Contributions

Report a Pinout Error or Submit Tested Code Snippets

Found a pin mapping quirk or built a custom ESPHome YAML driver for Seeed Studio XIAO ESP32S3 Sense Cam & Mic? Submit a pull request or report corrections to our index.

Frequently Asked Questions

Does Seeed Studio XIAO ESP32S3 Sense Cam & Mic work without an internet connection?
100% local camera stream and audio processing.
How is Seeed Studio XIAO ESP32S3 Sense Cam & Mic powered and wired to the host board?
USB-C 5V power input.
How does the host board reach Home Assistant (ESPHome)?
Wi-Fi 2.4GHz / Bluetooth 5.0.

Alternatives

Related Compatibility Matrix Guides