V
Visla Hardware
Portal R&D
🧩 Moduli & Shield βœ“ Verified Β· 2026-06-06 βœ“ In stock πŸ§ͺ Tested bench ⚑ Low power nb-iot

LilyGO T-SIM7080G S3

LilyGO (chip SimCom SIM7080G)
🏭 Chip @ 1k pcs
€36.02
production BOM
ESP32-S3 + SIM7080G + AXP2101 PMUNB-IoT B20 -65 dBm benchSTEMMA QT Qwiic + Camera PIN
πŸ“‘ Indice sezioni

Curiosity

LilyGO T-SIM7080G S3 ($36.02): all-in-one battery-tracker dev board SIM7080G NB-IoT/Cat-M + ESP32-S3 (PSRAM) + AXP2101 PMIC + TF card + STEMMA QT. Form factor β€œstick” ~110Γ—30 mm. Vincitore bench Visla per Visla Tag battery-powered NB-IoT (memo project_sim7080g_lilygo_winner.md).

LilyGO T-SIM7080G S3 board photo

πŸ—ΊοΈ Pinout completo

LilyGO T-SIM7080G S3 full pinout diagram

Modem SIM7080G ↔ ESP32-S3 (pinout UFFICIALE da repo LilyGO)

FunzioneESP32-S3 GPIO
PWRKEY41
TXD (ESP32 β†’ Modem RX)5 ⭐
RXD (ESP32 ← Modem TX)4 ⭐
DTR42
RI3

⚠️ CORREZIONE 2026-06-06: precedente pinout della card (17/18 modem, 25 DTR) era SBAGLIATO β€” quelle sono pin Camera (Reset=18, VSYNC=16, HREF=17). Pinout corretto verificato da github.com/Xinyuan-LilyGO/LilyGo-T-SIM7080G/examples/ATDebug/utilities.h.

AXP2101 PMU ↔ ESP32-S3 (I2C)

FunzioneESP32-S3 GPIO
SDA15
SCL7
IRQ6

PMU rail assignments (⚠️ FIX VISLA)

RailFactory defaultFIX VislaPer
DC3 (modem main VBAT)3.0V3.0V keepRange AXP2101 = 2.7-3.4V (3.7V era invalido!)
BLDO1 (level shifter)3.3V3.3VLogic 3.3V/1.8V

⚠️ Lo sketch factory imposta DC3=3.0V β†’ modem registra solo NB-IoT B20 (segnale forte 800 MHz), NON registra Cat-M B3 (sensibilitΓ  RX ridotta). Fix bench Visla 2026-06-06: DC3=3.7V via XPowersLib. Sketch in test-moduli/lilygo-t-sim7080g-s3/.

STEMMA QT / Qwiic (JST-SH 4-pin)

PinESP32-S3 GPIO
PWR41
DTR42
RI3
RXD4
TXD5

⚠️ Attenzione: il connettore JST-SH STEMMA QT/Qwiic è UART, NON I2C standard! u-blox MAX-M10S Qwiic (I2C) NON funziona direttamente. Memo per cablaggio custom.

TF Card slot (SPI)

FunzioneESP32-S3 GPIO
CMD39
CLK38
DATA40

Camera PIN (opzionale, per OV camera)

Reset=18, XCLK=08, SIOD=02, SIOC=01, VSYNC=00, HREF=48, PCLK=12, CMYK=βˆ’1 Y2-Y9: 09/10/11/13/12/06/07/05

Switch + Button

  • Switch: 1=Reset 2=Boot 3=PWR 4=SIM-BOOT
  • Button: programmabile (GPIO 0)

πŸ”Œ Breakout headers 16-pin (verificato silkscreen 2026-06-06)

Riga inferiore del breakout sul lato destro del PCB:

DC1 β€” DC1 β€” IO1 β€” IO2 β€” TXD β€” RXD β€” IO37 β€” IO36 β€” IO35 β€” IO0 β€” IO45 β€” IO48 β€” IO47 β€” IO21 β€” GND β€” VSYS

