"Radio failed, code -2"
È l'errore più comune e ha un significato preciso: il modulo
LoRa non risponde sul bus SPI. TinyGS scrive un comando, aspetta una risposta,
non arriva niente → code -2.
Cause in ordine di probabilità:
- Cablaggio incompleto/sbagliato. Nella mia esperienza il pin
SCK era staccato (un dupont allentato): senza clock SPI il modulo non legge
nulla, risultato code -2. Verifica con tester la continuità di ogni filo
- Alimentazione che cede. Il Ra-01 tira picchi di 100+ mA.
Se il rail 3.3V dell'ESP32 cala sotto 3.0V durante l'init, il modulo non
si avvia. Sintomo subdolo: l'ESP32 boota, il WiFi va, il MQTT si collega,
ma il modulo no. Rimedio: condensatore 100µF + 100nF in
parallelo su VCC del modulo, oppure alimentatore esterno 3.3V dedicato con
GND comune
- Board type sbagliata nella Web Panel. Se nel pannello hai
selezionato es. "TTGO LoRa v1" ma hai cablato secondo "Heltec V2", alcuni
pin SPI coincidono e altri no — TinyGS tenta SPI sul pin sbagliato e non
risponde nessuno
- MISO e MOSI scambiati. Statisticamente è l'errore di
cablaggio più comune. Sigle simili, è facile sbagliarsi. Mio sketch di
test (vedi sotto) lo rileva subito
- Modulo difettoso o non SX1278. Esistono cloni cinesi venduti
come "Ra-01" che in realtà sono SX1262 (diverso protocollo SPI). Verifica
la sigla sul chip nero al centro del modulo
Boot loop continuo
L'ESP32 si riavvia ogni 2-3 secondi, magari con messaggi tipo
Brownout detector was triggered.
È un problema di alimentazione insufficiente: il Ra-01 tira
troppa corrente per il rail 3.3V e l'ESP32 protegge.
- Scollega temporaneamente il VCC del modulo: se l'ESP32 boota normale, è
confermato
- Aggiungi i condensatori di bypass al modulo
- Usa un cavo USB di qualità (alcuni cavi telefonici hanno fili da 28 AWG che
cadono di 0,5 V sotto carico)
- Usa una porta USB potente (USB 3 del PC, o alimentatore 5V/2A)
- Soluzione definitiva: alimentatore 3.3V esterno per il solo modulo, con GND
comune con l'ESP32
L'AP "My TinyGS" non appare
Cerchi la rete My TinyGS dal telefono e non c'è.
Cause:
skipApStartup() attivo nel codice. Il firmware
originale di TinyGS aspetta che fallisca la connessione WiFi salvata prima
di attivare l'AP. Se hai appena flashato con flash cancellata, aspetta
30-60 secondi
- L'ESP32 ricorda una vecchia config WiFi. Il "pio run -t erase"
cancella tutto, ma se hai usato altri metodi di flash potrebbe restare la
NVS. Soluzione:
pio run -e ESP32 -t erase seguito da nuovo
upload
- Il nome AP è cambiato. Se nel portale hai impostato un
"Station name" personalizzato, l'AP prende quel nome al posto di "My TinyGS"
- Banda del telefono: alcuni telefoni di vecchia generazione
nascondono le reti aperte (senza password). Prova "Aggiungi rete manualmente"
digitando
My TinyGS
Alternativa che funziona sempre: configurazione via Improv-Serial
dal browser improv-wifi.com
(richiede Chrome o Edge per la Web Serial API). Bypassa completamente l'AP.
ESP32-C3: cose da sapere
Se usi un ESP32-C3 mini invece di un ESP32 classico:
- Serial sull'USB nativa: per vedere
Serial.print()
devi compilare con -DARDUINO_USB_CDC_ON_BOOT=1 nel platformio.ini,
altrimenti i log vanno sull'UART0 hardware che non è collegata
- Reset del chip dal Python pyserial: la sequenza standard
(
dtr=True; rts=False) mette l'ESP32-C3 in DOWNLOAD MODE, non in
boot da flash. Per resettare per boot normale usa
s.dtr=False; s.rts=True; sleep; s.dtr=False; s.rts=False
- Radio WiFi più debole dell'ESP32 classico. Se sei lontano
dal router, il C3 può non agganciare la rete mentre un ESP32 normale sì
- "AP non visibile" è più frequente sul C3 perché la stack
WiFi della libreria si comporta diversamente
Vedo un AP "BaroSat" o simile, non "My TinyGS"
Significa che il nome stazione è stato modificato in una
configurazione precedente, e l'AP usa quel nome al posto del default.
In TinyGS l'AP locale prende il thingName della stazione: se hai
rinominato la stazione a "BaroSat" dalla Web Panel, dopo il riavvio l'AP si
chiamerà "BaroSat", non più "My TinyGS".
Per tornare al default: pio run -e ESP32 -t erase seguito da
flash → NVS pulita → default ripristinato.
Sketch diagnostico SPI
Quando non capisci se è cablaggio, alimentazione o modulo guasto, la cosa più
rapida è flashare uno sketch minimale che fa una sola operazione SPI:
leggere il registro REG_VERSION (0x42) del SX1278. Il chip risponde
sempre con 0x12 se è SX1278.
- Riceve 0x12 → modulo OK, problema è altrove (config TinyGS)
- Riceve 0x00 → no risposta. Cause: MOSI/MISO scambiati,
NSS sempre HIGH, SCK staccato, modulo non alimentato
- Riceve 0xFF → MISO scollegato (legge sempre HIGH)
- Riceve altro → modulo presente ma non è SX1278 (probabile
SX1262 o altro)
Lo sketch è una trentina di righe di Arduino. Se vuoi te lo passo nella sezione
contatti, lo metto su GitHub Gist quando ho un attimo.
"Tutto sembra ok ma non ricevo nessun pacchetto"
Il flusso completo funziona (WiFi, MQTT, radio) ma sul dashboard di tinygs.com
non vedi mai un pacchetto.
- Stazione non registrata: senza registrazione con OTP il
backend non ti assegna pass. Vai su
tinygs.com/user/addstation
- Coordinate sbagliate: se nel profilo hai messo lat/lon
errate, il backend ti assegna pass che non ti passano sopra
- Antenna scarsa o male posizionata: dentro casa difficilmente
riceverai. Anche all'aperto con stilo da 4 cm la sensibilità è marginale
- Pazienza: i pass durano ~10 minuti, e per molti satelliti il
pacchetto di telemetria viene trasmesso ogni 1-2 minuti. Devi essere in ascolto
nel momento giusto. Il primo pacchetto ricevuto può arrivare ore dopo
l'attivazione