V
Visla Hardware
Portal R&D
🛠️ R&D Visla — bench firmware · mag–giu 2026

LilyGO T-A7670 — Firmware bench

ESP32 classic + SimCom A7670 (LTE Cat-1) · 13 sketch · dev bench Visla v2, tracker, consumi
📂 Folder GitHub →
✅ Bench validato 🧩 13 firmware 📅 23 mag – 14 giu 2026 🧾 ~4190 righe

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.

T-A7670G R2
Dev bench (SKU Q425, ordine LILYGO-78568). GPS combo integrato + T-SimHat (QMI8658 + 2× INA219). Scripts visla_v2_*.
T-A7670E
Firmware gemelli del 7070G. GPS u-blox DAN-F10N dedicato via UART, IMU LSM6DS3. MQTTS nativo modem.
🔧 Board & pinout
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).

🔧
Bring-up
Scan I2C, debug IMU, dashboard dev
🧠
Comportamento
Wake-on-motion, smart power, state machine
🔌
Connettività
Cat-1 TCP H02 (raw AT → TinyGSM)
📍
Tracker
Tracker completi (H02/TCP + MQTTS nativo)
🔋
Consumi
Floor / always-on per confronto vs 7070

I firmware

In ordine cronologico di sviluppo al banco. Badge board: G-R2 = T-A7670G R2 dev bench · E = T-A7670E gemelli.

Bring-up T-A7670G R2

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.

I2C scanQMI8658INA219
23 mag 2026
57 righe
GitHub →
Bring-up T-A7670G R2

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.

INT1=IO39QMI8658diagnostico
23 mag 2026
91 righe
GitHub →
Comportamento T-A7670G R2

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.

light-sleepmotion polling
23 mag 2026
118 righe
GitHub →
Comportamento T-A7670G R2

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.

ext0 wakeINT1→GPIO39deep-sleep
23 mag 2026
239 righe
GitHub →
Comportamento T-A7670G R2

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.

state machineVP+HTBTprotocollo visla1
23 mag 2026
458 righe
GitHub →
Bring-up T-A7670G R2

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.

dashboardWiFi dev
24 mag 2026
251 righe
GitHub →
Comportamento T-A7670G R2

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).

dual-coreOTAdashboard
24 mag 2026
605 righe
GitHub →
Connettività T-A7670G R2

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 TCPAT rawNETOPEN ERROR
10 giu 2026
444 righe
GitHub →
Connettività T-A7670G R2

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.

TinyGSMSIM7600 classTCP stabile
10 giu 2026
332 righe
GitHub →
Tracker T-A7670E

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.

H02/TCPDAN-F10NIMU vibrazioneOTA
13 giu 2026
558 righe
GitHub →
Tracker T-A7670E

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.

AT+CMQTT*MQTTS 8883TLS nativo
14 giu 2026
447 righe
GitHub →
Consumi T-A7670E

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).

always-onbenchmark Cat-1
14 giu 2026
471 righe
GitHub →
Consumi T-A7670E

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.

deep-sleepfloor µABOARD_POWERON
14 giu 2026
119 righe
GitHub →

📌 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.