Significato pin:

  • DC1 = PMU_DCDC1 = rail 3.3V principale (alimenta ESP32-S3 e logica)
  • IO1 = ESP32-S3 GPIO 1 (CAM_SCK / SCCB SCL)
  • IO2 = ESP32-S3 GPIO 2 (CAM_SDA / SCCB SDA)
  • TXD/RXD = UART USB-CDC alternativo
  • IO35/36/37 = ⚠️ OCCUPATI da Octal SPI / PSRAM β€” non usare
  • IO0 = boot strapping (button)
  • IO45/47/48 = GPIO LIBERI ⭐
  • IO21 = GPIO LIBERO ⭐ (unico tra IO20-25 disponibile su ESP32-S3 WROOM-1)
  • VSYS = batteria diretto (~3.7-4.2V)

⚠️ CRITICAL su ESP32-S3:

  • IO19/IO20 = USB D-/D+: se usi pinMode(19, OUTPUT) rompi il USB CDC β†’ device sparisce!
  • IO22, IO23, IO24, IO25 NON ESISTONO sul WROOM-1 (non bonded out)
  • IO32 NON ESISTE (sostituito da IO35+ per Octal SPI)

Foto silkscreen di riferimento: breakout-silkscreen.jpg

Specs tecniche

ParametroValore
ModemSIM7080G NB-IoT + Cat-M
MCU hostESP32-S3 (8MB Flash + 8MB PSRAM)
PMICAXP2101 (Solar/USB charging, BAT monitoring)
Solar inputDC 4.4V ~ 6V
LiPoesterno via MX1.25 (no holder onboard come T-A7670E)
Slot SIMNano-SIM
TF Cardsì, SPI
AntenneLTE main IPEX + GNSS IPEX
Formastick ~100Γ—25 mm
Switch4-position (Reset/Boot/PWR/SIM-BOOT)
Prezzo$36.02

πŸ§ͺ Bench-test Visla 2026-06-06

Test setup

  • USB-C ESP32-S3 connesso al Mac
  • SIM 1NCE inserita (ICCID 89882280666225121627)
  • Antenna LTE collegata su IPEX MAIN
  • Sketch passthrough USB-CDC ↔ Serial1

Identificazione

  • Manufacturer: SIMCom Ltd
  • Model: SIM7080G
  • Firmware: R1951B17 (+1 minor vs Waveshare 1951B16) πŸ†•
  • IMEI: 860016049553337

Risultati registrazione

TechRisultatoNote
NB-IoT B20 Voda ITβœ… CSQ 25 (-65 dBm) RSRP -74 dBmeccellente
Cat-M B3 1800 MHz❌ no servicefactory DC3=3.0V troppo basso
HTTP GETβœ… 200 OKegress 18.193.152.39 (AWS Frankfurt 1NCE NAT)
PDP IP100.107.94.9CGNAT 1NCE

Stesso modem, segnale +24 dB vs Waveshare HAT

Antenna LTE del LilyGO molto piΓΉ efficace del Waveshare HAT in zona Orvieto:

  • LilyGO: -65 dBm CSQ 25 ⭐
  • Waveshare: -91 dBm CSQ 14

πŸ”‹ Bench-test autonomia Visla 2026-06-08 β€” duty-cycle 30s

Setup

  • LilyGO T-SIM7080G S3 base
  • Qwiic chain: MAX-M10S GPS (0x42) + LSM6DS3 IMU (0x6A) su IO21/IO45
  • FNB58 inline tra Mac PD e LilyGO USB-C (Bluetooth β†’ localhost:5001)
  • Tool: visla-power-monitor
  • Sketch: visla-v2-dutycycle-30s.ino
  • Pattern: wake β†’ GPS poll + IMU read β†’ ESP32 deep sleep 27s β†’ ripete

Risultati 10 minuti = 20 cicli (21636 samples FNB58)

ParametroValore
Voltaggio USB-C5.130 V stabile (range 5.115–5.136)
Corrente media16.4 mA (sleep 14.0, peak burst 71.6, Οƒ=6.6)
Potenza media84.0 mW
Energia totale14.02 mWh in 600s
Samples21636 (~36 Hz)

Pattern observato

ESP32 deep sleep (27s)        β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘  14.0 mA   (sleep current)
Wake + boot + Qwiic init      β–“β–“β–“                  50-70 mA  burst
GPS poll + parse NMEA          β–“β–“                  35-45 mA
IMU read accel+gyro+temp        β–“                  35 mA
Serial log + flush + sleep      β–“                  30 mA
─────────────────────────────────────────────────────────────
ratio: ~10% del tempo a 50+ mA, ~90% a 14 mA

