Curiosity
Seeed XIAO ESP32-S3 (SKU 113991114, $7.49): variant board del chip ESP32-S3, con form factor “thumb-size” 21×17.8mm classico XIAO, antenna ceramic + UFL onboard, LiPo charging management integrato, 4 modi power (Active/Modem/Light/Deep sleep). Vincoli importanti rispetto al chip puro: solo 11 GPIO esposti (vs 45 chip), 1× UART (vs 3), 1× I2C (vs 2), 1× SPI (vs 4) — il resto resta interno al modulo. Per Visla v2 PCB NON usiamo questo board ma il modulo ESP32-S3-MINI-1-N8 direttamente (più piccolo, JLC-friendly per PCBA). Lo XIAO è il bench dev kit.
⚡ Bench-test consumi Visla 2026-06-05 (FNB58 inline + sketch ciclo)
Setup: XIAO ESP32-S3 standalone (no Expansion Board), cavo USB-C → FNB58 USB-C inline → Mac. Sketch test-power-modes.ino che cicla 5 stati ogni ~103s, durata cattura 320s = 3 cicli completi. Sample rate FNB58 ~24 Hz via Bluetooth.
Risultati misurati
| Stato cicli | Atteso datasheet | Misurato bench | Verdetto |
|---|---|---|---|
| ACTIVE_FULL (3s) busy loop CPU 240MHz | 80-100 mA | 42-43 mA picco | ⚠️ Sotto datasheet — averaging FNB58 + CPU non saturava 100% |
| ACTIVE_IDLE (10s) loop + delay | 25-30 mA | 28 mA stable | ✅ centro range |
| MODEM_SLEEP (10s) WiFi+BLE off | 25-27 mA | 28 mA | Indistinguibile da ACTIVE_IDLE — USB-CDC native sempre attivo |
| LIGHT_SLEEP (20s) timer wake | 1-3 mA | 2.7-3.0 mA | ✅ OK, floor USB-CDC quiescent |
| DEEP_SLEEP (60s) | 14 µA (datasheet) | 2.7-3.0 mA ❌ | BLOCKED by USB-CDC — il transceiver USB-OTG non si spegne mai col cavo connesso |
Statistiche per fase (3 cicli, 3420 samples)
| Phase cluster | N samples | Avg mA | Min | Max | StdDev | % tempo |
|---|---|---|---|---|---|---|
| ACTIVE_IDLE/MODEM_SLEEP (~28mA cluster) | 1908 | 29.29 | 20.90 | 43.00 | 4.61 | 55.8% |
| LIGHT/DEEP_SLEEP w/USB (~3mA cluster) | 1512 | 2.82 | 2.60 | 10.10 | 0.77 | 44.2% |
Cycle average: 17.59 mA · 5.13V USB → potenza media 90.2 mW · capacità ciclo 1.27 mAh per 260s.
🔋 Estrapolazione battery life Visla v2 — scenario reale veicolare
Scenario production realistico Visla v2 Auto: 1 ora di movimento + 23 ore fermo ogni giorno (=4.17% drive time). Tre profili di consumo basati su come gestire le 23h fermo:
Componenti consumo durante “drive” (1h continuo):
- XIAO MCU active continuous: 28 mA (bench-verified ✅)
- GPS attivo (es. MAX-M10S): ~10 mA addizionali
- Modem A7670 TX peak medi (1 burst/min @ 50 mA × 5s): ~4 mA averaged
- Totale stima drive: ~42 mA durante 1h × 3600s = 42 mAh consumati
Componenti consumo durante “stopped” (23h) — 3 strategie:
| Strategia | mA media | 23h consumate |
|---|---|---|
| 🟢 DEEP_SLEEP no-USB + wake hourly heartbeat (5s @ 42mA ogni ora) | 0.07 mA + 23×5s/3600×42 = 0.84 mA avg | 19.3 mAh |
| 🟡 LIGHT_SLEEP con IMU motion-wake (3 mA always-on) | 3 mA | 69 mAh |
| 🔴 No sleep — modem registered idle (worst case) | 25 mA | 575 mAh |
📅 Durata batteria per dimensione LiPo
| LiPo capacity | Strategia 🟢 deep sleep | Strategia 🟡 light sleep | Strategia 🔴 always-on |
|---|---|---|---|
| 500 mAh (wearable thin) | 8.1 giorni | 4.5 giorni | 19 ore |
| 1000 mAh (compact tag) | 16.3 giorni ⭐ | 9.0 giorni | 38 ore |
| 1500 mAh (slim box) | 24.5 giorni | 13.5 giorni | 2.4 giorni |
| 2000 mAh (medium box) | 32.6 giorni | 18.0 giorni | 3.2 giorni |
| 3500 mAh (18650 cell) | 57 giorni = ~2 mesi ⭐⭐ | 31.5 giorni | 5.7 giorni |
| 5000 mAh (large pack) | 81.4 giorni | 45.0 giorni | 8.1 giorni |
Sweet spot per Visla v2 Auto: LiPo 18650 3500 mAh + strategia 🟢 deep sleep + wake hourly heartbeat → ~2 mesi tra ricariche con guida 1h/giorno. Compatibile col target “carica mensile” per uso consumer.
Calcolo dettagliato strategia 🟢 (più realistica):
Daily budget:
Drive 1h × 42 mA = 42.0 mAh/day
Sleep 23h × 0.014 mA = 0.3 mAh/day
Heartbeats 23 × 5s × 42mA = 1.3 mAh/day
─────────────────────────────────────────
TOTALE = 43.6 mAh/day
LiPo 3500 mAh / 43.6 mAh/day = 80 giorni teorici
Con efficienza pratica 70% (charging losses + LiPo aging) = ~56 giorni
⚠️ Stime presuppongono strategia 🟢 con LiPo standalone (no USB). Con USB connessa floor 2.7 mA blocca il deep sleep e dimezza autonomy.
⚠️ Gotcha critico documentato in memoria (feedback_usb_cdc_blocks_deep_sleep): con USB-CDC connessa l’ESP32-S3 NON entra mai sotto ~2.5-2.7 mA. Per misurare il vero 14 µA datasheet → alimentare via LiPo battery senza USB attaccata.
📊 Osservazioni qualitative dal grafico
- Cicli puliti e ripetibili: 3 cicli identici visibili, periodo ~103s come da sketch
- Plateau ACTIVE_IDLE/MODEM_SLEEP perfettamente stabile a 28 mA — testimonia ottimo regolatore LDO onboard del XIAO
- Picchi ACTIVE_FULL a 42-43 mA brevi (~3s) → CPU max ma non era 100% saturata, datasheet 80-100 mA si vedrebbe solo con benchmarks NN o WiFi attivo
- Plateau LIGHT_SLEEP/DEEP_SLEEP a 2.7-3.0 mA molto stabile — buona indicazione che il chip ESP32-S3 entra correttamente in light sleep, è solo la USB a impedire il vero deep sleep
- Tensione USB stabile a 5.13V durante tutto il test — l’host Mac eroga senza brown-out anche durante i picchi
- “Ramp up” sospetto durante quello che dovrebbe essere deep sleep: rampa lineare ~2.7→28 mA in 60s — non è il chip che si sveglia gradualmente, è probabile un artefatto di FNB58 averaging o un comportamento di USB host che prova a sondare il device addormentato
- Energy budget realistico per Visla v2 bench: 17.59 mA avg consumati anche su un ciclo “ottimistico” 33% active → conferma che per autonomia mesi serve duty cycle <5% active
Dati raw
CSV completo della cattura: test-moduli/xiao-esp32s3-expansion-board/test-power-modes/logs/2026-06-05_fnb_capture.csv (7680 sample originali, 3420 dopo filtro settling).
JSON statistiche: /tmp/xiao-power-stats.json (locale, non checked-in).
Specs tecniche
| Parametro | Valore |
|---|---|
| Chip embedded | ESP32-S3R8 (variant con 8 MB PSRAM integrata) |
| CPU | Xtensa LX7 dual-core 240 MHz |
| PSRAM | 8 MB onboard |
| Flash | 8 MB onboard |
| Wireless | Wi-Fi 2.4 GHz + BLE 5.0 + Bluetooth Mesh |
| Antenna | ceramic onboard + U.FL connector per esterna |
| GPIO esposti XIAO | 11 (tutti PWM) — vs chip 45 |
| ADC esposti XIAO | 9 — vs chip configurabili su tutti GPIO |
| UART esposti XIAO | 1 — vs chip 3 (vincolo Visla v2 modem+GPS) |
| I2C esposti XIAO | 1 — vs chip 2 |
| SPI esposti XIAO | 1 — vs chip 4 |
| LED onboard | 1× User LED · 1× Charge LED |
| Buttons | 1× Reset · 1× Boot |
| B2B connector | NON presente nello XIAO ESP32-S3 base (sì sul Sense variant) |
| Power input | Type-C 5V · Battery 3.7V LiPo |
| Charging current | 50 mA fast / 3.8 mA trickle (lento vs nRF52840 100mA) |
| Operating Type-C | 5V @ 19 mA (con LDO overhead) |
| Operating BAT | 3.8V @ 22 mA |
| Modem-sleep | 27 mA (Wi-Fi/BLE off ma CPU on) |
| Light-sleep | 2 mA |
| Deep sleep | 14 µA (board level, chip nudo 10 µA) |
| Wi-Fi active | 220 mA |
| BLE active | 217 mA |
| Working temp | -40°C / +65°C (vs chip nudo -40°C/+85°C — board perde 20°C!) |
| Dimensions | 21 × 17.8 mm (form factor standard XIAO) |
| Software | Arduino IDE · MicroPython · ESP-IDF · PlatformIO |
| Seeed SKU | 113991114 (XIAO ESP32-S3 base) |
| Prezzo | $7.49 (10+: $6.50) |
| Variants XIAO ESP32-S3 | base · Sense (+camera OV2640 + mic + microSD, longer form) · Plus (production SoM) |
| Note Seeed da Sep 2024 | Lotti CN warehouse includono pin header preassemblati, lotti vecchi US no |
| Package | Include modulo XIAO + antenna esterna + 2× 7-pin header |
| Stock Visla | XIAO ESP32-S3 Pre-Soldered in arrivo Seeed order #4000531955 |
| HSCODE | 8517180050 (CN/US) · 8543709099 (EU) |
🧪 Note dal bench Visla
- ✅ $7.49 plug-and-play su Grove Base: bench dev kit più economico per testare ESP32-S3 senza saldare nulla
- ✅ LiPo charging onboard 50mA: niente TP4056 esterno, USB-C plug-and-charge — risparmia PCB design
- ✅ UFL antenna esterna $2.20: con stilo 2.4GHz Seeed range BLE/Wi-Fi >100m
- ✅ 14 µA deep sleep verificato Seeed: comparabile col chip nudo (10 µA), aggiunge solo ~4 µA del regolatore LDO
- ⚠️ Solo 1× UART esposto: per Visla v2 (A7670E modem + MAX-M10S GPS contemporanei) devi usare SoftwareSerial (instabile a >115200) o passare al modulo MINI standalone sul PCB
- ⚠️ Working temp -40°C / +65°C: il chip ESP32-S3 nudo arriva a +85°C ma il board Seeed perde 20°C — per Visla v2 Auto estate italiana sotto sole l’enclosure può superare 65°C (problema)
- ⚠️ Charging 50mA fast vs nRF52840 100mA: tempi ricarica ~2× più lenti per batterie >2000mAh
- ⚠️ NO B2B connector nel XIAO base (Sense variant sì): per stack di add-on board fisso passare a Sense o usare Grove cables
- ⚠️ Antenna ceramica onboard è debole: per qualsiasi range serio (>10m indoor con muri) attiva UFL + stilo esterno
- ⚠️ Modem-sleep 27 mA è ALTO: non assumere “Wi-Fi disabilitato = low power”, devi entrare attivamente in light/deep sleep
- ❌ USB-C 12V uccide: input rated 5V, dare 12V brucia il LDO buck interno (incidente bench Visla v1)
⚠️ Gotchas
- Pin diversi dal chip nudo: il numbering XIAO (D0-D10) NON corrisponde ai GPIO Espressif — usa pin table Seeed
- Reset button è “real reset” ma Boot button NON è collegato a GPIO 0 (è collegato a chip BOOT pin del controller USB) — diverso da DevKitC Espressif
- Lotti pre-Sep 2024 NON hanno pin header — verifica al ricevimento (potresti dover saldare)
- Operating temp 65°C max è limite hard del board, NON del chip — se chip-only design preferire MINI module per Visla v2 Auto outdoor estate
- Sense variant è form factor PIÙ LUNGO (~25×21mm vs 21×17.8) — non drop-in con il base in production PCB
- Plus variant ($16.40) ha B2B connector + microSD + RTC + more memory — production-ready ma costa 2×