V
Visla Hardware
Portal R&D
🧩 Moduli & Shield ✓ Verified · 2026-06-04 ✓ In stock 🧪 Tested bench

XIAO Expansion Board Base (Grove OLED)

Seeed Studio
📦 Dev board
€16.40
Seeed Studio Expansion Board Base for XIAO with Grove OLED
OLED 0.96" + RTC + microSDGrove I2C × 2 + UART × 1Compat S3 / C6 / nRF52840 ✅
📑 Indice sezioni

Curiosity

Carrier board universale per la famiglia XIAO di Seeed (SKU 103030356, $16.40 / 10+: $11.50). Ospita qualsiasi XIAO ESP32/nRF52840/RP2040 e gli aggiunge in un colpo: OLED 0.96” SSD1306, RTC PCF8563 con backup CR1220, slot microSD, buzzer passivo (A3), user button (D1), pulsante RESET hw, SWD debug header, 5V servo connector e JST 2.0mm LiPo charging. Quattro connettori Grove pre-cablati (2× I2C, 1× UART, 1× A0/D0). Form factor “metà di Raspberry Pi 4” per prototipi tascabili. Compatibile con TUTTI gli XIAO TRANNE nRF54L15 e MG24 (footprint diverso). Sul bench Visla è la base default per esperimenti rapidi con periferiche I2C/UART senza saldare niente.

🗺️ Pinout map + dove cablare i Dupont

Pinout ufficiale Seeed (legenda colori in basso: Analog · Digital · IIC · UART · Power · GND · SPI):

XIAO Expansion Board — pinout ufficiale Seeed

Guida cablaggio Visla — dove infilare le 4 femmine Dupont per chain Qwiic I2C (3V3 + GND sulla strip superiore, D4/SDA + D5/SCL sulla strip inferiore — SWD header NO):

XIAO Expansion Board — guida cablaggio Visla annotata

⚠️ Gotcha frequente: SWCLK/SWDIO sono pin debug SWD del chip XIAO, NON I2C. Se cabli SDA/SCL lì il bus I2C non vede il device esterno (vedi solo OLED 0x3C + RTC 0x51 onboard).

Specs tecniche

ParametroValore
Seeed SKU103030356
Prezzo$16.40 (10+: $11.50)
Compatibilità XIAOESP32-S3 ✅ · ESP32-C3/C5/C6 ✅ · nRF52840 ✅ · RP2040/2350 ✅ · SAMD21 ✅ · MG24 ❌ · nRF54L15 ❌
DisplayOLED 0.96” SSD1306 128×64 I2C (addr 0x3C)
RTCPCF8563T/5 I2C (addr 0x51) + backup CR1220
StoragemicroSD slot (SPI)
BuzzerPassivo (PWM-driven) su A3/D3
User buttonD1 (active-LOW, pull-up esterna onboard)
Reset buttonHW RESET su pin XIAO
SWD headerSWCLK + SWDIO + GND + RESET (male 2.54mm)
Power inputUSB-C 5V · JST 2.0mm LiPo 3.7V
Charging currentMax 460 mA
PMICSY6974B (era ETA6003 fino al 2025-11-21)
Grove I2C × 2SDA=D4 (GPIO5 su S3), SCL=D5 (GPIO6 su S3) — bus condiviso con OLED + RTC
Grove UART × 1TX=D6, RX=D7 — è la HW UART1 del XIAO
Grove Analog × 1A0/D0
Grove Button × 1D1 (collegato al pulsante onboard)
5V servo header5V out per servomotori / sensori 5V
IP ratingIP40 (uso bench, non outdoor)
Dimensioni~½ Raspberry Pi 4 (compatto)
HSCODE8543909000 (CN) · 8543903500 (US) · 8471707000 (EU)
HW revisions2025-11-21 PMIC ETA6003 → SY6974B

⚡ Consumi bench (2026-06-21, DPS-150)