Confronto continuous vs duty-cycle 30s

ConfigCorrente mediaLiPo 2000 mAh autonomia
LilyGO + Qwiic continuous (no sleep)41 mA49 h (2 giorni)
LilyGO duty-cycle 30s ESP32 deep sleep16.4 mA122 h (5.1 giorni)
Risparmioβˆ’60%+2.5Γ— autonomia

Autonomia stimata (sistema completo, duty-cycle 30s)

LiPoAutonomiaIn giorni
500 mAh30.6 h1.3 giorni
1000 mAh61.2 h2.5 giorni
2000 mAh (Visla v2 standard)122.3 h5.1 giorni
5000 mAh (battery pack)305.8 h12.7 giorni

🎯 Bottleneck identificato

I 14 mA in sleep current sono dominati dal MAX-M10S in continuous tracking (chip GPS resta sempre alimentato).

  • ESP32-S3 deep sleep β‰ˆ 10 Β΅A (trascurabile) βœ…
  • AXP2101 PMU quiescent β‰ˆ 1 mA βœ…
  • MAX-M10S GPS continuous tracking β‰ˆ 12 mA ⚠️ ← qui il grosso
  • LSM6DS3 IMU β‰ˆ 0.5 mA βœ…

Tentativo PSMOO (UBX-RXM-PMREQ) β€” FALLITO 2026-06-08

Sketch visla-v2-dutycycle-30s-psmoo β€” invia UBX-RXM-PMREQ via I2C prima del deep sleep ESP32 per metter MAX-M10S in backup mode.

Risultato (10 min bench): ❌ 50.7 mA media (vs 3-5 mA attesi)

ConfigCorrente mediaNote
Continuous41 mAtutto on
Duty-cycle 30s16.4 mAESP32 sleep, GPS continuous tracking
PSMOO attempt50.7 mA ⚠️HIGHER than continuous!

Diagnosi possibili (da debug prossima sessione):

  1. UBX-RXM-PMREQ checksum errato β†’ chip ignora il comando
  2. wakeup mask 0x08 (uartrx) triggerato da qualsiasi I2C activity β†’ chip si auto-sveglia subito
  3. ESP32 non sta entrando in deep sleep (qualcosa panica/loopa)
  4. MAX-M10S su Qwiic SparkFun non supporta backup mode via I2C
  5. Active time per ciclo cresciuto (gps_poll timeout 5000ms vs 2000ms del duty-cycle base)

