bb378f16d097c57c0afc26ca0c5d2acdc14be163
- decodeTelemetry() ora scarta frame incompleti o con CRC8 errata (prima non validava nulla: frame corti/corrotti da ESP-NOW venivano decodificati leggendo oltre il frame -> telemetria spazzatura, e OOB read su FLIGHT_MODE). - test_decode.cpp: vettori ricostruiti come frame reali con CRC valida (calcolata offline), battery ri-quadrato a lth=10, assert bat_fuel_drawn corretto a 350 (era 89678, pre-patch uint24), test "non valida CRC" invertito in "rigetta CRC errata", aggiunto test su frame troncato. - Emulatore (03) e backpack reale usano lo stesso framing/CRC -> passano. DA RI-ESEGUIRE A BANCO: 'pio test -e esp32dev_test' e test RF reale. Se la telemetria reale sparisce, il backpack potrebbe non rilasciare una CRC valida nel frame ESP-NOW -> in tal caso ripiegare su validazione solo-lunghezza. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Crossfire / INAV Telemetry Tracker
Leggere la telemetria di un aeromodello INAV, ritrasmessa dal modulo TX ExpressLRS via TX Backpack / ESP-NOW, con un ESP32 DevKit a terra. Obiettivo finale: antenna tracker.
Catena dati
INAV FC (GPS) --CRSF--> RX ELRS --link RF--> TX ELRS
--> TX Backpack --ESP-NOW (canale 1, MAC=UID)--> ESP32 a terra
Il backpack ritrasmette i frame di telemetria CRSF; l'ESP32 imposta il proprio MAC = UID (hash della bind phrase) per riceverli.
Sottoprogetti
01_telemetry_reader/
Sketch minimale RX-only: riceve, fa parsing CRSF (terseCRSF) e stampa una
dashboard leggibile su seriale. Il punto di partenza più semplice per validare
la catena. Vedi 01_telemetry_reader/README.md.
02_telemetry_bridge/
Firmware unico multi-modo (consigliato d'ora in poi). 4 modalità a runtime selezionabili col pulsante BOOT (salvate in NVS):
- HUMAN — dashboard leggibile
- CRSF_DUMP — dump esadecimale dei frame
- LTM — traduzione CRSF→LTM v2 per mwptools (monitoraggio volo)
- MSP — MSP-over-CRSF sperimentale + hook uplink
Codice condiviso in lib/EspNowCrsf (ESP-NOW/ricezione) e lib/Ltm (encoder LTM).
Vedi 02_telemetry_bridge/README.md.
Cosa è fattibile e cosa no (verificato)
| Funzione | Stato | Note |
|---|---|---|
| Lettura telemetria (GPS/batt/assetto/link) | ✅ Fattibile | downlink via backpack |
| Monitoraggio volo in mwptools (LTM) | ✅ Fattibile | LTM unidirezionale |
| MSP bidirezionale verso FC via backpack | ❌ No | backpack è downlink-only (ELRS maintainer, #3510) |
| MSP bidirezionale (missioni/config) | ⚠️ Serve altro link | SiK/3DR seriale o mLRS/MSPX |
Setup comune
- VSCode + PlatformIO, apri la sottocartella del progetto che vuoi usare.
- Genera l'UID dalla bind phrase su https://expresslrs.github.io/web-flasher/
e mettilo in
src/my_config.h. - Sulla radio (RadioMaster): Lua ELRS → Backpack → Telemetry = ESPNOW.
- Verifica che i sensori GPS compaiano sulla radio (EdgeTX → Telemetry → Discover).
- Build → Upload → Monitor (115200).
Riferimenti
- ELRS Backpack Telemetry: https://www.expresslrs.org/software/backpack-telemetry/
- Limiti uplink (maintainer): https://github.com/ExpressLRS/ExpressLRS/discussions/3510
- Esempio ESP-NOW: https://github.com/druckgott/ELRS-Backpack-Example-ESPNOW
- Parser CRSF: https://github.com/zs6buj/terseCRSF
- LTM (INAV): https://github.com/iNavFlight/inav/blob/master/src/main/telemetry/ltm.c
- mwptools: https://codeberg.org/stronnag/mwptools
Languages
C
98.1%
C++
1.9%