Misurato con XIAO nRF52840 Sense + sketch demo (CPU in loop continuo, niente sleep — caso “tutto attivo”). USB-C staccata. Confronto 3V3 diretto (sistema puro, bypassa il PMIC) vs presa batteria JST 3.8V (drain reale via PMIC SY6974B):

Stato@3.3V diretto (sistema)@3.8V batteria (via PMIC)
Display ON26.9 mA · 89 mW30.7 mA · 117 mW
Display OFF25.7 mA · 98 mW
→ OLED (delta)5.0 mA · 19 mW

Cosa emerge:

  • OLED SSD1306 ≈ 5 mA (acceso, contenuto testo). Spegnerlo (u8x8.setPowerSave(1)) risparmia ~5 mA → per un prodotto a batteria tienilo spento di default.
  • Sistema senza OLED ≈ 25.7 mA @3.8V: di cui il nRF52840 attivo è solo ~6 mA → restano ~18 mA di overhead dev-board.

🔍 Perché ~18 mA con OLED OFF? (dallo schematico Seeed) la board ha 3 convertitori + LED, tutti “comodità da dev board”:

Sorgente~ConsumoCosa
Boost 5V ETA1038 (sempre acceso)grossogenera il rail 5V del servo header anche a vuoto → quiescent + switching loss
LED carica (lampeggia se “no battery”)~mAcol DPS come batteria finta il charger non vede LiPo valida → LED lampeggia
Buck 3.3V ETA3410 (PMIC SY6974B, era ETA6003)~24%perdita di conversione 3.8V→3.3V
Level shifter + pull-up Grove + RTC~1-2 mAquiescent

→ Sul PCB custom del Tag non metti il boost 5V (rail inutile), né il LED carica lampeggiante, né i level shifter Grove → questi ~18 mA spariscono. Riferimento prodotto = chip nudo 5.8 mA (vedi /tests/ nrf52840 mcu-active-idle), NON la Expansion. Schematico Seeed.

  • Overhead PMIC ~24%: batteria 117 mW vs 89 mW del 3V3 diretto → efficienza SY6974B ~76% a basso carico. ⚠️ Per misure di consumo componenti usa il 3V3 diretto (pulito); per l’autonomia reale usa la presa batteria (include il PMIC).
  • ⚠️ Questi NON sono numeri low-power: il demo tiene CPU+OLED sempre on. Tag vero = CPU deep-sleep + OLED off → floor µA (serve PPK2 per leggerli, il DPS si ferma a ~mA).

💡 Gotcha presa batteria: il PMIC col DPS come “batteria finta” può non abilitare il FET se non vede mai una USB (ship mode). Se a batteria legge 0 mA con tensione che regge → ri-inserisci bene il JST o sveglia con USB 1s. Polarità: verifica col multimetro (continuità del pin − verso un GND noto) prima di alimentare.