Next session debug:

  • Verifica serial output del sketch PSMOO (controllo ciclo deep sleep)
  • Test PMREQ con checksum online verifier (e.g. https://www.u-blox.com/en/online-tool/ubx-decoder)
  • Try UBX-CFG-VALSET con keys CFG-PM-OPERATEMODE (M10 native power management)
  • Alternativa hardware: power-gate Qwiic rail via AXP2101 (se possibile senza brick)
  • Test alternativo: ESP32 dorme 27s + accende GPS solo nei 3s attivi
  • Considerare di switchare a sketch che disabilita Qwiic via PMU rail enable/disable

⚠️ Caveat noti

  1. USB direct modem (microUSB) non enumera su Mac β€” SimCom usa driver Qualcomm proprietary, solo Windows
  2. Factory DC3=3.0V β†’ Cat-M B3 non registra. Fix β†’ flash sketch custom DC3=3.7V
  3. STEMMA QT Γ¨ UART non I2C β€” Qwiic GPS I2C non funzionerΓ  direttamente
  4. Boot mode richiede switch + BOOT button β€” vedi documentazione LilyGO
  5. VBAT modem letto via AT+CBC: deve essere β‰₯3700 mV per performance piena

🧬 Bench Visla 2026-06-09 β€” PoC end-to-end LilyGO β†’ GKE decoder

Validato in produzione: pipeline completa dal modem fisico fino al cluster GKE Visla.

Stack provato

LilyGO T-SIM7080G S3 + 1NCE SIM
       ↓ NB-IoT B20 (Vodafone Italy)
       ↓ TCP 34.154.98.175:5050
GKE decoder-lb (LoadBalancer)
       ↓
decoder-0 pod (Java + Netty + Spring)
       ↓ Gx02FrameDecoder (H02 parser)
RedisPositionAdapter
       ↓
Redis cluster

Sequenza init testata (funzionante)

  1. AXP2101 PMU init (vedi memoria pinout β€” NON skippare!):
    PMU.disableDC3(); delay(200);
    PMU.setBLDO1Voltage(3300); PMU.enableBLDO1();   // level shifter
    PMU.setDC3Voltage(3000);   PMU.enableDC3();     // modem rail 3.0V
    PMU.setBLDO2Voltage(3300); PMU.enableBLDO2();   // GPS antenna
  2. PWRKEY pulse: LOW 100ms β†’ HIGH 1000ms β†’ LOW
  3. AT handshake in <2s
  4. NB-IoT mode: AT+CFUN=1 + AT+CMNB=2 (NB-IoT only)
  5. Wait registration AT+CGREG? (~30-90s)
  6. PDP context APN iot.1nce.net: AT+CGDCONT + AT+CNCFG + AT+CNACT=0,1
  7. TCP socket: AT+CAOPEN=0,0,"TCP","34.154.98.175",5050
  8. Send H02 packet: AT+CASEND + payload *HQ,<id>,V1,<time>,A,<lat>,N,<lon>,E,...#
  9. Read ACK: AT+CARECV β†’ +CARECV: 36,*HQ,<id>,V4,V1,<srv_time>#

Risultato bench reale

TX dal modem:

*HQ,7777777777,V1,164530,A,4242.000,N,01206.000,E,000.0,000,090626,FFFFFFFF#

RX da decoder GKE:

*HQ,7777777777,V4,V1,20260609145434#   ← ACK timestampato server-side

Logs decoder GKE confirm:

Sessione creata           β€” device 7777777777
Presenza online pubblicata β€” Redis pub
Gx02FrameDecoder: V1 parsed
Posizione decodata: lat=42.7 lon=12.1 valid=true
Pubblicata su Redis (protocol="visla1")

Timing cold-start misurati

FaseDurata
AXP2101 init<500ms
Modem power-on + boot~5s
AT handshake1-2s
Network registration NB-IoT30-90s (cellulare)
PDP context activation2-5s
TCP socket open1-3s
H02 packet + ACK~200ms
Totale cold-start β†’ position published~60-100s

Insights per Visla Tag NB-IoT

  • βœ… 1NCE SIM funziona su Vodafone IT NB-IoT B20 (multi-operator EU SIM viable)
  • βœ… AXP2101 init Γ¨ MANDATORY β€” senza enableDC3() il modem rail Γ¨ OFF (lezione persa+ritrovata oggi)
  • βœ… Backend Visla agnostic protocollo β€” supporta giΓ  H02/Gx02, S21L, JT808 senza modifiche
  • βœ… Cold-start ~60-90s dominato da NB-IoT registration (rete, non device)
  • βœ… TCP raw vince su MQTT per battery: ~30 byte/msg vs 80 byte
  • ⚠️ Plain TCP non cifrato β€” security upgrade TLS roadmap necessario
  • 🎯 Sub-100s + PSM datasheet 3.2Β΅A = combinazione winner per Visla Tag

πŸ”§ Firmware tests (cliccabili)

Tutti gli sketch validati sul bench, con codice e specs. Path nel repo: test-moduli/lilygo-t-sim7080g-s3/

πŸ₯‡ firmware-test-1: GPS nativo SimCom + H02 β†’ Visla GKE Β· βœ… Done Β· 2026-06-09

Cosa fa

Sketch end-to-end completo che:

  1. Inizializza AXP2101 (DC3 3.0V modem + BLDO1 3.3V level shifter + BLDO2 3.3V GPS antenna)
  2. Accende modem SIM7080G via PWR_KEY pulse
  3. Si registra su NB-IoT (Voda IT B20 / 1NCE SIM)
  4. Attiva PDP context APN iot.1nce.net
  5. Accende GNSS interno del SIM7080G (AT+CGNSPWR=1)
  6. Apre TCP socket verso decoder GKE Visla (34.154.98.175:5050)
  7. Trasmette H02 packet ogni 30s con coords:
    • πŸ›°οΈ GPS reale quando fix disponibile (status A)
    • 🟑 Coords finte Orvieto fallback (status V)
  8. Riceve V4 ACK dal decoder
  9. Auto-reconnect se socket TCP cade

Specs bench testato

MetricaValore
Cold-start to first position~60-100s
GPS Time-to-First-Fix (outdoor)~30-60s
GPS sensitivity (datasheet)-147 dBm
Satelliti tracking (Orvieto outdoor)5-8
ConstellationGPS + GLONASS
RSSI cellulare (CSQ 13/31)~ -91 dBm
ACK latency H02 β†’ V4<200ms
Consumo medio~55 mA (no PSM ancora)
Autonomia stimata (1000 mAh)~18 ore (cap. ridotta senza sleep)

Esempio packet H02 catturato

πŸ›°οΈ *HQ,7777777777,V1,163232,A,4243.0469,N,01206.4717,E,000.0,0,090626,FFFFFFFF#
   sats=5 alt=326m speed=0.0km/h

ACK ricevuto:

*HQ,7777777777,V4,V1,20260609162345#

Pinout usato

#define I2C_SDA       15    // AXP2101 PMU
#define I2C_SCL       7     // AXP2101 PMU
#define MODEM_PWRKEY  41    // Modem power button
#define MODEM_DTR     42    // Modem DTR
#define MODEM_RX      4     // ESP32 RX ← modem TX
#define MODEM_TX      5     // ESP32 TX β†’ modem RX

Pro

  • βœ… Integrato (1 chip cellular+GPS = BOM ridotta)
  • βœ… AT command set ben documentato
  • βœ… Tempo dev veloce
  • βœ… Antenna GPS condivisibile (uFL/SMA)

Contro

  • ❌ Solo GPS+GLONASS (no Galileo, no BeiDou)
  • ❌ SensibilitΓ  -147 dBm (vs u-blox MAX-M10S -167 dBm)
  • ❌ Indoor difficile
  • ❌ Update rate fisso 1Hz
  • ❌ GPS legato al modem (off insieme)
  • ❌ A-GPS comando ritorna ERROR su revision corrente

Codice completo

πŸ”— firmware-test-1-gps-simcom-only.ino su GitHub (~370 righe)

πŸ“– README dettagliato

Flash command

# Compile
arduino-cli compile \
  --fqbn "esp32:esp32:esp32s3:USBMode=hwcdc,CDCOnBoot=cdc,PSRAM=opi,FlashSize=16M,PartitionScheme=app3M_fat9M_16MB" \
  firmware-test-1-gps-simcom-only.ino

# Upload
arduino-cli upload \
  --fqbn "esp32:esp32:esp32s3:USBMode=hwcdc,CDCOnBoot=cdc,PSRAM=opi,FlashSize=16M,PartitionScheme=app3M_fat9M_16MB" \
  -p /dev/cu.usbmodem101 \
  firmware-test-1-gps-simcom-only.ino
πŸ₯ˆ firmware-test-2: WiFi AP + web dashboard debug Β· βœ… Done Β· 2026-06-10

Cosa fa (vs test-1)

Identico al test-1 + aggiunge WiFi Access Point + dashboard web per debug live senza USB.

Procedura test (smartphone)

  1. Connetti smartphone al WiFi visla-lilygo (password visla1234)
  2. Apri browser β†’ http://192.168.4.1
  3. Vedi dashboard live auto-refresh ogni 1.5s

Dashboard mostra

  • πŸ“ž Modem: status, RSSI con colore, IMEI, operator, PDP, IP
  • πŸ›°οΈ GPS: fix status, sats counter, lat/lon, alt, speed, link Google Maps
  • 🌐 TCP: socket status, packets sent, ACK received, success rate, last packet, last ACK, countdown next send
  • πŸ–₯️ Sistema: uptime, free RAM, device ID
  • ⚠️ Errori: box rosso quando qualcosa va male

Use cases

ScenarioVantaggio
Test antenna GPS outdoorSats salgono live, fix β†’ mappa cliccabile
Debug RSSI cellularSpostati, RSSI cambia in tempo reale
Field troubleshootingCliente: screenshot dashboard, mandami
Verify decoder ACKSent count == ACK count?

Specs

Aspettotest-1test-2
Flash size368 KB988 KB (+620 KB WiFi)
RAM24 KB48 KB
Consumo extra-~80 mA WiFi AP

Codice

πŸ”— firmware-test-2-wifi-debug.ino su GitHub

πŸ“– README dettagliato

Endpoints HTTP

PathReturns
/HTML dashboard auto-refresh
/statusJSON full state (per scripting)

Feature extra (bench 2026-06-10)

  • πŸ“‘ Tech display LTE-M vs NB-IoT live (AT+CPSI?) + banda
  • πŸ”‹ Batteria LiPo % + V + charging (AXP2101 ADC)
  • πŸš€ OTA flash via WiFi (ArduinoOTA, no USB) β€” validato anche a -96 dBm
  • πŸ›°οΈ GPS timestamp reale dai satelliti

πŸ§ͺ Finding sul campo (importanti per Visla)

FindingDettaglio
πŸ”΄ LTE-M assente a OrvietoCMNB=1 β†’ No service indoor+outdoor. Voda IT = solo NB-IoT B20
πŸ”΄ NB-IoT TCP socket fantasmaNAT operatore droppa idle in 10-30s; CASTATE inaffidabile β†’ app offline. Soluzione: UDP
🟑 Web server bloccanteAT lunghe freezano dashboard/OTA β†’ serve refactor non-bloccante
βœ… GPS outdoor14 sat, fix solido
βœ… OTA WiFiAffidabile, flash da remoto
πŸ”œ firmware-test-3: GPS u-blox MAX-M10S via Qwiic + H02 Β· TODO

Obiettivo

Stessa pipeline di test-1 ma usando u-blox MAX-M10S esterno via Qwiic I2C invece del GNSS interno SIM7080G. Confronto diretto sensibilitΓ  + TTFF + constellation.

Setup hardware previsto

  • u-blox MAX-M10S Qwiic breakout (SparkFun)
  • Cavo Qwiic β†’ Dupont per attaccare ai pin neri LilyGO
  • I2C address default 0x42
  • Library Arduino: SparkFun_u-blox_GNSS_Arduino_Library v3

Cosa misureremo vs test-1

MetricaSIM7080G internou-blox MAX-M10S
TTFF cold start30-60s~30s atteso
Sensibility-147 dBm-167 dBm (20 dB meglio)
ConstellationGPS + GLONASSGPS+GLONASS+Galileo+BeiDou
Sats visible (Orvieto)5-812-20 atteso
Update rate1 Hz fissofino a 25 Hz
Consumodipende dal modem~25 mA active, ~22Β΅A backup

Pro u-blox attesi

  • βœ… Multi-constellation = +60% sat = fix piΓΉ stabile in urban canyon
  • βœ… Sensibility +20 dB = funziona indoor near-window
  • βœ… Update rate programmabile
  • βœ… Independent dal modem (puΓ² rimanere acceso in PSM)

Contro u-blox attesi

  • ❌ +€8 al BOM (vs €0 del integrato)
  • ❌ Antenna GPS extra serve (uFL su MAX-M10S)
  • ❌ Pin I2C dedicati (Qwiic occupato)
  • ❌ Library extra (1KB flash + 256 byte RAM)
πŸ’­ firmware-test-3: Hybrid GPS (SIM7080G + u-blox in parallelo) Β· Idea

A/B test live: entrambi i GPS attivi, packet H02 con coordinate del GPS con piΓΉ satelliti in quel momento, log diff in serial per analisi.

Use case: scoprire condizioni reali dove uno batte l’altro (indoor near-window, urban canyon, tunnel, cielo libero).

πŸ’­ firmware-test-4: PSM (Power Saving Mode) battery test Β· Idea

Aggiungi AT+CPSMS=1 + AT+CGEREP=2,1 per deep sleep modem 5-15 min tra send.

Target: passare da 18 ore β†’ 6 mesi+ autonomia (datasheet SIM7080G PSM = 3.2 Β΅A).

Misura realmente con FNB58 inline.

πŸ’­ firmware-test-5: TLS port 5051 con cert client Β· Idea

Migrazione da TCP plain (port 5050) a TLS cifrato (port 5051) usando AT commands AT+CSSLCFG.

Pre-requisito: cert client distinct per device generato dal backend Visla. Server-side: terminator TLS sul decoder-lb.

Security upgrade obbligatorio per production.

πŸ”— Risorse