Vehicle Tracking β XIAO + DAN-F10N + SIM7080G
Stesso concept del banco A7670E (GPS DAN-F10N, batch store-and-forward, MQTTS β mqtt.vislagps.com), ma con modem SIM7080G LTE-M. Il porting ha richiesto di ripensare due layer: il MQTT (i comandi nativi SM* del SIM7080 non funzionano β TinyGSM+PubSubClient) e la lettura GPS (config UBX inaffidabile sul F10 β parsing NMEA di default). Verificato end-to-end il 13 lug 2026: device 860016049515153 β fix Orvieto β backend.
MQTT: TinyGSM, non SM*
Il comando nativo AT+SMCONN dΓ sempre +CME ERROR: operation not allowed (fw 1951B16), anche con tutto OK. Soluzione: TinyGsmClientSecure + PubSubClient (socket TLS del modem).
GPS: NMEA, non UBX
Il F10 NAK-a diverse chiavi UBX-CFG β config inaffidabile. Molto piΓΉ robusto parsare l'NMEA di default ($GNGGA+$GNRMC): serve solo D0βGPS TX, zero config, niente D10.
GPS dal 5V, non 3V3
Il DAN dual-band tira ~30-40mA β il 3V3 della XIAO va in brownout (GPS muto). Alimentarlo dal 5V (VBUS/powerbank) all'ingresso 5V del breakout (regolatore onboard).
π Pin map
| Segnale | Pin XIAO | Note |
|---|---|---|
| GPS DAN-F10N TX | D0 | RX UARTE1 Β· GPS @38400 Β· NMEA β l'unico filo indispensabile |
| GPS DAN-F10N RX | D10 | TX UARTE1 Β· non necessario (nessuna config UBX) |
| GPS VCC | 5V (VBUS) | ingresso 5V del breakout (reg. onboard β 3.3V). NON dal 3V3 XIAO (brownout) |
| Modem SIM7080 TX | D7 | RX Serial1 (UARTE0) Β· modem @115200 |
| Modem SIM7080 RX | D6 | TX Serial1 |
| Modem VBAT | alim. dedicata | 3.4β4.2V Β· picchi TX ~2A Β· GND comune |
| OLED SSD1306 | D5=SCL D4=SDA | β οΈ SW I2C (bit-bang) β non HW, sennΓ² collide con UARTE1/GPS |
| Bottone | D1 | toggle OLED Β· INPUT_PULLUP |
| Buzzer | A3 | passivo |
β οΈ GND unico per tutto (XIAO + modem + GPS). Alimentazione portatile pulita: powerbank USB nella porta USB β 5V solidi (una LiPo nuda su ingresso "5V" va in undervoltage).
π Cosa cambia rispetto al banco A7670E
| Layer | A7670E (Cat-1) | SIM7080G (questo) |
|---|---|---|
| Rete | LTE Cat-1 (auto) | Cat-M Β· CMNB=1 CNMP=38 |
| MQTT | AT raw nativo CMQTT* | TinyGSM + PubSubClient (socket TLS) |
| CA cert | CCERTDOWN | gestita da TinyGSM (no upload) |
| GPS | UBX NAV-PVT (config via D10) | NMEA default (solo D0) |
| Alim. GPS | 3V3 XIAO (~10mA single-band) | 5V VBUS (dual-band ~30-40mA) |
β¨οΈ Firmware
Arduino β core Seeed nRF52 (Seeeduino:nrf52:xiaonRF52840). Dipendenze: TinyGSM, PubSubClient, U8g2, Adafruit TinyUSB. Upload UF2 (doppio-click RESET). β οΈ il core chiama python (non python3) β serve uno shim.
π°οΈ mqtt-tracker-sim7080 v0
GitHub βTracker MQTTS via TinyGSM+PubSubClient: TinyGsmClientSecure apre il socket TLS del modem, PubSubClient fa MQTT su mqtt.vislagps.com:8883. Username = IMEI, LWT offline retained, keepalive 60s. Batch store-and-forward: campiona il GPS ogni 1s in un ring buffer (600 punti) e pubblica visla/<IMEI>/pos in batch (fino a 12 pt) ogni 5s β {imei,battery,volt,rssi,batch:[{t,lat,lon,spd,sats,hdop,hacc}β¦]}. Nei buchi di copertura accumula e svuota il backlog coi timestamp reali. GPS letto in NMEA ($GNGGA+$GNRMC) β nessuna config UBX. Verificato end-to-end (13 lug 2026): fix Orvieto 12 sat β broker TLS β mqtt-bridge (batch 4-5 pt/5s).
Modem SIM7080 verificato: CEREG: 0,5 (registrato roaming Cat-M 1NCE), PDP attivo (IP 100.107.94.8). L'IMEI 860016049515153 Γ¨ registrato nel broker mosquitto (registrazione device).
π¬ Findings banco β bring-up end-to-end (13 lug 2026)
Sessione lunga: dal firmware clonato dall'A7670 fino alle posizioni nel backend. Ogni anello ha rivelato una lezione.
SMCONN nativo = vicolo cieco β porting iniziale con i comandi MQTT nativi del SIM7080 (SMCONF/SMSSL/SMCONN/SMPUB): SMCONN torna sempre +CME ERROR: operation not allowed, anche con registrazione, PDP/IP, CA convertita (CFS + CSSLCFG "convert"), clock sincronizzato via NTP e tutte le SMCONF OK. Escluse tutte le piste (porta quotata, LWT, clock, auth). Γ un limite della fw 1951B16SIM7080. Fix: pivot su TinyGsmClientSecure + PubSubClient (come il collaudato 7070) β TLS handshake OK al primo colpo.
state=5 = auth broker, non firmware β con TinyGSM il TLS arriva al broker ma PubSubClient dΓ state=5 (CONNACK "not authorized"): l'IMEI del SIM7080 non era nel password file di mosquitto. Fix backend: mosquitto_passwd nel container β update ConfigMap β attesa sync mount (~30s) β kill -HUP 1. L'ACL visla/%u/* Γ¨ giΓ generica. Broker: New client connected β
.
gpsRx=... ubx=0 nmea=470 l'ha svelato: il modulo streamma NMEA pieno (aggancia davvero, LED PPS lampeggia), ma il firmware parsava solo UBX NAV-PVT β che non arrivava perchΓ© la config UBX (via D10βGPS RX) veniva NAK-ata dal F10. Fix: convertito il parser a NMEA (GGA+RMC) β sats=12 fix=YES immediato, niente D10.
β οΈ Gotcha da ricordare: sul SIM7080 usa TinyGSM+PubSubClient (mai SM* nativo); leggi il DAN-F10N in NMEA (config UBX inaffidabile sul F10); alimenta il GPS dal 5V, non dal 3V3 dell'MCU.
πΊοΈ Prossimi passi
- Field test su strada: durata batteria always-on (LTE-M ~10-25mA) + qualitΓ traccia dual-band su percorso reale.
- Smart power (v1): wake-on-motion + PSM/eDRX del SIM7080 (dove il Tag NB-IoT eccelle) β misurare i 3 stati (sleep/idle/tracking).
- Confronto Cat-M vs Cat-1: questo banco (SIM7080 LTE-M) vs il gemello A7670E a paritΓ di GPS/firmware.