🧪 Note dal bench Visla

  • Bench-tested 2026-06-04 (hello-OLED + button + buzzer): sketch test-moduli/xiao-esp32s3-expansion-board/test-hello-oled/ con U8g2 HW-I2C, button D1 active-LOW, buzzer passivo D3 con tone() → tutto OK al primo flash sia su XIAO ESP32-S3 (FQBN esp32:esp32:XIAO_ESP32S3) sia su XIAO ESP32-C6 (FQBN esp32:esp32:XIAO_ESP32C6). Pin-map XIAO D0–D10 è identica tra S3 e C6 → sketch portabile senza modifiche (gestiamo solo il label chip via CONFIG_IDF_TARGET_*)
  • Plug-and-play assoluto: zero saldature, basta innestare il XIAO e attaccare Grove cables (Seeed kit SKU 110990036, $1.45). I2C SDA=D4 / SCL=D5 verificati con OLED SSD1306 0x3C
  • I2C bus condiviso = molto utile: OLED (0x3C) + RTC (0x51) + qualsiasi Qwiic sensor (es. MAX-M10S 0x42, LSM6DS3 0x6A) coesistono tutti sullo stesso bus. Aggiungendo un Grove I2C Hub puoi avere 6+ device in parallelo
  • Pin neri = passthrough pieno del XIAO: i 14 pin maschio sui due lati NON sono Grove, sono i pin del XIAO esposti tal-quali (D0–D10, GND, 3V3, 5V, USB+ev, SWD). Servono per cablare Dupont a qualsiasi modulo non-Grove (motor driver, NeoPixel strip, modulo SPI custom)
  • Trick multi-UART su ESP32-S3/C6: anche se Seeed espone “solo 1 Grove UART” (D6/D7), l’ESP32 ha 3 UART hardware interne mappabili a qualsiasi GPIO via UART matrix. Esempio per modem + GPS contemporaneamente: HardwareSerial modem(1); modem.begin(115200, SERIAL_8N1, D7, D6); sul Grove UART, HardwareSerial gps(2); gps.begin(9600, SERIAL_8N1, D9, D8); sui pin neri con Dupont
  • Scenario “all-in-one” Visla v2 bench (modem + GPS + display senza Dupont): A7670E breakout su Grove UART (D6/D7), MAX-M10S Qwiic su Grove I2C insieme a OLED+RTC, button D1, buzzer A3. Tutto simultaneo sul bus esistente perché MAX-M10S è I2C (0x42) e non occupa la UART
  • ⚠️ L76K invece è UART-only: il L76K shield XIAO si attacca solo al Grove UART (occupa D6/D7), quindi NON puoi metterlo insieme al modem A7670E sullo stesso Expansion Board. Per quel setup serve MAX-M10S Qwiic
  • ⚠️ Le 2 Grove I2C condividono lo stesso bus: non sono 2 bus separati, sono 2 connettori sullo stesso SDA/SCL. Utile per topologia daisy-chain ma indirizzi I2C devono restare unici
  • ⚠️ nRF54L15 e MG24 NON compatibili: footprint XIAO leggermente diverso (B2B connector + pinout modificato). Per quei chip Seeed vende variants dedicati (Grove Base, ePaper Breakout)
  • ⚠️ OLED soffre indoor estate: il GC9A01 è OLED organico, sopra +50°C va in fade. Per Visla v2 outdoor estate (oggetto in auto sotto sole) preferire ePaper o LCD reflective
  • ⚠️ microSD usa pin SPI (D6-D10) che conflittano col Grove UART: NON puoi usare microSD + Grove UART contemporaneamente sullo stesso XIAO

⚠️ Gotchas

  • I 2 Grove I2C sono lo STESSO bus, non bus indipendenti — gli indirizzi I2C devono restare unici
  • microSD + Grove UART = conflitto pin (SPI MOSI/MISO/SCK = D10/D9/D8 + CS = D2 condividono con SPI bus dei pin neri; il Grove UART usa D6/D7 in modo isolato ma microSD CS=D2 conflitta col PIN_RST del L76K shield)
  • Buzzer su A3 = D3 = GPIO4 (su XIAO S3) → conflitta col CS microSD su alcune board revisione vecchia. Verifica schematic se usi entrambi
  • 5V servo header è 5V boost, non passa USB diretto — non superare 460 mA charging current
  • Lotti pre-2025-11 hanno PMIC ETA6003 (charging termico più povero) → SY6974B nuovo è migliore
  • Pin numbering: in Arduino usa D0..D10 (macros Seeed), NON i GPIO Espressif (es. su S3 D4 = GPIO5, su C6 D4 = GPIO22)
  • Acrylic Case SKU 110010024 ($3.20) è SOLO per Expansion Board base, non per Grove Base
  • nRF54L15 Sense (nuovo lancio Seeed 2026) NON è compatibile — serve Grove Base separata

🔗 Risorse