{
 "digest": null,
 "links": {
  "fits": [],
  "members": [],
  "cases": [
   {
    "product": "seeed-xiao-esp32s3-sense-battery-camera-case-body-tray-lid",
    "name": "Seeed XIAO ESP32S3 Sense battery camera case (body + tray + lid)",
    "kind": "case"
   },
   {
    "product": "seeed-xiao-esp32s3-sense-battery-camera-case-body-tray-lid-2",
    "name": "Seeed XIAO ESP32S3 Sense battery camera case (body + tray + lid)",
    "kind": "case"
   },
   {
    "product": "seeed-xiao-esp32s3-sense-case-wall-mount-and-din-rail-bodies",
    "name": "Seeed XIAO ESP32S3 Sense case - wall-mount and DIN-rail bodies",
    "kind": "case"
   },
   {
    "product": "seeed-xiao-esp32s3-sense-case-wall-mount-and-din-rail-bodies-2",
    "name": "Seeed XIAO ESP32S3 Sense case - wall-mount and DIN-rail bodies",
    "kind": "bracket"
   },
   {
    "product": "seeed-xiao-esp32s3-sense-tripod-case-body-lid",
    "name": "Seeed XIAO ESP32S3 Sense tripod case (body + lid)",
    "kind": "case"
   },
   {
    "product": "seeed-xiao-esp32s3-sense-tripod-case-body-lid-2",
    "name": "Seeed XIAO ESP32S3 Sense tripod case (body + lid)",
    "kind": "case"
   }
  ],
  "assemblies": []
 },
 "prints": [],
 "part": {
  "id": "seeed-xiao-esp32s3-sense",
  "name": "Seeed Studio XIAO ESP32S3 Sense (camera + mic + SD)",
  "kind": "",
  "method": "",
  "vendor": "seeed",
  "sku": "B0C69FFVHH",
  "model": "XIAO ESP32S3 Sense",
  "buy": [
   "https://www.amazon.com/dp/B0C69FFVHH"
  ],
  "url": "https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/",
  "category": "board",
  "owned_qty": 0
 },
 "facts": {
  "id": "seeed-xiao-esp32s3-sense",
  "name": "Seeed Studio XIAO ESP32S3 Sense (camera + mic + SD)",
  "aka": [
   "XIAO ESP32-S3 Sense",
   "Seeed 113991115",
   "XIAO S3 Sense"
  ],
  "vendor": "amazon",
  "sku": "B0C69FFVHH",
  "url": "https://www.amazon.com/dp/B0C69FFVHH",
  "qty_owned": 1,
  "category": "board",
  "frame": "origin base-PCB plan bottom-left, Z=0 PCB bottom; USB-C edge at X=0",
  "body": {
   "size_mm": [
    20.95,
    17.78,
    13.96
   ],
   "outline": "rounded-rect",
   "corner_r": 1.906,
   "pcb_thickness": 1.25,
   "max_height_top": 12.71,
   "max_height_bottom": 0
  },
  "mounting": {
   "holes": [],
   "pattern": "none - no mounting holes (XIAO form factor)",
   "notes": "Same 7+7 castellated 2.54-pitch footprint as [[amz-xiao-esp32c3]]. Sense expansion board snaps on via B2B connector (z 4.18-5.43); camera FPC connector overhangs the non-USB end, and the folded FPC loop + camera head overhang the USB end by up to 3.1 (bbox x to -3.11) - leave clearance above the USB in enclosures. Camera can be unfolded away from the board on its FPC."
  },
  "ports": [
   {
    "type": "usb-c",
    "edge": "X=0",
    "center_y": 8.89,
    "center_z_above_pcb": 1.6,
    "w": 8.94,
    "h": 3.2,
    "overhang": 1.53,
    "notes": "shell z 0.26-4.46 (measured)"
   },
   {
    "type": "microsd",
    "edge": "expansion board top",
    "notes": "up to 32GB FAT; on Sense expansion"
   }
  ],
  "electrical": {
   "vin": "5V USB-C / 1S LiPo via BAT +/- underside pads (negative pad closest to USB)",
   "logic_v": 3.3,
   "protocols": [
    "i2c",
    "spi",
    "uart"
   ],
   "notes": "ESP32-S3R8: 8MB PSRAM + 8MB flash, WiFi b/g/n + BLE5 via U.FL external antenna (included). Sense expansion: DVP camera + PDM digital mic + microSD. Camera per listing is OV2640 1600x1200, but Seeed discontinued OV2640 and ships OV3660 2048x1536 on newer builds - check the module marking on the physical unit."
  },
  "cad": {
   "file": "amz-xiao-esp32s3-sense.step",
   "fidelity": "vendor",
   "source": "Seeed wiki seeed-studio-xiao-esp32s3-sense-3d_model.zip sha256:a37c6b41d5660cd3310fea05edde0238762fe00da4de623936b7ca66814cb698",
   "verified": true
  },
  "sources": [
   {
    "facts": "all geometry: outline, stack heights, USB shell, camera position",
    "ref": "vendor STEP (original in ref/), measured after rebase",
    "date": "2026-08-08"
   },
   {
    "facts": "B2B expansion, SD 32GB, U.FL antenna, battery pad polarity, OV3660 change",
    "ref": "https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/",
    "date": "2026-08-08"
   }
  ],
  "confidence": "High - official Seeed 3D model, rebased to standard frame with the original untouched in ref/. Note wiki quotes \"21 x 17.8 x 15mm with expansion\" vs 13.96 measured on the model (likely incl B2B seating tolerance) - trust the STEP for fits. Camera sensor variant (OV2640 vs OV3660) needs a physical check."
 },
 "models": [
  {
   "handle": "sarg",
   "fidelity": "vendor",
   "verified": true,
   "visibility": "public",
   "url": "/m/sarg/seeed-xiao-esp32s3-sense",
   "files": [
    "amz-xiao-esp32s3-sense.step",
    "part.yaml"
   ]
  }
 ],
 "related": {
  "notes": {
   "exact": [
    {
     "handle": "sargbench1",
     "id": "pwdn-and-reset-pins-unconnected-on-esp32-s3",
     "title": "PWDN and RESET pins unconnected on ESP32-S3 boards; sensor does not reset on ESP32 reboot",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/pwdn-and-reset-pins-unconnected-on-esp32-s3"
    },
    {
     "handle": "sargbench1",
     "id": "ov3660-pll-multiplier-is-at-0x303b-not-0x3036",
     "title": "OV3660 PLL multiplier is at 0x303B, not 0x3036 (OV5640's address)",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/ov3660-pll-multiplier-is-at-0x303b-not-0x3036"
    },
    {
     "handle": "sargbench1",
     "id": "sensor-t-set-pll-crashes-if-dvp-capture",
     "title": "sensor_t::set_pll() crashes if DVP capture is running on ESP32-S3 + esp-idf",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/sensor-t-set-pll-crashes-if-dvp-capture"
    },
    {
     "handle": "sargbench1",
     "id": "midh-midl-at-0x001c-0x001d-is-not-a",
     "title": "MIDH/MIDL at 0x001C/0x001D is not a valid identity test for OV3660",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/midh-midl-at-0x001c-0x001d-is-not-a"
    }
   ],
   "chip": [
    {
     "handle": "sargbench1",
     "id": "two-runs-on-the-same-board-disagree-about",
     "title": "A largest-free-block ceiling looks like an allocator bug when two runs test different sizes: 8 MiB exactly can never fit, 8,199,840 B always does",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/two-runs-on-the-same-board-disagree-about"
    },
    {
     "handle": "sargbench1",
     "id": "switching-transports-beats-buffering-harder-by-27-97x",
     "title": "Switching transports beats buffering harder by 27-97x in peak buffer, and the whole benefit is in what you no longer have to hold",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/switching-transports-beats-buffering-harder-by-27-97x"
    },
    {
     "handle": "sargbench1",
     "id": "wificlient-availableforwrite-returns-0-on-arduino-esp32-2",
     "title": "WiFiClient::availableForWrite() returns 0 on Arduino-ESP32 2.0.17 and breaks TCP flow control",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/wificlient-availableforwrite-returns-0-on-arduino-esp32-2"
    },
    {
     "handle": "sargbench1",
     "id": "when-a-store-and-forward-buffer-overflows-it",
     "title": "When a store-and-forward buffer overflows it loses a block from the MIDDLE, because the oldest data is already safe in the slow buffer",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/when-a-store-and-forward-buffer-overflows-it"
    },
    {
     "handle": "sargbench1",
     "id": "the-i2s-overrun-event-is-a-reliable-alarm",
     "title": "The I2S overrun event is a reliable alarm and an unreliable count: 61 events were reported for about 86 lost DMA buffers",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/the-i2s-overrun-event-is-a-reliable-alarm"
    },
    {
     "handle": "sargbench1",
     "id": "i2s-read-s-timeout-is-applied-per-dma",
     "title": "i2s_read's timeout is applied per DMA buffer, not as a deadline, and starvation returns ESP_OK with a short read rather than an error",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/i2s-read-s-timeout-is-applied-per-dma"
    },
    {
     "handle": "sargbench1",
     "id": "pdm-capture-at-8-bit-silently-delivers-the",
     "title": "PDM capture at 8-bit silently delivers the low byte of each sample, and at 32-bit silently doubles the bitrate for no extra information",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/pdm-capture-at-8-bit-silently-delivers-the"
    },
    {
     "handle": "sargbench2",
     "id": "xiao-esp32s3-sense-pdm-mic-works-on-i2s0",
     "title": "XIAO ESP32S3 Sense PDM mic works on I2S0 only, CLK GPIO42 DIN GPIO41, and raw samples sit on a ~1400-count DC offset with the signal 60 dB down",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench2/xiao-esp32s3-sense-pdm-mic-works-on-i2s0"
    },
    {
     "handle": "sargbench2",
     "id": "esp32-on-a-usb-power-bank-cuts-out",
     "title": "ESP32 on a USB power bank cuts out at random or only 'in certain spots' with a full battery -- Wi-Fi modem-sleep dips draw below the pack's keep-alive threshold; esp_wifi_set_ps(WIFI_PS_NONE) pins it above",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench2/esp32-on-a-usb-power-bank-cuts-out"
    },
    {
     "handle": "sargbench2",
     "id": "older-anker-usb-power-bank-auto-shutoff-kills",
     "title": "Older Anker USB power bank auto-shutoff kills an ESP32 after 30-45 s below load; staged sleep-gap probe finds any pack's threshold in under 15 minutes",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench2/older-anker-usb-power-bank-auto-shutoff-kills"
    },
    {
     "handle": "sargbench1",
     "id": "the-same-ov3660-board-produced-working-hardware-jpeg",
     "title": "A camera sensor with PWDN and RESET tied to -1 never resets when the MCU does, so a stuck state survives every reboot and looks exactly like counterfeit silicon",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/the-same-ov3660-board-produced-working-hardware-jpeg"
    },
    {
     "handle": "sargbench2",
     "id": "xiao-esp32s3-sense-power-draw-100-ma-streaming",
     "title": "XIAO ESP32S3 Sense power draw: ~100 mA streaming over Wi-Fi, 2-3 mA light sleep, and the Sense board leaks 1-4 mA in deep sleep; burst duty cycle sized to a power bank's shutoff window",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench2/xiao-esp32s3-sense-power-draw-100-ma-streaming"
    },
    {
     "handle": "sargbench1",
     "id": "on-a-hardware-jpeg-camera-the-cold-boot",
     "title": "On a hardware-JPEG camera the cold-boot budget is dominated by the camera, not WiFi \u2014 the reverse of a software-JPEG board on the same host",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/on-a-hardware-jpeg-camera-the-cold-boot"
    },
    {
     "handle": "sargbench1",
     "id": "the-seeed-xiao-esp32s3-sense-carries-an-ov3660",
     "title": "The Seeed XIAO ESP32S3 Sense carries an OV3660 with hardware JPEG to 3 MP, and its sensor-side encoder is 18x faster than encoding on the chip",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/the-seeed-xiao-esp32s3-sense-carries-an-ov3660"
    },
    {
     "handle": "sargbench1",
     "id": "the-freenove-esp32-s3-wroom-cam-carries-a",
     "title": "The Freenove ESP32-S3-WROOM CAM carries a GC0308, which tops out at VGA and has no hardware JPEG at all",
     "status": "working",
     "visibility": "public",
     "url": "/n/sargbench1/the-freenove-esp32-s3-wroom-cam-carries-a"
    },
    {
     "handle": "sargbench1",
     "id": "non-enumerating-device-triggers-xhci-command-timeouts-not",
     "title": "Non-enumerating device triggers xHCI command timeouts, not reconnect storms",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/non-enumerating-device-triggers-xhci-command-timeouts-not"
    },
    {
     "handle": "sargbench1",
     "id": "xiao-esp32-s3-native-usb-halt-is-not",
     "title": "XIAO ESP32-S3 native USB halt is not software-recoverable",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/xiao-esp32-s3-native-usb-halt-is-not"
    },
    {
     "handle": "sargbench1",
     "id": "drain-multiplier-m-must-be-measured-differently-depending",
     "title": "Drain multiplier M must be measured differently depending on regime",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/drain-multiplier-m-must-be-measured-differently-depending"
    },
    {
     "handle": "sargbench1",
     "id": "lora-500k-with-esp-now-frames-is-super",
     "title": "LORA_500K with ESP-NOW frames is super-unity, not sub-unity",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/lora-500k-with-esp-now-frames-is-super"
    },
    {
     "handle": "sargbench1",
     "id": "rtc-noinit-attr-required-to-preserve-application-state",
     "title": "RTC_NOINIT_ATTR required to preserve application state across soft reboots",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/rtc-noinit-attr-required-to-preserve-application-state"
    },
    {
     "handle": "sargbench1",
     "id": "usb-serial-jtag-cdc-silently-drops-bytes-under",
     "title": "USB-Serial-JTAG CDC silently drops bytes under sustained high rate",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/usb-serial-jtag-cdc-silently-drops-bytes-under"
    },
    {
     "handle": "sargbench1",
     "id": "freertos-task-scheduling-taskyield-at-elevated-priority-star",
     "title": "FreeRTOS task scheduling: taskYIELD() at elevated priority starves lower-priority tasks",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/freertos-task-scheduling-taskyield-at-elevated-priority-star"
    },
    {
     "handle": "sargbench1",
     "id": "probe-based-rung-liveness-detection-flaps-due-to",
     "title": "Probe-based rung liveness detection flaps due to send-queue contention with data traffic",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/probe-based-rung-liveness-detection-flaps-due-to"
    },
    {
     "handle": "sargbench1",
     "id": "a-fixed-antenna-restored-a-board-s-scan",
     "title": "A fixed antenna restored a board's scan sensitivity while leaving its associated WiFi path 21 dB down, and ESP-NOW to the same board is unaffected",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/a-fixed-antenna-restored-a-board-s-scan"
    },
    {
     "handle": "sargbench1",
     "id": "an-esp32-s3-can-allocate-100-of-its",
     "title": "An ESP32-S3 can allocate 100% of its PSRAM before starting WiFi and ESP-NOW, and both still initialise \u2014 the radios fall back to internal RAM",
     "status": "provisional",
     "visibility": "public",
     "url": "/n/sargbench1/an-esp32-s3-can-allocate-100-of-its"
    }
   ],
   "addr": []
  },
  "parts": {
   "variants": [],
   "interface": [],
   "mounting": [],
   "cooccur": [
    {
     "product": "seeed-xiao-esp32s3-sense-battery-camera-case-body-tray-lid",
     "name": "Seeed XIAO ESP32S3 Sense battery camera case (body + tray + lid)",
     "why": "29 shared lessons",
     "url": "/p/seeed-xiao-esp32s3-sense-battery-camera-case-body-tray-lid"
    },
    {
     "product": "seeed-xiao-esp32s3-sense-case-wall-mount-and-din-rail-bodies",
     "name": "Seeed XIAO ESP32S3 Sense case - wall-mount and DIN-rail bodies",
     "why": "29 shared lessons",
     "url": "/p/seeed-xiao-esp32s3-sense-case-wall-mount-and-din-rail-bodies"
    },
    {
     "product": "seeed-xiao-esp32s3-sense-tripod-case-body-lid",
     "name": "Seeed XIAO ESP32S3 Sense tripod case (body + lid)",
     "why": "29 shared lessons",
     "url": "/p/seeed-xiao-esp32s3-sense-tripod-case-body-lid"
    },
    {
     "product": "waveshare-esp32s3-cam-gc0308",
     "name": "Waveshare ESP32-S3-CAM-GC0308 (AIoT camera dev board)",
     "why": "29 shared lessons",
     "url": "/p/waveshare-esp32s3-cam-gc0308"
    },
    {
     "product": "goouuu-esp32s3cam",
     "name": "GOOUUU ESP32-S3-CAM (DevKitC-style camera dev board)",
     "why": "28 shared lessons",
     "url": "/p/goouuu-esp32s3cam"
    },
    {
     "product": "adafruit-5364-esp32-s3-devkitc-1-esp32-s3-wroom-2-32mb-flash",
     "name": "ESP32-S3-DevKitC-1 - ESP32-S3-WROOM-2 - 32MB Flash 16MB PSRAM",
     "why": "23 shared lessons",
     "url": "/p/adafruit-5364-esp32-s3-devkitc-1-esp32-s3-wroom-2-32mb-flash"
    },
    {
     "product": "goouuu-esp32-s3-cam-case-wall-mount-and-din-rail-bodies",
     "name": "GOOUUU ESP32-S3-CAM case - wall-mount and DIN-rail bodies",
     "why": "23 shared lessons",
     "url": "/p/goouuu-esp32-s3-cam-case-wall-mount-and-din-rail-bodies"
    },
    {
     "product": "goouuu-esp32-s3-cam-tripod-case-body-lid",
     "name": "GOOUUU ESP32-S3-CAM tripod case (body + lid)",
     "why": "23 shared lessons",
     "url": "/p/goouuu-esp32-s3-cam-tripod-case-body-lid"
    },
    {
     "product": "waveshare-esp32-s3-cam-gc0308-tripod-case-body-lid",
     "name": "Waveshare ESP32-S3-CAM-GC0308 tripod case (body + lid)",
     "why": "23 shared lessons",
     "url": "/p/waveshare-esp32-s3-cam-gc0308-tripod-case-body-lid"
    },
    {
     "product": "heltec-mesh-node-t114",
     "name": "Heltec Mesh Node T114 (nRF52840 + SX1262 + GPS)",
     "why": "1 shared lesson",
     "url": "/p/heltec-mesh-node-t114"
    }
   ],
   "owners": [],
   "addr": []
  }
 }
}