LilyGO T-A7670 — Firmware bench
Cos'è
Suite di firmware sviluppata al banco sul modem SimCom A7670 (LTE Cat-1), su due dev board LilyGO della stessa famiglia (ESP32 classic). È il dev bench storico di Visla v2: da fine maggio nascono qui wake-on-motion, smart-power state machine e la prima dashboard; a giugno arrivano i tracker completi (TCP H02 e MQTTS nativo) e la profilazione consumi.
I firmware gemelli (bench-tracker, mqtt-tracker, floor, aggressive) ricalcano 1:1 quelli del T-SIM7070G per il confronto diretto Cat-1 vs Cat-M su consumi e copertura.
visla_v2_*.- MCU
- ESP32-WROVER-E (classic)
- Modem
- A7670E / A7670G
- Modem UART
- TX=26 RX=27
- PWRKEY / DTR
- 4 / 25
- RESET / POWERON
- 5 / 12
- GPS DAN-F10N
- RX=34 TX=32 @38400
- I2C (IMU)
- SDA=21 SCL=22
- IMU INT1
- IO39 (QMI8658)
⚠️ BOARD_POWERON (IO12) HIGH dev'essere la primissima riga di setup(), o il board non parte a batteria. UART modem invertita vs 7070 (TX=26 RX=27).
I firmware
In ordine cronologico di sviluppo al banco. Badge board: G-R2 = T-A7670G R2 dev bench · E = T-A7670E gemelli.
IMU I2C scan
scripts/imu_scan_test.ino Primo sketch al banco: scan I2C per identificare i sensori del T-SimHat stackato (QMI8658 @ 0x6B, INA219 @ 0x40). Verifica che lo stack hat sia montato e visto correttamente.
Wake-on-motion debug
scripts/visla_wom_debug.ino Diagnostico: monitora in real-time il pin INT1 (IO39) e l'accelerazione del QMI8658, senza deep-sleep. Serve a verificare che l'IMU alzi davvero INT1 quando scuoti, prima di costruirci sopra il wake-on-motion.
Motion poll (light-sleep)
scripts/visla_motion_poll.ino Rilevamento movimento via polling del flag STATUS del QMI8658: l'ESP32 fa light-sleep 500ms, si sveglia, legge il flag via I2C e conta gli eventi di movimento. Variante "polling" del risparmio energetico.
Wake-on-motion + deep-sleep
scripts/visla_wake_motion.ino Wake-on-motion vero: QMI8658 INT1 → GPIO39 (RTC) sveglia l'ESP32 dal deep-sleep solo al movimento. Da fermo l'MCU resta giù. Legge anche la corrente batteria dall'INA219. È il pattern di risparmio che poi passa su 7070/Visla v2.
Smart power state machine
scripts/visla_v2_full.ino Macchina a stati "prodotto" Visla v2: SLEEP_MODE (deep-sleep, modem off) ↔ ONLINE_MODE (modem su, VP posizione ogni 10s + HTBT batteria ogni 30s). Transizioni: movimento → online, 5 min di quiete → sleep.
Dev dashboard WiFi
scripts/visla_dashboard.ino Dashboard HTTP via WiFi per vedere lo stato del device da browser sulla stessa LAN durante lo sviluppo. DEV-only (WiFi sempre on, ~150mA): comodo per ispezionare sensori e stato senza seriale.
Hybrid (modem + GPS + dashboard)
scripts/visla_v2_hybrid.ino Banco completo dual-core: Core 1 = modem + GPS + state machine, Core 0 (FreeRTOS) = WiFi + WebServer dashboard read-only + OTA. Niente deep-sleep (~150mA): serve a testare modem e dashboard insieme. Supporta update OTA (visla-v2.local).
Cat-1 TCP H02 (raw AT)
firmware-test-1-cat1-tcp Primo test connettività Cat-1: TCP H02 verso il decoder Visla via comandi AT raw (NETOPEN/CIPOPEN/CIPSEND), + dashboard WiFi + OTA. Obiettivo: dimostrare che Cat-1 dà TCP STABILE (no socket fantasma come NB-IoT). Esito: registrazione LTE OK ma AT+NETOPEN ritorna ERROR → la sequenza AT manuale è fragile, si passa a TinyGSM.
Cat-1 TCP H02 (TinyGSM)
firmware-test-2-tinygsm Risolve il NETOPEN ERROR del test-1 usando TinyGSM (modem.gprsConnect) che gestisce la sequenza dati completa (CGDCONT→CGATT→CGACT→NETOPEN→CIPOPEN) nell'ordine giusto. A7670 = stesso command set TCPIP del SIM7600 → si usa la classe SIM7600. + WiFi dashboard + OTA.
Bench Tracker v2 (H02/TCP)
firmware-bench-tracker-v2-a7670 Gemello Cat-1 del bench-tracker-v2 del 7070G, per il confronto hardware diretto: modem A7670E (classe SIM7600), GPS u-blox DAN-F10N via UART (NMEA 38400, TinyGPS++) invece del SAM-M10Q I2C, IMU LSM6DS3. Allarme vibrazione H02 → pipeline notifiche Visla, arming, reporting adattivo, NVS, dashboard, OTA.
Tracker MQTTS nativo modem
firmware-mqtt-tracker-a7670 Gemello MQTT del 7070, ma sul A7670 il TLS si fa con lo stack MQTT INTEGRATO nel modem (AT+CMQTT*) — l'unico path affidabile (TinyGsmClientSecure litiga con NETOPEN/CCH). GPS DAN-F10N (modello PEDESTRIAN via UBX), IMU vibrazione, MQTTS 8883 verso il broker Visla, publish visla/<IMEI>/pos + status retain.
Aggressivo (MQTTS always-on)
firmware-aggressive-a7670 Variante always-on del tracker MQTTS nativo: modem sempre connesso, movimento continuo simulato, niente sleep. Misura il consumo always-on del A7670E (Cat-1) per il confronto diretto col gemello 7070G (Cat-M).
Floor consumi a riposo
firmware-floor-a7670 Floor di deep-sleep per il confronto consumi vs SIM7070G: modem A7670 OFF (poweroff + taglio rail via POWERON LOW), GPS DAN-F10N in backup UBX, IMU LSM6DS3 in low-power sentinella (~9µA), ESP32 deep-sleep. BOARD_POWERON (IO12) HIGH come primissima riga.
📌 Note di banco
- BOARD_POWERON (IO12) HIGH come primissima riga di setup(): senza, il T-A7670 non parte a batteria (load-switch del rail modem).
- TCP raw AT (NETOPEN/CIPOPEN) è fragile → usare TinyGSM classe SIM7600 (stesso command set TCPIP).
- Per il TLS-MQTT sull'A76xx usare lo stack AT+CMQTT* nativo del modem + CA Let's Encrypt: TinyGsmClientSecure litiga con NETOPEN/CCH.
- GPS dedicato u-blox DAN-F10N (UART), non il GNSS combo del modem: niente degrado durante il TX LTE.
- Misure consumi col FNB58: staccare la batteria, altrimenti consumo + carica gonfiano i numeri.