Curiosity
Shield GNSS plug-and-play per XIAO (SKU 109100021, $9.90) basato sul chip Quectel L76K (AT6558R cinese). Si innesta direttamente sui pin header del XIAO occupando la HW UART1 (D6/D7 a 9600 baud) — quindi non si stacka sopra l’Expansion Board o la Grove Base: è un carrier alternativo. Antenna attiva U.FL 10cm inclusa, copre 1559–1606 MHz (GPS L1 + GLONASS L1 + BeiDou B1). LED 1PPS verde come indicatore visivo del fix. Pin RST su D2 (rev 2024-12-06: prima era D10). Per Visla è il path GNSS più economico con XIAO, ma conflitto UART con modem cellulare sul Expansion Board: per setup combinato modem + GPS preferire SparkFun MAX-M10S Qwiic (I2C, non occupa UART).
Specs tecniche
| Parametro | Valore |
|---|---|
| Seeed SKU | 109100021 |
| Prezzo | $9.90 |
| Chip GNSS | Quectel L76K (AT6558R ICOFCHIPS) |
| Costellazioni | GPS L1 + GLONASS L1 + BeiDou B1I (1561 MHz) + QZSS |
| Galileo / SBAS | ❌ NON supportati |
| Canali | 32 tracking / 72 acquisition |
| Sensitivity tracking | -162 dBm |
| Sensitivity acquisition | -148 dBm |
| Accuracy | 2.0 m CEP (autonomous) |
| TTFF cold start (datasheet) | 30s autonomous, 5.5s con AGNSS |
| TTFF cold start (bench Visla 2026-06-04) | ~120 s indoor near-window, no AGPS |
| TTFF hot start | 2 s (con backup RTC alimentato) |
| Update rate max | 5 Hz (configurabile via $PCAS02) |
| Default baud | 9600 bps (configurabile fino a 115200 via $PCAS01) |
| Interface | UART solo (NO I2C/SPI) |
| Pin UART | TX modulo → D7 (RX XIAO) · RX modulo ← D6 (TX XIAO) |
| Pin RST | D2 (active LOW, rev 2024-12-06 — prima era D10) |
| Pin 1PPS | NON esposto sul breakout (interno al modulo) |
| LED 1PPS | Verde onboard (visual fix indicator) — rimosso dal 2025-03-31 |
| Voltage | 2.7V - 3.4V (alimentato dal 3V3 del XIAO) |
| Corrente con antenna attiva | 41 mA acquisition + tracking · 360 µA standby |
| Antenna inclusa | Active U.FL, 1559-1606 MHz, cavo RF1.13 10 cm |
| Antenna detection | Short circuit + open circuit (diagnostic via $GPTXT) |
| Talker IDs emessi (bench-verified) | $GN multi-system (GGA/GLL/GSA/RMC/VTG/ZDA) · $GP (GSV per GPS, TXT) · $BD (GSV per BeiDou) · $GL (GSV per GLONASS, se attiva) |
| NMEA sentences default | $GNGGA · $GNGLL · $GNGSA (1 per costellazione) · $GNRMC · $GNVTG · $GNZDA · $GPGSV · $BDGSV · $GPTXT |
| Protocollo custom | PCAS sentences (NMEA-extended, NON Quectel PMTK) |
| Compatibilità XIAO | Tutti i XIAO con HW UART1 esposta su D6/D7: ESP32-S3/C3/C5/C6 ✅ · nRF52840 ✅ · RP2040/2350 ✅ · SAMD21 ✅ |
| Dimensioni | 18 × 21 mm |
| Package include | Modulo L76K + antenna attiva U.FL + 2× 7-pin female header + cavo coax RF1.13 10cm |
| HSCODE | 8529909090 (CN) · 8526910020 (US) · 8471707000 (EU) |
| HW revisions | 2024-12-06 RST migrato D10→D2 · 2025-03-31 rimosso LED fix indicator |
🧪 Note dal bench Visla
- ✅ Bench-tested 2026-06-04 — first bring-up Visla R&D + JSON logger: setup XIAO ESP32-S3 Pre-Soldered (SKU 113991114) + L76K shield rev 2024-12-06 innestato direttamente sui pin del XIAO. Sketch
test-moduli/xiao-l76k-gps/test-l76k-json/con TinyGPSPlus 1.0.3 + 17 TinyGPSCustom fields → JSON line ogni 2s con 35 campi (fix, DOPs, sat per costellazione, per-sat PRN/elev/azim/SNR, mag var, antenna status). Build via arduino-cli ESP32 core 3.3.8, FQBNesp32:esp32:XIAO_ESP32S3 - ✅ Talker IDs $GN multi-system verificati al bench (gotcha critica documentata): il L76K emette i frame standard con talker
$GN(NON$GP). Per TinyGPSCustom registrare“GNGGA”/“GNGSA”/“GNRMC”/“GNVTG”. Solo i GSV restano per-costellazione:$GPGSV,$BDGSV,$GLGSV - ✅ TTFF reale 2026-06-04: cold-start indoor near-window senza AGPS → fix 3D in ~120s. SNR per-satellite 21–35 dB-Hz, DOP a fix PDOP 2.8 / HDOP 2.00 / VDOP 1.8. Drift orizzontale stazionario ~1–2 m fix-su-fix (coerente con 2m CEP datasheet)
- ✅ Antenna OK diagnostic via $GPTXT: il L76K emette al boot
$GPTXT,01,01,01,ANTENNA OK*35— utile per safety check programmatico - ✅ Reset D2 active-LOW funziona: pulse 20ms su D2 → modulo riparte pulito, utile per cold-start forzato
- ⚠️ UART-only = conflitto modem cellulare: occupa la HW UART1 del XIAO (D6/D7) — se vuoi anche un modem A7670E in parallelo sullo stesso Expansion Board, devi: A) remappare UART2 su pin neri via Dupont, oppure B) usare MAX-M10S Qwiic invece del L76K
- ⚠️ Non stackable: il shield occupa i pin header del XIAO direttamente — non si combina con Expansion Board / Grove Base (sono alternativi, non stackabili)
- ⚠️ Sensibilità antenna inclusa è OK ma non ottima: per fix indoor SENZA vista cielo (dentro stanza chiusa) il TTFF schizza oltre 5 min. Per Visla v2 production: scegli antenna patch SMA esterna o spazzata GPS+Galileo (qui non vista, no Galileo)
- ⚠️ Hot start funziona SOLO se V_BCKP è alimentato: senza backup battery sul pin VBAT del modulo, ogni reboot = cold start ex-novo (no almanacco salvato)
- ⚠️ HW revision check: dal 2024-12-06 il pin RST è migrato da D10 a D2 — verifica schematic prima di scrivere driver (codice vecchio Waveshare/Seeed cita ancora D10)
- ⚠️ NO Galileo: in EU perdi ~28 satelliti Galileo + correzioni EGNOS SBAS. Per accuracy migliore, salire a MAX-M10S/SAM-M10Q
⚠️ Gotchas
- TX modulo va su RX XIAO (D7) e RX modulo va su TX XIAO (D6) — facile confondersi
- Pin RST default OUTPUT HIGH; se lasci floating il modulo può restare in reset
- L76K emette
$GN*talker, non$GP*— parser custom va aggiornati - LED 1PPS rimosso dalla rev 2025-03-31 → no visual fix indicator su lotti recenti
- Antenna U.FL deve fare “clic” netto, altrimenti SNR crolla
- A 9600 baud, output ~360 byte/s = ~5 frame NMEA/s a 1 Hz update default
- Coordinate NMEA in formato DDMM.MMMM (non DD.DDDDDD) → parser deve convertire (TinyGPS lo fa già)
📊 Consumi — 3 fonti triangolate (verificate)
Il L76K ha numeri “ufficiali” diversi a seconda di chi include l’antenna attiva:
| Fonte | Tracking | Acquisizione | Backup / Standby |
|---|---|---|---|
| 🧪 Visla bench (misurato, modulo) | 16.8 mA | — | — |
| RAK12501 datasheet (modulo L76K) | 18 mA | 25 mA | 7 µA (backup RTC) |
| Seeed datasheet (modulo + antenna attiva) | 41 mA | 41 mA | 360 µA (standby RF-off) |
| Quectel Hardware Design (chip) | qualitativo “High/Low” | — | — |
✅ Il modulo L76K consuma ~17-18 mA in tracking — la nostra misura (16.8 mA) è confermata dal datasheet RAK12501 (18 mA). Il 41 mA di Seeed include l’antenna attiva (il cui LNA aggiunge ~23 mA): NON è il doppio, è la stessa cosa contata con/senza antenna attiva. ⚠️ Due modi low-power distinti: Standby (RF off, core attivo) 360 µA · Backup (solo RTC) 7-8 µA. Dettaglio test →